文章目录
一,短语,直接短语,句柄,素短语
定义
如果 β 中至少含有一个终结符,而且除它自身之外不再含任何更小的素短语,那么称 β 为 素短语
题目
令文法 G 1 为
① S − > ( L ) ∣ a S ∣ a
② L − > L , S ∣ S
证明( S , ( a ) )是它的一个句型,指出这个句型的所有短语,直接短语,句柄和素短语。
步骤一:画出语法树
1.判断短语
一个句型的语法树中任一子树的叶节点所组成的符号串都是该句型的短语。
对于第一层的非终结符 S ,其叶节点所组成的短语是(S,(a))
对于第二层的非终结符 L ,其叶节点所组成的短语是S,(a)
对于第三层的非终结符 L ,其叶节点所组成的短语是S
对于第三层的非终结符 S ,其叶节点所组成的短语是(a)
对于第四层的非终结符 L ,其叶节点所组成的短语是a
对于第五层的非终结符 S ,其叶节点所组成的短语是a
故短语有:
① (S,(a))
② S,(a)
③ S
④ (a)
⑤ a
2.判断直接短语
一个句型的语法树中任一最小子树的叶节点所组成的符号串都是该句型的短语。
故直接短语有:
① S
② a
3.判断句柄
句柄是最左边的直接短语
故句柄为:
① S
4.判断素短语
有后往前对短语进行判断,如果短语中至少含有一个终结符,而且除它自身之外不再含任何更小的素短语,那么称该短语为素短语
① 对于短语 a ,a不含其他任何更小的素短语。故短语 a 为素短语
② 对于短语 (a) ,(a) 含素短语 a。故短语 (a) 不是素短语
③ 对于短语 S ,S 不含终结符。故短语 S 不是素短语
④ 对于短语 S,(a) ,S,(a) 含素短语a。故短语 S,(a) 不是素短语
⑤ 对于短语 (S,(a)) ,(S,(a)) 含素短语a。故短语 (S,(a)) 不是素短语
故素短语为:
① a
二.规范归约:
三.移进规约语法分析过程
语法分析过程步骤:
四.移进归约分析过程中存在的问题
解决冲突的方法:
一 .算符优先分析
• 考虑二义文法文法G(E):
G(E): E->i| E+E|E-E|E*E|E/E|(E)
G(E)的二义性表现:
算符优先的规约方法:(优先规则:先乘除后加减,同级从左到右)
算符优先文法及优先表构造
1.FIRSTVT构造:
A->a… ,即以终结符开头,该终结符进FIRSTVT
A->B… ,以非终结符开头,该非终结符的FIRSTVT进A的FIRSTVT
A->Ba…,先以非终开头,紧跟终结符,则终结符进FIRSTVT
2.LASTVT构造
A->…a ,即以终结符结尾,该终结符进LASTVT
A->…B ,以非终结符结尾,该非终结符的LASTVT进A的LASTVT
A->…aB,先以非终结尾,前面是终结符,则终结符进LASTVT
3.构造算符优先表
二 、LR分析器
LR(0)文法:
1.判断LR(0)文法:
无冲突项目(移进-归约,归约-归约)
2.LR(0)分析表
ACTION:
Sn:遇此终结符到n状态
rn:此状态n为归约项目,此行都填rn(n是所用的哪个表达式)
acc:接受项目处填acc
GOTO:
填n,经过此非终结符到达状态n。
3.拓广文法 (0)s’->s,(1)s->aSb …
看完这些可能有以下疑问:
(1)怎样算是移进归约,归约归约冲突?
(2)移进项目是什么,归约项目是什么?
(3)如何构造LR(0)分析表?
(4)这个拓广文法是啥?
可能还有一些其他疑问,让我们看看下面的一些知识点,来理解一下LR(0)相关知识点。
(1)项目:
1)归约项目:(A->α ·) 2)移进项目:(A->α ·x(终结符)β
3)接受项目:(S->α · ) 4) 待约项目(A->α ·x(非终结符)β
(2)项目集闭包:所有等价项目组成项目集I,称为项目集闭包,每个项目集闭包对应自动机的一个状态。
(3)等价项目:A->α ·Bβ 有等价项目(因为看到了·B(点后有非终结符))为B的所有初始项目(B->·α )
SLR(1)文法:
- 判断SLR(1)文法:
(1)DFA中存在冲突项目(移进-归约,归约-归约)
(2)In = {A1->α ·a1β ,A2->α ·a2β …(移进) ,B1->α · ,B2 ->α · …(归约)}
当{a1,a2, …}与FOLLOW(B1),FOLLOW(B2)… 两两不相交时,为SLR(1)文法
2.SLR(1)分析表:
对每个归约项目A->α ·,求FOLLOW(A)得到的输入符号处填rn,其余与LR(0)分析表相同。
LALR(1)文法:
1.判断LALR(1)文法:
合并同心集后无归约-归约冲突,(同心集是核相同,向前搜索符不同)
LR(1)文法:
1.判断LR(1)文法:
构造带向前搜索符的DFA,无归约-归约冲突。
2.LR(1)的DFA:
In中,每个项目都形如 A->α ·β ,a
A->α ·Bβ ,a的等价项目:
B->·r,b中 b=FIRST(βα ):β=ε时,b=a 继承
β≠ε 时,b=FIRST(β )
3.LR(1)分析表:
每个状态In中,若存在归约项目,其rn根据向前搜索符填写。
参考链接:
https://blog.csdn.net/weixin_43730142/article/details/105424703.
https://blog.csdn.net/starter_____/article/details/88601595.