flex ++ switchstream - PullRequest
       19

flex ++ switchstream

0 голосов
/ 06 ноября 2011

Я пытаюсь написать парсер, используя 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 (я вижу, что он печатает в правилах зубров), но в конце я нашел только пустой файл с именем«бар» без чего-либо в нем.

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

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 Ответ

2 голосов
/ 06 ноября 2011

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

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

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

...