算法:LR(0)

拓广文法→列项目→项目集规范簇(DFA图)→分析表

拓广文法

  1. 在起始符前面再加上一个起始符

  2. 有选择运算符的,将每一个单列为一个产生式

项目集规范簇

  1. I0,将所有产生式左部加上一个点

  1. 点往后跳一个符号,如果点后面是终结符不用管

  1. 如果点后是非终结符,将这个非终结符的所有项目都写到当前这个项目中(除去第一个拓广文法)。

注意不同项目之间的关系,保证不能重复新建项目簇,如果重复需要指向之前的项目簇。

ACTION-GOTO表

ACTION是终结符的集合,GOTO表中是非终结符的集合。

  • 将当前状态能够转换到达的状态填入表中对应位置

  • GOTO部分直接写序号,ACTION部分需要写S+序号

  • 如果当前状态是最终状态(点在最后),并且在拓广文法中有相应的产生式,则在全部ACTION部分填入r+序号(拓广文法中产生式的序号),代表结束

  • 将额外添加的第一个拓广文法所在的项目簇对应$处填入acc。

Last updated