Bison解析器的多重应用与冲突处理
1. 多重解析器
在单个程序中包含两个完整的解析器是一种可行的方法。不过,每个Bison解析器通常具有相同的入口点 yyparse() ,调用相同的词法分析器 yylex() ,并使用相同的令牌值变量 yylval 。解析表和解析栈存储在像 yyact 和 yyv 这样的全局变量中。如果直接翻译两个语法并编译和链接生成的文件,会出现大量重复定义的符号。解决办法是更改Bison为其函数和变量使用的名称。
1.1 使用 %name - prefix 或 -p 标志
可以在Bison源代码中使用声明来更改Bison生成的解析器中名称的前缀。例如:
%name-prefix "pdq"
这将生成一个入口点为 pdqparse() 的解析器,它会调用词法分析器 pdqlex() 等。具体受影响的名称包括 yyparse() 、 yylex() 、 yyerror() 、 yylval 、 yychar 和 yydebug 。其他解析器中使用的变量可以重命名,也可以设为静态或自动变量,
超级会员免费看
订阅专栏 解锁全文
1661

被折叠的 条评论
为什么被折叠?



