我试图在解析另一个字符串的过程中使用预定义的语法解析一个常量字符串。
我的main()
来电yyparse()
,用户开始输入,当某个语法匹配时,例如MACRO
或其他什么,我想执行yy_scan_string("...");
我遇到了几个问题
#ifndef
语句来解决这个问题
yy_scan_string
后,我尝试拨打yyparse()
,但这让我陷入无限循环yy_delete_buffer
,那么我将终止主解析,然后代码退出。我错过了什么?看起来像一个简单的任务,我只想在解析文件的过程中解析存储的字符串,然后返回常规解析。
答案 0 :(得分:1)
如果您要使用yy_scan_string()
来提取新字符串,最好还是使用yypush_buffer_state()
和yypop_buffer_state()
来保存当前解析状态。 (有关示例实现,请参阅Multiple Input Buffers。)
答案 1 :(得分:0)
你是否试图在另一个解析的中间调用bison生成的解析器?请记住,解析器是有状态的 - 如果你想以可重入的方式使用bison,你必须特别请求bison生成一个可重入的解析器,这不是默认的。野牛手册中有文档说明如何请求。例如,请参阅:http://www.gnu.org/software/bison/manual/bison.html#Pure-Decl
顺便说一句,我会注意到,默认情况下,flex也不是可重入的,你可能必须在那里做同样的事情。