Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2012, 10:48   #1
Silly Student
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 32
По умолчанию Синтаксический анализатор на Antlr - КАК ?

Надо разбить на токены код на С, пытаюсь сделать с помощью ANTLR, делаю вот так.

Код:
#include <CLexer.h>
#include <CParser.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int ANTLR3_CDECL

main	(int argc, char *argv[])
{
    pANTLR3_UINT8               fileName;
    pANTLR3_INPUT_STREAM        inputStream;
    pCLexer                     cLexer;
    pANTLR3_COMMON_TOKEN_STREAM tokenStream;
    pCParser                    cParser;

    // Имя входного файла по умолчанию - "input", но
    // его можно задать аргументом программы
    //
    if (argc < 2 || argv[1] == NULL)
    {
        fileName = (pANTLR3_UINT8) "./test.c";
    }
    else
    {
        fileName = (pANTLR3_UINT8) argv[1];
    }

    // Открываем входной поток, связанный с этим файлом
    //
    inputStream = antlr3AsciiFileStreamNew(fileName);
    if ( inputStream == NULL)
    {
        // Аварийный выход (файл не открывается)
        //
        fprintf(stderr, "Failed to open file %s\n", (char *) fileName);
        exit(1);
    }

    // Создаём лексер, связанный с открытым потоком
    //
    cLexer = CLexerNew(inputStream);
    if ( cLexer == NULL )
    {
        // Аварийный выход (закончилась память, лол)
        //
        fprintf(stderr, "Unable to create the lexer due to malloc() failure1\n");
        exit(1);
    }
    
    // Получаем поток токенов из входных данных
    //
    tokenStream = antlr3CommonTokenStreamSourceNew(ANTLR3_SIZE_HINT, 
                                                   TOKENSOURCE(cLexer));
    if (tokenStream == NULL)
    {
        // Аварийный выход (закончилась память)
        //
        fprintf(stderr, "Out of memory trying to allocate token stream\n");
        exit(1);
    }
    // Создаём парсер, связанный с потоком токенов
    //

    cParser = CParserNew(tokenStream);
    if (cParser == NULL)
    {
        // Аварийный выход (закончилась память, хотя, мне кажется,
        // что здесь более вероятны другие причины ошибки)
        //
        fprintf(stderr, "Out of memory trying to allocate parser\n");
        exit(ANTLR3_ERR_NOMEM);
    }
    // Не знаю
    //как то связано с выводом в консоль всякой фигни
  // cParser->translation_unit(cParser);
    
    pANTLR3_VECTOR tList = tokenStream->getTokens(tokenStream);
   pANTLR3_COMMON_TOKEN token = tList->get(tList,0);
    
    // Уничтожаем созданные "объекты" в том порядке, в котором их создавали
    //
    cParser ->free(cParser);
    cParser = NULL;
    tokenStream ->free(tokenStream);
    tokenStream = NULL;
    cLexer ->free (cLexer);
    cLexer = NULL;
    inputStream ->close (inputStream);
	inputStream = NULL;

    return 0;
}
И получаю ошибку main.cpp:78:51: error: invalid conversion from ‘void*’ to ‘pANTLR3_COMMON_TOKEN {aka ANTLR3_COMMON_TOKEN_struct*}’ [-fpermissive]

Которая совершенно не гуглится. Народ, что делать и как быть дальше ? Документация к ANTLR, или её примеры, всё отсутствует просто как класс.
Silly Student вне форума Ответить с цитированием
Старый 19.11.2012, 19:05   #2
Silly Student
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 32
По умолчанию

Неужели никто не в курсе ?
Silly Student вне форума Ответить с цитированием
Старый 19.11.2012, 19:30   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я впервые о нем слышу...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.12.2012, 19:25   #4
Silly Student
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 32
По умолчанию

Актуально !
Silly Student вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синтаксический анализатор Arturko Помощь студентам 62 14.06.2012 18:54
Синтаксический анализатор Jeka57 Помощь студентам 1 05.06.2011 22:47
Синтаксический анализатор Ita Фриланс 0 29.03.2011 01:37
Синтаксический анализатор Lifefine Общие вопросы Delphi 3 09.10.2010 19:42
Синтаксический анализатор delphin100 Общие вопросы Delphi 10 01.05.2010 12:50