Presentation is loading. Please wait.

Presentation is loading. Please wait.

主要内容  LR(0) 分析. 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→

Similar presentations


Presentation on theme: "主要内容  LR(0) 分析. 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→"— Presentation transcript:

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) 分析过程。


Download ppt "主要内容  LR(0) 分析. 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→"

Similar presentations


Ads by Google