Presentation is loading. Please wait.

Presentation is loading. Please wait.

主要内容 :  SLR(1) 分析方法. LR(0) 分析方法的不足  LR(0) 方法对文法的要求严格。  LR(0) 方法容易出现冲突状态。

Similar presentations


Presentation on theme: "主要内容 :  SLR(1) 分析方法. LR(0) 分析方法的不足  LR(0) 方法对文法的要求严格。  LR(0) 方法容易出现冲突状态。"— Presentation transcript:

1 主要内容 :  SLR(1) 分析方法

2 LR(0) 分析方法的不足  LR(0) 方法对文法的要求严格。  LR(0) 方法容易出现冲突状态。

3 一个文法例 : G E : S→E # [1] E→E + T [2] E→T [3] T→T  P [4] T→P [5] P→id [6] P→( E ) [7]

4 图 4.5.5.3 G E 的 LRSM 0 + E P id # + P ( T T (   E ( P ) 4 E→ T  T→ T   P 7 P→ id  5 E→ E +  T T→  T  P T→  P P→  id P→  (E) 3 T→ P  4 S→ E  # E→ E  + T 1 S→  E # [1] E→  E+T [2] E→  T [3] T→  T  P [4] T→  P [5] P→  id [6] P→  (E) [7] 0 T→ T   P P→  id P→  (E) 8 T→ T * P  9 E→ E+T  T→ T   P 11 P→ (E  ) E→ E  +T 12 P→(E)  10 P ( T P → (  E ) E→  E+T E→  T T→  T  P T→  P P→  id P→  (E) 6 7 8 S→ E#  2

5 如果某个状态有如下项目集: { A →  , B →  , D→   d  } ,则存在 着归约 - 归约,归约 - 移入冲突 若用 A →   归约,则当前输入符应在 A 的 Follow 集中 若用 B →   归约,则当前输入符应在 B 的 Follow 集 若移入,则当前输入符应为 d 。

6 SLR(1) 分析条件 LRSM 0 中存在着状态 { A 1 →  1  , … , A n →  n  , B 1 →  1  a 1 r 1 , … , B n →  n  a n r n } Follow(A 1 )  …  Follow(A n )  {a 1,…,a n }= 

7 SLR(1) 文法的定义 SLR(1) 文法的投影函数  1 定义如下:  1 : StateSet  (V T ∪ {#}) →2   1 (S,a) = {Reduce j |B→  S,a  Follow(B),B→   P} ∪ (if 存在 X →  a  S 且 a  V T then {Shift})  如果 LRSM 0 中的每个状态 S ,对任意 a  V T , 使得 |  1 (S,a)|  1 ,则称相应文法为 SLR(1) 文法。

8 SLR(1)__Action 表的构造 若  1 (S,#)={Shift} Action( S, # )=Accept 若  1 (S,a)={Shift } 且 a  # Action( S, a) =Shift 若  1 (S,a)={Reduce j} Action( S, a) =Reduce j 若  1 (S,a)=  Action( S, a) = Error

9 SLR(1)__GoTo 表的构造 GoTo( S, X) = S , 当 LRSM 0 中有 S S GoTo( S, X) = error ,否则 合并的 SLR(1) 分析表,合并方法 : Action( S, a) = Shift i, 当 Action(S, a)= Shift 且 GoTo(S,a)=S i GoTo( S, X) = S i, 当 GoTo(S,X)=S i 且 X  V N X

10 图 4.5.5.3 G E 的 LRSM 0 + E P id # + P ( T T (   E ( P ) 4 E→ T  T→ T   P 7 P→ id  5 E→ E +  T T→  T  P T→  P P→  id P→  (E) 3 T→ P  4 S→ E  # E→ E  + T 1 S→  E # [1] E→  E+T [2] E→  T [3] T→  T  P [4] T→  P [5] P→  id [6] P→  (E) [7] 0 T→ T   P P→  id P→  (E) 8 T→ T * P  9 E→ E+T  T→ T   P 11 P→ (E  ) E→ E  +T 12 P→(E)  10 P ( T P → (  E ) E→  E+T E→  T T→  T  P T→  P P→  id P→  (E) 6 7 8 S→ E#  2

11 +  id()# 0SS 1SA 2 3SS 4R5 5R6 6SS 7R3S 8SS 9R4 10R7 11R2SR7 12SS State Action - Lookahead

12 +  id()# ETP 0S5S6 174 1S3A 2 3S5S6114 4R5 5R6 6S5S6 1274 7R3S 8S5S69 9R4 10R7 11R2S8R2 12S3S10 State Action - Lookahead GoTo

13 SLR(1) 驱动器 [1] : Push(S 0 , -) ; [2] : Scan(a) ; [3] : S := TopOf( StateStack) ; [4] : case Action( S,a ) of  Error  ErrorProcess ;  Accept  Finish ;  Shift i  begin Push(S i,a) ; goto2 end ;  Reduce j  begin Pop(JJ) ; Push( GoTo(S - JJ, L j ),L j ); goto 3 end end

14 分析栈 符号栈 输入串 分析动作 转向状态 0 id  id+id# S5 0,5 id  id+id# R6 4 0,4 P  id+id# R5 7 0,7 T  id+id# S8 0,7,8 T  id+id# S5 0,7,8,5 T  id +id# R6 9 0,7,8,9 T  P +id# R4 7 0,7 T +id# R3 1 0,1 E +id# S3 0,1,3 E+ id# S5 0,1,3,5 E+id # R6 4 0,1,3,4 E+P # R5 11 0,1,3,11 E+T # R2 1 0,1 E # Accept

15 SLR(1) 与 LR(0)  SLR(1) 和 LR(0) 具有相同的状态机  LR(0) 只看分析栈的内容,不考虑当前输入符 SLR(1) 考虑输入符,用 follow 集来解决冲突, 因此 SLR(1) 要比 LR(0) 分析能力强

16  括号文法定义如下: Z → S # S → (S) S | 构造该文法的 SLR(1) 分析表,并给出输 入流 ( )( ) #的 SLR(1) 分析过程。


Download ppt "主要内容 :  SLR(1) 分析方法. LR(0) 分析方法的不足  LR(0) 方法对文法的要求严格。  LR(0) 方法容易出现冲突状态。"

Similar presentations


Ads by Google