如何在其他地方使用野牛的 yyparse()?
How to use yyparse() of bison somewhere else?
我已经使用 bison 成功生成了 sintax.tab.hh
和 sitax.tab.cc
,并包含在 lex.l
中以使用以下命令生成 lex.yy.cc
:
bison -d sintax.yy
flex lexer.l
并且我有一个简单解析器的 3 个对应文件,在 syntax.yy
和 lexer.l
我没有在最后部分放置任何 C++ 代码;这样对吗?
我想在我正在处理的另一个项目中使用这些文件,所以我不知道该怎么做。
在另一个 class 声明的我自己的方法中,我怎样才能:
- 指定解析器的输入将是定义的字符串?
- 用另一个字符串重新启动解析器?
这实际上只是一个 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' 指令之类的事情很有用)。
中阅读有关它们的所有信息
我已经使用 bison 成功生成了 sintax.tab.hh
和 sitax.tab.cc
,并包含在 lex.l
中以使用以下命令生成 lex.yy.cc
:
bison -d sintax.yy
flex lexer.l
并且我有一个简单解析器的 3 个对应文件,在 syntax.yy
和 lexer.l
我没有在最后部分放置任何 C++ 代码;这样对吗?
我想在我正在处理的另一个项目中使用这些文件,所以我不知道该怎么做。
在另一个 class 声明的我自己的方法中,我怎样才能:
- 指定解析器的输入将是定义的字符串?
- 用另一个字符串重新启动解析器?
这实际上只是一个 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' 指令之类的事情很有用)。