flex++ switchstream

Я пытаюсь написать парсер, используя flex++ и bison. Мне нужен парсер, чтобы иметь возможность читать из файла и записывать новый файл в вывод.

У меня есть yyFlexLexer, созданный следующим образом:

yyFlexLexer lexer;

и я использую это:

int main(int argc, char* argv[])
{
    std::istream* in_file = new std::ifstream(argv[1])
    std::ostream* out_file = new std::ofstream(argv[2])
    lexer.switch_streams(in_file, out_file);
    yyparse();
    return 0;
}

Если я бегу:

./executable foo bar

синтаксический анализатор правильно прочитал файл foo (я вижу, что он печатает по правилам зубров), но в конце я нашел только пустой файл с именем "bar", в котором ничего нет.

Я также попытался сделать это:

int main(int argc, char* argv[])
{
    std::istream* in_file = new std::ifstream(argv[1])
    std::ostream* out_file = new std::ofstream(argv[2])
    lexer.switch_streams(in_file, out_file);
    while(lexer.yylex())
    ;
    return 0;
}

но это делает то же самое.

1 ответ

Вам нужны действия парсера (в вашем .y файл), чтобы построить некоторое абстрактное синтаксическое дерево анализируемого ввода, и вам понадобится некоторая подпрограмма для красивой печати этого дерева на выходе.

flex а также bison делать только разбор (что не так много). Вы должны сделать все остальное.

Я не понимаю, чего ты хочешь достичь.

Другие вопросы по тегам