如何使用其他地方的野牛yyparse()?

时间:2016-05-20 04:49:30

标签: c++ bison flex-lexer

我已成功生成sintax.tab.hhsitax.tab.cc bison并包含在lex.l中,以使用以下命令生成lex.yy.cc

bison -d sintax.yy
flex lexer.l

我在syntax.yylexer.l中有一个简单解析器的3个相应文件。我不会在最后部分放置任何C ++代码;这是对的吗?

我想在我正在处理的另一个项目中使用这些文件,因此我不知道如何执行此操作。

在我自己的另一个类中声明的方法中,我该怎么做:

  1. 指定解析器的输入将是一个已定义的字符串吗?
  2. 用另一个字符串重新启动解析器?

1 个答案:

答案 0 :(得分:0)

这实际上只是一个lex(flex)问题,因为词法分析器处理输入。

使用flex,您可以使用以下功能:

yyrestart(FILE * input_file)
yy_scan_string(const char * string)
yy_scan_buffer(const char * buffer, size_t size)

将输入切换到stdin以外的某个源(在调用yyparse之前调用这些来源)。还有一堆"缓冲区"您可以使用这些函数动态创建多个缓冲区,并在解析过程中在它们之间切换(对于处理' include'指令等内容非常有用)。

您可以在the flex documentation

中阅读所有相关信息