实验内容

在pa1a中,我们借助lalr1提供的基于lalr(1)文法的parser generator实现了decaf的parser。在这一部分,我们的目标与pa1a相同,但不再使用lalr(1)文法,而是使用ll(1)文法,并希望支持一定程度的错误恢复。

目前lalr1中的parser和lexer耦合的比较紧,这主要是为了lalr1能更方便地检查产生式中的终结符和非终结符是否都有定义,所以没法分开成单独的lexer和parser,至少我还没有想到什么比较优雅的解决方案。因此,对于本阶段的lexer部分,大家需要把pa1a的内容复制过来。

目前的框架中,为了实现可空的else语句,使用的产生式并不完全符合ll(1)文法,对此lalr1会汇报一个冲突警告,这是最终版本的parser中唯一一个允许的警告,大家要设法消除自己编写的产生式中的冲突警告。

pa1b的目标与pa1a是一致的,框架中已经提供了decaf的基础语法的parser,大家需要在此基础上使用ll(1)文法实现我们要求的拓展语法。新语法具体细节可以参考专门的文档。如果有什么特别需要注意的地方,之后会在这里补充。

Last updated