详细的自底向上分析法的解读

详细的自底向上分析法的解读
LR构造分析表
LR分析表的结构如上,其分为两个部分Action Goto
Action
两个参数状态i,终结符号a(s(i)代表第i个状态,r(i)代表第i条表达式)
移入j:j是一个状态,把j压入栈(同时移入a)
归约A->B:把栈顶的B归约到A(并根据Goto表项压入新状态)
接受:接受输入,完成分析
报错:在输入中发现语法错误
Goto
Goto[i,A]=j
什么时候查看Goto表?
当出现规约时,如当前状态为032,分析动作为r3(E->ACD),将2弹出,查看Goto表[3][E],将新的状态压入栈中,再分析下一个字符是移进还是规约(查看Action表)

LR(0)中不应出现的现象
要求每个项目集的诸项目是相容的,即在同一项目集中,不应出现:
1.移进项目与归约项目并存;
2.多个归约项目并存.
若文法G满足上述条件,即不含上述冲突项目,则称G为LR(0)文法.
显然,只有当一文法是LR(0)文法时,才能构造出无冲突动作的分析表来.

当出现移入-规约的冲突时知道不是LR(0)文法,如果用Follow集可以解决掉冲突则为LSR(1)文法。

SLR(1)与LR(0)的关系:
SLR(1)与LR(0):简单的LR语法分析技术(即SLR(1)分析技术)的中心思想是根据文法构造出LR(0)自动机。
LR(0):见到First集就移进,见到终态就归约
SLR(1)见到First集就移进,见到终态先看Follow集,与Follow集对应的项目归约,其它报错。
对于存在移进-归约冲突的项目集:
Ii={A1→b.a11,…,Am→·amm,B1→·,…,Bn→·}

FOLLOW(Bk)( 1≦k≦n)与{a1,a2,…,am}两两互不相交时,则称满足这种条件的文法为SLR(1),可以采用SLR(1)分析
即规约后的非终结符的Follow集与将要移进的终结符没有交集,根据Follow集判断在当前状态应该用哪条“产生式”

具体SLR(1)分析表的构造:

对于项目集:
Ii={ B→·b, A→·, C→·}

(1)若GO[Ii, b]=Ij ,置Action[i,b]=“sj”
(2)若a是Follow(A),置Action[i,a]=“rj”, j为A→
(3)若a是Follow(C),置Action[i,a]=“rk”, k为C→
(4)其他均置error
即仅在 被规约出的非终结符 的 Follow集合元素对应的列 填写对应的规约动作

LR(1)在LR(0)的基础上增加了向前搜索符号,

精确地指明哪些符号可以跟在句柄的后面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值