【精品】PPT课件 LR分析法
合集下载
第6章 LR分析
(3)查状态转换表,新的状态进状态栈。 ※接受:分析成功,终止分析。 ※出错:报告出错信息。 (2) 具体分析过程:
LR分析算法
• 置ip指向输入串w的第一个符号
▫ ▫ ▫ ▫ ▫ ▫ ▫ ▫ 令S为栈顶状态 a是ip指向的符号 重复 begin if ACTION[S,a]=Sj then begin PUSH j,a(进栈) ip 前进(指向下一输入符号) end else if ACTION[S,a]=rj (第j条产生式为A)
Action[sm, ai]= sj 表示移进ai ,并转 j 状态 格局变为: 分析栈 s0s1… sm j 输入串 #X1…Xmai ai+1…an#
4、LR分析器的工作过程(续2)
Action[sm, ai]= rj 表示用第 j 条产生式 A→Xm-(k-1)…Xm (有k个符号) 进行归约, 格局变为: 分析栈 s0s1… sm-k 输入串 #X1…Xm-kA aiai+1…an#
2、LR分析器的逻辑结构
• 一个输入串,结束符#,指针ip指当前符号。 • 一个下推分析栈,状态栈和符号栈合在一起,记录 分析的历史和展望材料。状态栈顶的状态sn, 是能识 别符号栈中的符号串X1X2…Xn 的DFA的状态。 • 一个LR分析表,两个子表合在一起。 • 一个LR分析程序,其大致的工作过程:分析的每一 步都根据分析栈顶的状态和当前输入符号,查分析 表,以决定下一步的动作。 • 不同的LR分析器,其总控程序都一样,不同的是其 LR分析表,构造LR分析表的方法不同就形成各种不 同的LR分析法。
一、相关概念
前缀是指该字的任意首部。
例:字abc 的前缀有ε,a,ab,abc
活前缀:是指规范句型的一个前缀,这种
第七章LR分析法
识别活前缀的DFA
拓广文法G[S]: 句子abbcde的可归前缀:
S’ → S[0]
S[0]
S → aAcBe[1] ab[1]
A → b[2]
aAb[3]
A → Ab[3]
aAcd[4]
B → d[4]
aAcBe[1]
识别活前缀及可归前缀的有限自动机
0S 2a
a 5
a 9
14 a
1*
b
3
4
6 A7b
第7章 LR分析法
LR分析法
自底向上分析法的关键是如何在分析过程中 确定句柄
LR分析法给出一种能根据当前栈中的符号 串进行分析的方法,即:向右查看输入串的 K个符号就可以唯一确定分析器的动作是移 进还是归约;用哪个产生式归约。
因而也就能唯一地确定句柄 R 最右推导
规范推导 规范句型 规范归约
LR分析算法
then begin pop || 令当前栈顶状态为S’ push GOTO[S’,A]和A(进栈)
end else if ACTION[s,a]=acc
then return (成功) else error end.重复
7.2 LR(0)分析
例 G[S]: S aAcBe A b A Ab B d
⇔aAcBe[1]
用(1)规约,前部aAcBe[1]
⇔S
这些前部符号串为归约时在栈里的符号串, 规范句型的这种前部称为可归前缀。
可归前缀和子前缀
分析上述每个前部的前缀,对应分别为:
ab[2]
,a,ab
aAb[3] ,a,aA,aAb
aAcd[4] ,a,aA,aAc,aAcd
aAcBe[1] ,a,aA,aAc,aAcB,aAcBe
第4章LR分析法
ACTION 表
a1 S1 S2 … Sn ACTION(S1 ,a1] ACTION(S2 ,a1] … ACTION(Sn ,a1] a2 ACTION(S1 ,a2] ACTION(S2 ,a2] … ACTION(Sn ,a2] … … … … … al ACTION(S1 ,al] ACTION(S2 ,al] … ACTION(Sn ,al]
3 3
7 1
4.5.2 LR(0) 分析法
称为LR(0)分析器。 LR(0)分析法在分析每一步,只需根据当前栈顶状 态而不必向前查看输入符号就能确定采取的动作。 LR(0)分析法对文法的限制较大,对绝大多数高级 语言的语法分析器不适用。 构造LR(0)分析表的思想和方法是构造其他LR分析 表的基础。
1. 4. 7. 10. 13. 16.
(4)LR(0)项目分类 根据圆点所在的位置和圆点后是终结符还是非终结符 把LR(0)项目分为以下几种: 移进项目:
形如A→α•аβ的项目,其中а∈VT, α,β ∈V*。
则有待于移进一个VT符号a到栈中,因此称为移进项目。
待约项目:
形如A→α•Bβ的项目,其中B∈VN, α,β ∈V* 。 即圆点后面为非终结符的项目。 表明用产生式A的右部归约时,首先要将B的产生式右部
4.5 LR分析法
迄今为止我们所学的分析方法对文法都有一定的要 求,即有局限性; 1965年D.Knuth提出了分析效率极高的LR(k)分析 技术;
L: 表示从左至右扫描输入符号串;
R:表示为输入串构造一个最右推导的逆过程。 K:表示为了确定分析动作(移进、归约、接受、报错)而
需要向前看的输入符号的个数。 LR分析对文法要求很少,效率极高,且能及时发现错误,是 目前最广泛使用的方法;一般用上下文无关文法描述的语 言均可用LR分析法 缺点:构造LR分析程序工作量很大。
第07章、LR分析法
一种比较实用的构造方法:------由文法的产生式直 接构造识别活前缀和可归前缀的有限自动机。
10
三、 LR分析器
1. LR分析器的组成 由3部分组成:总控程序、分析表、分析栈。 2. LR分析器的构造 (1) 构造识别文法活前缀的确定有限自动机 (2) 根据该自动机构造相应的分析表(ACTION表、GOTO表)
圆点不在产生式右部最左边的项目称为核,唯一的 例外是S’ → • S。因此用GO(I,X)转换函数得到的J为 转向后状态所含项目集的核。 使用闭包函数(CLOSURE)和转换函数(GO (I,X)) 构造文法G’的LR(0)的项目集规范族,步骤如下: (1) 置项目S’→ • S为初态集的核,然后对核求闭包 CLOSURE({S’→ • S})得到初态的项目集; (2) 对初态集或其它所构造的项目集应用转换函数GO (I,X)= CLOSURE(J)求出新状态J的项目集; (3) 重复(2)直到不出现新的项目集为止。
28
例:文法G[S]: (1) S → aAcBe (2) A → b (3) A → Ab (4) B → d
a S2 ACTION c e b d # acc S5 r2 r3 r4 r1 S4 S6 r2 r3 r4 r1 3 r2 S8 r3 r4 r1 r2 r3 r4 r1 GOTO S A B 1
是否推导出abbcde?
每次归约句型的 前部分依次为: ab[2] aAb[3] aAcd[4] aAcBe[1]
9
二、LR分析要解决的问题
• LR分析需要构造识别活前缀的有穷自动机
可以把文法的终结符和非终结符都看成有 穷自动机的输入符号,每次把一个符号进 栈看成已识别过了该符号,同时状态进行 转换,当识别到可归前缀时,相当于在栈 中形成句柄,认为达到了识别句柄的终态。
10
三、 LR分析器
1. LR分析器的组成 由3部分组成:总控程序、分析表、分析栈。 2. LR分析器的构造 (1) 构造识别文法活前缀的确定有限自动机 (2) 根据该自动机构造相应的分析表(ACTION表、GOTO表)
圆点不在产生式右部最左边的项目称为核,唯一的 例外是S’ → • S。因此用GO(I,X)转换函数得到的J为 转向后状态所含项目集的核。 使用闭包函数(CLOSURE)和转换函数(GO (I,X)) 构造文法G’的LR(0)的项目集规范族,步骤如下: (1) 置项目S’→ • S为初态集的核,然后对核求闭包 CLOSURE({S’→ • S})得到初态的项目集; (2) 对初态集或其它所构造的项目集应用转换函数GO (I,X)= CLOSURE(J)求出新状态J的项目集; (3) 重复(2)直到不出现新的项目集为止。
28
例:文法G[S]: (1) S → aAcBe (2) A → b (3) A → Ab (4) B → d
a S2 ACTION c e b d # acc S5 r2 r3 r4 r1 S4 S6 r2 r3 r4 r1 3 r2 S8 r3 r4 r1 r2 r3 r4 r1 GOTO S A B 1
是否推导出abbcde?
每次归约句型的 前部分依次为: ab[2] aAb[3] aAcd[4] aAcBe[1]
9
二、LR分析要解决的问题
• LR分析需要构造识别活前缀的有穷自动机
可以把文法的终结符和非终结符都看成有 穷自动机的输入符号,每次把一个符号进 栈看成已识别过了该符号,同时状态进行 转换,当识别到可归前缀时,相当于在栈 中形成句柄,认为达到了识别句柄的终态。
《编译原理LR分析》ppt课件
a
– aAb[3]
a,aA
– aAcd[4]
a,aA,aAc
– aAcBe[1]
a,aA,aAc,aAcB
LR分析程序
LR 文法 对于一个cfg 文法, 假如可以构造一张 LR 分析表, 使得它的每一个入口均是唯一的 〔Sj,rj,acc,空白〕,那么称该 cfg 是LR 文法.
LR分析
特征: – .标准的 – .符号栈中的符号是标准句型的前缀,
动作
移进 移进 归约(A→b) 移进 归约(A→Ab) 移进 移进 归约(B→d) 移进 归约 承受
对输入串abbcde#的移进-规约分析过程
符号串abbcde是否是G[S]的子
S aAcBe aAcde aAbcde abbcde
步骤 符号栈 输入符号串 动作
状态栈 ACTION GOTO
1〕 #
LR〔0〕LC〔Ab〕=ab
LR〔0〕LC〔AAb〕=aAb
LR〔0〕LC〔Bd〕=aAcd 的正规式
〔 =VnVt〕上
x
0 S①
2
a 3
b④
5
a
A 6
7
b
⑧
9
a
A
c
10
11
12
d⒀
a
A
c
14 15
16
17
B 18 e ⒆
DFA
a
A
b
x
2
3
6
S
b
1
4
c
B
e
5
7
9
d
8
构造LR〔0〕工程集标准族
活前缀与句柄的关系:
G[S]:
R
=>αβω
第7章 LR分析.ppt
S
1*
b
4
0 a 2 A 3 b 6
c
5 B7e9
d
8
步骤 符号栈 输入符号串
1) # 2) #a
abbcde# bbcde#
动作
移进 移进
状态栈
0 02
ACTION
S2 S4
GOTO
对输入串abbcde#的LR分析过程
S
1*
b
4
0 a 2 A 3 b 6
c
5 B7e9
d
8
步骤 符号栈 输入符号串
它的主要缺点是对于一个实用语言文法的分 析器的构造工作量相当大,K愈大构造愈复杂, 实现相当困难。因此,目前对于真正实用的编译 程序,所采用的LR分析器都是借助于美国Bell实 验室1974年推出的“一个编译器的编译器—YACC” 来实现的。它能接受一个用BNF描述的满足 LALR(1)的上下文无关文法并将自动构造出 LALR(1)语法分析器。
状态栈 ACTION GOTO
1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11)
#
abbcde#
#a
bbcde#
#ab
bcde#
#aA
bcde#
#aAb
cde#
#aA
cde#
#aA
cde#
#aAcd e#
#aAcB e#
#aAcBe #
#S
#
移进
移进
归约(A→b) 移进
归约(A→Ab) 移进
# #
动作
移进 移进 归约(A→b) 移进 归约(A→Ab) 移进 移进 归约(B→d) 移进 归约(S→aAcBe) 接受
对输入串abbcde#的移进-规约分析过程
第四章(3)LR分析法
x2
…
… … …to[S1 , xt] … goto[Sn , xt]
S0
S1 …
goto[S0 , x1] goto[S0 , x2] goto[S1 ,x1] goto[S1 , x2] … …
Sn
goto[Sn , x1] goto[Sn , x2]
表中goto[Si,xj]指出栈顶状态为Si,碰到文法符号为Xj时应转 到的下一状态。
重点:如何构造LR分析表?
LR(0)项目集族和LR(0)分析表的构造
4、LR(0)项目集族
1)基本概念
• 字的前缀:指该字的任意首部。 • 活前缀:指规范句型的一个前缀,它不含句柄之后的任 何符号。在它之后增添一些终结符号后,就可以使之成 为规范句型。即:
* • 对于文法G,若 A,Vt* ,则称为活前缀。 r • 在LR分析的过程中,假定输入串是一个句子,任何时候 符号栈里的文法符号都构成活前缀,配上输入串的剩余 部分,就成为规范句型。
$
bottom
• 活前缀与句柄的关系
∙ 活前缀已完全包含句柄- 此时句柄位于栈顶,需要进行归约。 句柄
bottom
$
$
A
bottom
• 可以构造一个有穷自动机来识别文法G的所有活前缀,这样 就可以自动生成LR分析表。NFA的每个状态是一个项目。 • LR(0)项目:在文法G中每个产生式的右部适当位置添加一 个圆点构成项目。 • 例如:产生式 SXYZ 对应有4个项目。 [0] S· XYZ [1] SX· YZ [2] SXY· Z [3] SXYZ·
后继符号有多种,据此将项目分为多种: (1) 后继符号为终结符: Aα· 称为移进项目; aβ, (2) 后继符号为非终结符:Aα · 称为待约项目; Bβ, (3) 后继符号为空:即圆点在最右边Aα· 称为归约项目; , (4) 归约项目的左边是文法的开始符号Sα·称为接受项目 ,
编译原理_第4章_第3节_LR分析法63页PPT文档
关键问题
❖ 采用自底向下语法分析方法,在分析过程中的每一步,都会面 对两个关键问题:
(1)如何确定句柄 (2)找出的句柄应规约到哪一个非终结符
解决方法:(移进-规约法) (1)引入一个先进后出的符号栈来存放符号,按照顺序把当前
输入符号入栈(移进),然后查看栈顶符号串是否形成一个句柄。 (2)形成一个句柄时,便对此句柄直接规约,把它代替为相
(s0 s1…sms, #X1X2…Xmai, ai+1…an#)
(2) Action[sm, ai]=rn: {Aβ},且s=Goto[sm-|β|, A],则三元式变为:
(s0 s1…sm-|β|s, #X1X2…Xm-|β|A, aiai+1…an#) (3) Action[sm, ai]=acc,宣布接受,三元式不再变化。 (4) Action[sm, ai]=err,报错,三元式不再变化。
A c
d
3
EaA•
Ac•A A•d A•cA
d Ad•
4A c
5
6 AcA•
例:识别acd
状态栈 0 02
024 0245 0246 023
01 0
活前缀栈 当前符号
#
a
#a
c
#ac
d
#acd
#
#acA
#
#aA
#
#E
#
#S
#
输入串 cd# d# #
0
E
S•E E•aA
a
1
SE•
2 Ea•A A•d A•cA
A c
d
3
EaA•
Ac•A A•d A•cA
d Ad•
4A c
5
6 AcA•
❖ 采用自底向下语法分析方法,在分析过程中的每一步,都会面 对两个关键问题:
(1)如何确定句柄 (2)找出的句柄应规约到哪一个非终结符
解决方法:(移进-规约法) (1)引入一个先进后出的符号栈来存放符号,按照顺序把当前
输入符号入栈(移进),然后查看栈顶符号串是否形成一个句柄。 (2)形成一个句柄时,便对此句柄直接规约,把它代替为相
(s0 s1…sms, #X1X2…Xmai, ai+1…an#)
(2) Action[sm, ai]=rn: {Aβ},且s=Goto[sm-|β|, A],则三元式变为:
(s0 s1…sm-|β|s, #X1X2…Xm-|β|A, aiai+1…an#) (3) Action[sm, ai]=acc,宣布接受,三元式不再变化。 (4) Action[sm, ai]=err,报错,三元式不再变化。
A c
d
3
EaA•
Ac•A A•d A•cA
d Ad•
4A c
5
6 AcA•
例:识别acd
状态栈 0 02
024 0245 0246 023
01 0
活前缀栈 当前符号
#
a
#a
c
#ac
d
#acd
#
#acA
#
#aA
#
#E
#
#S
#
输入串 cd# d# #
0
E
S•E E•aA
a
1
SE•
2 Ea•A A•d A•cA
A c
d
3
EaA•
Ac•A A•d A•cA
d Ad•
4A c
5
6 AcA•
第4章 LR分析法
Action Table
stat e
0
Goto Table
) $ E
1
id
s5
+
*
(
s4
T
2
F
3
1
2 3 4 5 6 7 8 9 10 11 s5 s5 s5
s6
r2 r4 r6 s7 r4 s4 r6 s4 s4 s6 r1 r3 r5 s7 r3 r5 s11 r1 r3 r5 r6 r2 r4
FOLLOW(A)={a,b} FOLLOW(B)={a,b} a reduce by A reduce by B reduce/reduce conflict
I0:S’ .S S .AaAb S .BbBa A. B.
reduce by A reduce by B reduce/reduce conflict b
LR分析器工作过程示意图
a + b $
Input
(输入串 + $)
Stack SP
sn xn
LR 分析程序
Output
… … s1 s0 x1 $
分析表 action[.,.] goto[.,.] a : 当前输入
当前分析器应采取的 动作依赖于栈顶与输 入字符
分析器的动作: s : 栈顶
2.
1. 若 action[s,a]=“accept” 报告成功! 若 action[s,a]=“用产生式 A 归约” 执行以下动作: 2a. 文法符号栈与状态栈分别弹出||个 符号。 2b. 文法符号栈中压入A 2c. Push goto[ s* ,A] ,其中s*为状态栈弹出符号后的栈顶状态 若 action[s,a]=“移进状态 s* ” 将a移入文法符号栈,将 s* 移入状态栈 若action[s,a]=“空白”则报错
编译原理-LR分析法 ppt课件
5.3.4.1 LR分析方法概述
5.3.4.2 LR(0)分析器
5.3.4.3 SLR(1)分析器
5.3.4.4 LR(1)分析器
5.3.4.5 LALR(1)分析器
PPT课件
2
7.1.1 LR(0)分析器
例:考虑文法G[S] S aA A cA | d
识别accd是否该文法的句子。
c
Ac.A A.cA
d
AcA. s4
Ad. s3
start S.aA a s0
A.cA A.d
s1
A
SaA. s5
s0 s0as1 栈 s0as1cs2 s0as1cs2cs2 s0as1cs2cs2ds3
accd# ccd#
cd# d# #
shift
shift
shift
动作acton
shift
reduce Ad
B 是产生式,则项目 B . 对活前缀 = 1 也是 有效的。
:伽马 :艾塔
据假设,存在一个规范推导S *Aw 1 B 2w
设2w
*
rm
xw,
则对任何B
有规范推导
S *Aw 1 B 2w 1 B xw 1 xw
所以 B . 对活前缀 1 也是有效的。
其中
go(I, X) = closure(J)
J ={A X . | A . X I }
称函数go(I, X)为转移函数。
项目A X . 称为项目A . X后继。
PPT课件
9
二、识别句柄和活前缀的自动机
若文法G = ( VT, VN, S, P),则识别G的句柄的自动 机为DFA M = ( = VTVN,
第四章_3 LR分析法
r1
r1
r1
r1
r1
4
r2
r2
r2
r2
r2
7
9
5
S4
S5
S6
6
r4
r4
r4
r4
r4
7
r6
r6
r6
r6
r6
8
S8
9
r3
r3
r3
r3
r3
10
S10
r5
r5
r5
r5
r5
4.5.2 LR(0)分析法
• 0 LR分析表的构造步骤
(1)根据文法构造识别文法所有规范句型活前缀 的DFA
(2)将DFA转换成一张LR分析表
S
I1:S’ S·
S ·B A ·aAb
A
I2:S A·
A ·c B ·aBb
B
I3:S B·
B ·d
a
A
I4:A a·Ab
d
c
B a·Bb
I6:B d·
I5:A c·
A ·aAb A ·c
B
c
B ·aBb
a
d
B ·d
I9:A aAb·
♦ 重复上步直到项目集不再增大为止。
(2)转换函数GO G0(I,X)=CLOSURE(J), J的构造与LR(0)转换方法相同,搜索符在J中不变。
例4.18构造文法G’的LR(1)项目集族。
G’: 0. S’ → S 1. S → L=R 2. S → R 3. L → *R 4. L → i 5. R → L
• 4 SLR(1)分析表 ACTION
GOTO
第7章LR分析法
返回目录
7.1.1 LR分析器的工作原理
我们知道,规范归约(最左归约,即最右推导的逆 过程)的关键问题是寻找句柄。LR分析法的基本思 想是:在规范归约过程中,一方面记住已移进和 归约出的整个符号串,即记住“历史”;另一方 面根据所用的产生式推测未来可能遇到的输入符 号,即对未来进行“展望”。当一串貌似句柄的 符号串呈现于分析栈的顶端时,我们希望能够根 据所记载的“历史”和“展望”以及“现实”的 输入符号等三方面的材料,来确定栈顶的符号是 否构成相对某一产生式的句柄。
下 一 状 态 s'=GOTO[s, a] 的 值 实 际 上 是 放 在 ACTION[s, a] 中的 ) ,下一输入符号变成现行输 入符号。 (2) 归约:指用某一产生式A→β进行归约。假 若β的长度为γ,则归约的动作是去掉栈顶的γ 个项,即使状态 sm-γ 变成栈顶状态,然后使 (smγ,A) 的 下 一 状 态 s'=GOTO[sm-γ,A] 和 文 法 符 号 ( 非终结符 )A 进栈。归约的动作不改变现行输入 符号,执行归约的动作意味着呈现于栈顶的符号 串Xm-γ+1…Xm是一个相对于A的句柄。 (3) 接受:宣布分析成功,停止分析器的工作。
通过函数 CLOSURE 和 GO 很容易构造一个文 法 G[S] 的拓广文法 G'[S'] 的 LR(0) 项目集规范 族。如果已经求出了 I 的闭包 CLOSURE(I) ,则 用状态转换函数 GO 可以求出由项目集 I 到另一 项目集状态必须满足的字符 ( 即转换图有向边 上的字符 ) ;然后,再求出有向边到达的状态 所含的项目集,即用 GO(I,X)=CLOSURE(J) 求出 J,再对J求其闭包CLOSURE(J),也就是有向边 到达状态所含的项目集。以此类推,最终构造 出拓广文法G'[S']的LR(0)项目集规范族。
7.1.1 LR分析器的工作原理
我们知道,规范归约(最左归约,即最右推导的逆 过程)的关键问题是寻找句柄。LR分析法的基本思 想是:在规范归约过程中,一方面记住已移进和 归约出的整个符号串,即记住“历史”;另一方 面根据所用的产生式推测未来可能遇到的输入符 号,即对未来进行“展望”。当一串貌似句柄的 符号串呈现于分析栈的顶端时,我们希望能够根 据所记载的“历史”和“展望”以及“现实”的 输入符号等三方面的材料,来确定栈顶的符号是 否构成相对某一产生式的句柄。
下 一 状 态 s'=GOTO[s, a] 的 值 实 际 上 是 放 在 ACTION[s, a] 中的 ) ,下一输入符号变成现行输 入符号。 (2) 归约:指用某一产生式A→β进行归约。假 若β的长度为γ,则归约的动作是去掉栈顶的γ 个项,即使状态 sm-γ 变成栈顶状态,然后使 (smγ,A) 的 下 一 状 态 s'=GOTO[sm-γ,A] 和 文 法 符 号 ( 非终结符 )A 进栈。归约的动作不改变现行输入 符号,执行归约的动作意味着呈现于栈顶的符号 串Xm-γ+1…Xm是一个相对于A的句柄。 (3) 接受:宣布分析成功,停止分析器的工作。
通过函数 CLOSURE 和 GO 很容易构造一个文 法 G[S] 的拓广文法 G'[S'] 的 LR(0) 项目集规范 族。如果已经求出了 I 的闭包 CLOSURE(I) ,则 用状态转换函数 GO 可以求出由项目集 I 到另一 项目集状态必须满足的字符 ( 即转换图有向边 上的字符 ) ;然后,再求出有向边到达的状态 所含的项目集,即用 GO(I,X)=CLOSURE(J) 求出 J,再对J求其闭包CLOSURE(J),也就是有向边 到达状态所含的项目集。以此类推,最终构造 出拓广文法G'[S']的LR(0)项目集规范族。
编译原理张晶 LR分析法图文PPT学习教案
第6页/共113页
第六章 LR分析法及分析程序自动构造(8)
6.1 LR分析器
输入带
下
推
总控程序
输出
栈
分析表
带
二、LR分析器
•一个LR分析器实际上是带有下推栈的确定的有限状 态自动机。可将一个“历史”与这个“历史”下的展 望信息综合为抽象的一个状态
第7页/共113页
第六章 LR分析法及分析程序自动构造(9)
+i #
第24页/共113页
E E+T
ET
T T*F
TF
•F (E)
•F i
第六章 LR分析法及分析程序自动构造(26)
5
i
7
*
2
T
0
#
状态、符号栈
+i #
第25页/共113页
E E+T
ET
T T*F
TF
•F (E)
•F i
第六章 LR分析法及分析程序自动构造(27)
10
F
7
*
2
T
0
#
状态、符号栈
6.1 LR分析器 一、LR分析法的基本思想
在规范归约时,当一串貌似句柄的符号串呈现于栈顶时, LR分析法根据三方面的信息找句柄:
—历史:记录在栈内的符号串移进,归约的历史情况 —展望:预测句柄之后可能出现的信息; —现实:读头下的符号 注:LR分析法的基本思想是符合人的思维习惯的,但实现
有困难,因为基于“历史”对未来的“展望”可能存在多 种可能。当把“历史” 和“展望”材料综合在一起时复杂 性就大大增加。如果简化对“展望”的要求,就可获得实 际可行的分析算法。
6.1 LR分析器 二、 LR分析器
自下而上的LR(k)分析方法PPT共39页
▪
26、要使整个人生都过得舒适、愉快,这是不可能的,因为人类必须具备一种能应付逆境的态度。——卢梭
▪
27、只有把抱怨环境的心情,化为上进的力量,才是成功的保证。——罗曼如乐之者。——孔子
▪
29、勇猛、大胆和坚定的决心能够抵得上武器的精良。——达·芬奇
▪
30、意志是一个强壮的盲人,倚靠在明眼的跛子肩上。——叔本华
谢谢!
39
自下而上的LR(k)分析方法
11、用道德的示范来造就一个人,显然比用法律来约束他更有价值。—— 希腊
12、法律是无私的,对谁都一视同仁。在每件事上,她都不徇私情。—— 托马斯
13、公正的法律限制不了好的自由,因为好人不会去做法律不允许的事 情。——弗劳德
14、法律是为了保护无辜而制定的。——爱略特 15、像房子一样,法律和法律都是相互依存的。——伯克