2016-05-20 18 views
0

我已生成sintax.tab.hhsitax.tab.cc与成功野牛和包括在lex.l以产生lex.yy.cc用下面的命令:如何在其他地方使用yyparse()的野牛?

bison -d sintax.yy 
flex lexer.l 

和我有3个对应文件的简单解析器,在syntax.yylexer.l我不在最后的部分不要放任何C++代码;这是正确的吗?

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

在我自己的方法在其他类中声明我怎么能:

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

回答

0

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

借助Flex,您可以使用的功能:

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

将输入切换到一些源比其他标准输入(主叫yyparse之前调用这些)。还有一堆“缓冲”函数可用于在动态创建多个缓冲区并在解析过程中在它们之间切换(可用于处理诸如'include'指令之类的内容)。

你可以在the flex documentation