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