0

我正在尝试使用 flex++ 和野牛编写解析器。我需要解析器能够从文件中读取并在输出中写入新文件。

我有一个 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;
}

但它做同样的事情。

4

1 回答 1

2

您需要解析器的操作(在您的.y文件中)来构建解析输入的一些抽象语法树,并且您需要一些例程来将该树漂亮地打印到输出。

flex并且bison只做解析(这并不多)。你应该做剩下的事情。

我不明白你想要达到什么目的。

于 2011-11-06T10:50:56.707 回答