ML-YACC Tiger解析器无法正确解析LVALUE



我正在使用ML-YACC在SML中的老虎编译器的解析器组件上工作。我的语法文件找不到任何明显的问题(我已经使用了优先规则来解决所有转移冲突),但似乎永远不会使用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规则(其中lvaluelvalue LBRACK exp RBRACK)将其降低。相反,YACC使用第三个exp规则找到了语法错误,并用ASSIGN替换为OF和解析。

lvalue DOT ID发生类似的问题。

我在键入问题时解决了我的问题,所以我会回答我的问题,以防其他人遇到这个问题。

问题(我认为)是lvalue的语法是左记录的。我认为YACC可能会发出警告,但事实并非如此 - 也许我设定的优先规则隐藏了问题。左图语法解决了问题:

编辑:左派恰好解决了这个问题,但左记录不是问题。请参阅下面的评论和类似的链接问题。

lvalue : ID lvalue'                 ()
lvalue' :                           ()
        | DOT ID lvalue'            ()
        | LBRACK exp RBRACK lvalue' ()

相关内容

  • 没有找到相关文章

最新更新