Bison程序中的常见问题与特性解析
1. Bison程序中的常见错误
Bison本身相当健壮,但仍存在一些常见的编程错误,可能会导致解析器严重失败。
-无限递归:在bison语法中,常见的错误是创建了一个无法终止递归的递归规则。例如:
%% xlist: xlist 'X' ;Bison会以“起始符号xlist无法推导出任何句子”来诊断这种语法错误。
-交换优先级:人们有时会尝试使用%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,规则的优先级是