在下面的语法中:
<------------Correct and inccorrect predictions------------>
Total Labels: 743 Predicted Labels: 522 Accuracy: 0.702557200538
当我解析表达式时
expr : r1 EOF
| r2 EOF
;
r1 : '1' L1 'x' ;
r2 : '1' L2 'y' ;
L1: 'a' ;
L2: 'a' ;
我希望解析器能够创建适当的解析树,但是我收到以下错误:
第1行:2输入'y'不匹配期望'x'
为什么不能正确解析?我可以给它指令吗?
解析代码:
1ay
答案 0 :(得分:2)
解析的第一步是根据词法分析器规则创建令牌流。使用首先匹配的规则创建令牌。所以在你的情况下,每个'a'将是L1。由于r1只是包含L1的解析器规则,因此无法匹配输入,因为规则'r1'期待'x',而不是'y'。
因此,必须对词法分析器规则进行排序,以使特殊的和更具体的规则更加模糊。作为字符串的规则,数字将在最后,但规则为'func','class'将在它们之前。
要解决此问题,请将L1和L2合并为一个规则,并在两个解析器规则中使用它。