Download presentation
Presentation is loading. Please wait.
1
主要内容 LR(0) 分析
2
0 S→ E # E→ E+T E→ T T→ id T→ ( E ) 1 S→E # E→E +T 5 T→id 3 E→E+ T T→ id T→ (E) 4 E→E+T 9 E→T 6 T→( E) E→ E+T E→ T T→ id T→ ( E ) 7 T→(E ) E→E +T 8 T→(E) T T ( id E T ) E + ( ( G E 的 LRSM + 2 S→E # #
3
LRSM 给出了所有的可归活前缀 LRSM 中的每个状态将对应一个饱和项目 集: ( 1 )其中一部分是由先驱状态分出来 ( 称为基本项目 ) ; ( 2 )一部分则是由基本项目扩展出来的 ( 称为扩展项目或派生项目 ) 。派生部 分项目的特点是其中的 “ ” 出现在产 生式右部的最左侧。
4
形如 A→ [P] 的项目称为归约型项目 形如 A→ [P] 的项目称为移入型项目 移入-归约冲突 归约-归约冲突 LRSM 不能直接用于 LR 分析 LRSM 提供的信息: ( 1 )合法性检查信息 [A→ a ] ( 2 )移入 / 归约信息 [A→ a ] ; [A→ ] ( 3 )移入 / 归约后的转向状态信息
5
#X1X1 X2X2 … XkXk … XtXt S i0 S i1 S i2 … S ik … S it a i a i+1 …a n # 移入动作:设 S it 的 a i 输入边所指向的状态为 S* #X1X1 X2X2 … XkXk … XtXt S i0 S i1 S i2 … S ik … S it aiai S*S* 归约动作:设按 A→X k+1 X k+2 … X t 进行归约,则首先归约为 A S ik 的 A 输出边所指向的状态设为 S* ,则格局变为: #X1X1 X2X2 … XkXk S i0 S i1 S i2 … S ik A S*S* 设当前格局是: #X1X1 X2X2 … XkXk S i0 S i1 S i2 … S ik A
6
LR 分析模型 Output Stack #anan … aiai … a1a1 LR 分析驱动器 gotoaction Input StSt XtXt ……
7
LR 分析表 Action 矩阵:行代表状态,列代表输入 符,而矩阵元素则表示相应的分析动作: Shift / Reduce? / Accept / Error GoTo 矩阵:行代表状态,而列则代表语 法符号(非终极符,终极符),而矩阵 元素则表示归约后的转向状态。
8
LR(0) 投影函数 0 动作集 : {Shift,Reduce1,Reduce2,... } 投影函数 0 : StateSet→2 0 (S)={Reduce j|B→ S, 且 B→ 是产生式 j} ∪ (if ( 存在 X→ a S 且 a V T ) then {Shift} )
9
LR(0) 文法 如果其 LRSM 0 的每个状态 S 都有 | 0 (S)|=1 ,即 0 (S) 只包含一个元素,我 们称文法 G 是 LR(0) 文法。 若 0 (S)={ Shift } ,则表示 S 只含移入项 目 若 0 (S)={ Reduce j } ,则表示 S 只含一 个 [j] 归约项目。 每个状态的移入 / 归约动作的确定没有冲 突,而且不依赖于输入符号。
10
Action 表的构造 Action( S)= Shift....... 当 0 (S)=Shift Action( S)= Reduce j... 当 0 (S)=Reduce j ( j 不是拓广产生式号) Action( S)= Accept.... 当 0 (S)=Reduce j ( j 是拓广产生式号) Action( S)= Error... ……… 当 0 (S)= Action( )= Error. ……… 是特别引进的 错误状态标记
11
GOTO 表的构造 GoTo( S, X) = S ,当 LRSM 0 中有 S S GoTo( S, X) = , 否则 X
12
LR(0) 分析例 文法如下: S →E # E →E+T | T T →id | (E)
13
#+id()ET S0S0 S5S5 S6S6 S1S1 S9S9 S1S1 S2S2 S3S3 S2S2 S3S3 S5S5 S6S6 S4S4 S4S4 S5S5 S6S6 S5S5 S6S6 S7S7 S9S9 S7S7 S3S3 S8S8 S8S8 S9S9 GoTo 表 Shift Accept Shift Reduce 2 Reduce 4 Shift Reduce 5 Reduce 3 Action
14
LR(0) 驱动程序 1 : Push(S 0 ) ; 2 : Scan(a) ; 3 : S := TopOf( StateStack) ; 4 : case Action( S ) of Error ErrorProcess ; Accept Finish ; Shift { Push(GoTo(S,a) ) ; goto 2} Reduce j { Pop(JJ) ; Push(GoTo(S -JJ,L j )) ; goto3} end
15
LR(0) 分析实例 状态栈 符号栈 输入串 Action Goto 0 id+id# shift 5 05 id +id# reduce4 9 09 T +id# reduce3 1 01 E +id# shift 3 013 E+ id# shift 5 0135 E+id # reduce4 4 0134 E+T # reduce2 1 01 E # shift 2 012 E# accept id+id#
16
文法 G : Z →aAc[1] A →bB [2] | ba[3] B →dB [4] | e [5] 构造文法的 LR(0) 状态机, Action 表和 goto 表,并给出符号串 abdec 的 LR(0) 分析过程。
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.