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

How to use yyparse() of bison somewhere else?

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

bison -d sintax.yy
flex lexer.l

并且我有一个简单解析器的 3 个对应文件,在 syntax.yylexer.l 我没有在最后部分放置任何 C++ 代码;这样对吗?

我想在我正在处理的另一个项目中使用这些文件,所以我不知道该怎么做。

在另一个 class 声明的我自己的方法中,我怎样才能:

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

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

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

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

将输入切换到 stdin 以外的其他来源(在调用 yyparse 之前调用这些)。还有一堆 "buffer" 函数可用于动态创建多个缓冲区并在解析过程中在它们之间切换(对于处理 'include' 指令之类的事情很有用)。

您可以在 the flex documentation

中阅读有关它们的所有信息