【发布时间】:2017-09-02 17:45:28
【问题描述】:
我正在使用 ML-Yacc 在 SML 中处理我的 Tiger compiler 的解析器组件。我的语法文件找不到任何明显的问题(我使用优先级规则来解决所有移位减少冲突),但使用lvalue 的第二条和第三条规则似乎永远不会减少,我指定如下:
lvalue : ID ()
| lvalue DOT ID ()
| lvalue LBRACK exp RBRACK ()
exp 的语法是:
exp : lvalue ()
| INT ()
| ID LBRACK exp RBRACK OF exp ()
| lvalue ASSIGN exp ()
...
当尝试解析 a[0] := 5 时,我希望使用第四个 exp 规则(其中 lvalue 是 lvalue LBRACK exp RBRACK)来减少它。相反,Yacc 发现语法错误并用ASSIGN 替换OF 并使用第三条exp 规则进行解析。
lvalue DOT ID 也会出现类似问题。
【问题讨论】:
标签: parsing yacc tiger ml-yacc