Bison解析器:多解析器、冲突处理与状态机制详解
1. 多解析器的实现
在单个程序中包含两个完整的解析器时,可能会遇到符号重复定义的问题。因为每个Bison解析器通常具有相同的入口点yyparse()、调用相同的词法分析器yylex(),并且使用相同的标记值变量yylval,解析表和解析栈也存于全局变量中。
为了解决这个问题,可以通过修改Bison使用的函数和变量名来避免冲突。具体方法如下:
-使用%name - prefix声明:在Bison源代码中使用%name - prefix声明来更改生成解析器中名称的前缀。例如:
%name - prefix "pdq"这将生成一个入口点为pdqparse()的解析器,它会调用词法分析器pdqlex()等。受影响的名称包括yyparse()、yylex()、yyerror()、yylval、yychar和yydebug。
-使用-p和-b标志 </