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 。
也可以使用 -p <
超级会员免费看
订阅专栏 解锁全文
59

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



