Bison 程序中的常见问题与特性解析
1. Bison 程序中的常见错误
Bison 本身相当健壮,但在编写 Bison 解析器时,一些常见的编程错误可能会导致严重的失败。
- 无限递归 :在 Bison 语法中,一个常见错误是创建没有终止条件的递归规则。例如:
%%
xlist: xlist 'X' ;
Bison 会诊断这个语法,给出 “start symbol xlist does not derive any sentence” 这样有些神秘的信息。
- 交换优先级 :人们有时会尝试使用 %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 时会产生冲
超级会员免费看
订阅专栏 解锁全文
47

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



