短语的定义
LR分析法的构成
LR(0)分析
注意使用增广文法
构造LR(0)分析表
步骤一:增广文法
步骤二:
将核心项目和派生项目放在一起
步骤三造表
注意,附加上$符号
注意:归约是不管什么符号
注意:产生式是增广文法从0开始编号 !!!!!!!!!!!!!!!很重要
注意:增广开头置acc
状态从0开始编号
例子:
LR(0)分析实现栈过程
一个例子
首先 在符号栈里填$ 状态栈里面填0 ,输入末尾附加上$ 然后看当前状态和当前输入
如果是移进,则符号栈移入符号,状态栈增加一个状态。
如果是归约则 按照产生式编号归约,消去之前状态(长度个状态!!!!),看前一个状态下遇到这个规约出来的非终结符号会goto到哪个状态。直到最后出现acc
下图是状态栈,当前输入符号始终是a
注意归约弹出状态的时候 是弹出 归约产生式右部的长度个状态
LR(0)文法的定义=没有两种冲突项目
SLR(1)分析表构造
LR(0)会有移进 - 归约冲突
归约归约冲突 有问题!!!
follow集合中有$才在对应位置写r归约。
LR(1)分析表
SLR分析法在处理的时候,follow集合可能和要移进的符号有交集
例子
三种分析表对比
LALR(1)分析表
找出同核心状态 以及有冲突的状态