Bison程序中的常见问题与特性解析
1. Bison程序中的常见错误
1.1 无限递归
在Bison语法中,一个常见的错误是创建了没有终止条件的递归规则。例如:
%%
xlist: xlist 'X' ;
Bison会以“起始符号xlist不能推导出任何句子”这样有些神秘的信息来诊断这种语法错误。
1.2 交换优先级
有时人们会尝试使用 %prec 来交换两个标记的优先级,如下所示:
%token NUMBER
%left PLUS
%left MUL
%%
expr : expr PLUS expr %prec MUL
| expr MUL expr %prec PLUS
| NUMBER
;
这个例子看似让 PLUS 的优先级高于 MUL ,但实际上它们的优先级变得相同了。优先级机制通过比较要移入的标记的优先级和规则的优先级来解决移进 - 归约冲突。在这个例子中,当解析器看到“expr PLUS expr”且下一个标记是 MUL 时,会出现典型的冲突。如果没有 %prec ,规则的优先级是 PLUS ,低于 MUL ,
超级会员免费看
订阅专栏 解锁全文
1083

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



