编译原理5.3.3-SLR分析表的构造

发布时间:2024-09-25

编译原理

从初态出发, 从初态出发,经读出活 前缀γ 前缀γ后,而到达的项 目集称为活前缀 活前缀γ 目集称为活前缀γ的 有效项目集a I0: S'→E → E→ aA → E→ bB →

I4:A→cA → c A→ cA → A→ d → c I2:E→aA → A→ cA → A→ d → I1: S' → E

A d d A

I8:A→c A → I10:A→ d → I6:E→aA →

E b c

I3: E→bB B → B→ cB → B→ d → d d B

I7:E→bB →

识别文法 活前缀的DFA 活前缀的DFA 图5.7 p106

I5: B→cB → → c B→ cB B→ d →

I11:B→ d → I9:B→cB →

编译原理

有效项目

* ω 如果存在规范推导 S' αAω αβ1β2ω R R

有效的。 则项目A→ 则项目 →β1β2 对活前缀 αβ1 是有效的。 o 如果β2 ≠ ε,应该移进 应该用产生式 → o 如果β2 = ε,应该用产生式A→β1归约 LR分析理论的一条基本定理: 在任何时候, LR分析理论的一条基本定理: 在任何时候, 分析理论的一条基本定理 分析栈中的活前缀X 分析栈中的活前缀X1X2...Xm的有效项目集正 是栈顶状态S 所代表的那个集合。 是栈顶状态Sm所代表的那个集合。

编译原理

G': S'→E E→aA|bB A→cA|d B→cB|d a

I4:A→cA → c A→ cA → A→ d → c I0: S'→E → E→ aA → E→ bB → I2:E→aA → A→ cA → A→ d → I1: S' → E

A d d A

I8:A→c A → I10:A→ d → I6:E→aA →

项目集I 项目集I5 对活前缀 bc有效 有效考虑如下规范推导

E b

(1) S′ E bB bcB ′ c (2) S′ E bB bcB bccB ′ I5: B→cB → (3) S′ E bB bcB bcd ′ → c B→ cB B→ d →

I3: E→bB B → B→ cB → B→ d → d d B

I7:E→bB →

I11:B→ d → I9:B→cB →

编译原理

同一个项目可能对好 几个活前缀都有效a G': S'→E E→aA|bB A→cA|d B→cB|d I0: S'→E → E→ aA → E→ bB →

I4:A→cA → c A→ cA → A→ d → c I2:E→aA → A→ cA → A→ d → I1: S' → E

A d d A

I8:A→c A → I10:A→ d → I6:E→aA →

E b c

I3: E→bB B → B→ cB → B→ d → d d B

I7:E→bB →

I5: B→cB → → c B→ cB B→ d →

I11:B→ d → I9:B→cB →

编译原理

同一个活前缀, 同一个活前缀,可能存在若干个项目对它都是有效的 而且告诉我们应做的事情各不相同,相互冲突。 ,而且告诉我们应做的事情各不相同,相互冲突。 这种冲突通过向前多看几个输入符号, 这种冲突通过向前多看几个输入符号, 或许能够获得 解决。 解决。

编译原理

5.3.3 SLR分析表的构造 分析表的构造SLR(1)分析法的引入 分析法的引入: 分析法的引入

LR(0)文法的活前缀识别自动机的每一状态 文法的活前缀识别自动机的每一状态(项目集 都不含冲突性的项目 项目集)都不含冲突性的项目 项目集

大多数的程序设计语言的文法不能满足 大多数的程序设计语言的文法不能满足LR(0)文法的条件

用向前查看一个符号的办法解决冲突

编译原理

例:设文法 的LR(0)项目集规范族中含有如 设文

法G的 项目集规范族中含有如下一个项目集(状态)I: 下一个项目集(状态) : I = { X→δ bβ /*移进项目 移进项目*/ 移进-归约冲突 → β 移进项目 移进- A→α →α /*归约项目 归约项目*/ 归约-归约冲突 →α 归约项目 归约- B→γ /*归约项目 } 归约项目*/ → 归约项目 解决冲突策略 (1)若a=b,则移进 ) , (2)若a∈Follow(A), 则用 A→α 归约 ) ∈ →α (3)若a∈Follow(B), 则用 B→γ归约 ) ∈ → 归约 (4)此外,报错 )此外,

编译原理

用SLR(1)方法解决冲突 方法解决冲突假定LR(0)规范族的一个项目集I中含有m个移进项目: 假定LR(0)规范族的一个项目集I中含有m个移进项目: LR(0)规范族的一个项目集 A1→αa1β1,A2→αa2β2,…,Am→αamβm 同时含有n个归约项目: 同时含有n个归约项目: B1→α1, B2→α2, …, Bn→αn 如果集合{ }、FOLLOW(B 如果集合{a1,…,am}、FOLLOW(B1)、…、FOLLOW(Bn) 两两不相交, 是现行输入符号, 两两不相交,a是现行输入符号,则: 是某个a i=1,2,…,m,则移进; (1)若a是某个ai,i=1,2,…,m,则移进; i=1,2,…,n, (2)若a∈FOLLOW(Bi),i=1,2,…,n, 则用产生式B 进行归约; 则用产生式Bi→αi进行归约; 此外,报错。 (3)此外,报错。

编译原理

文法5.8) 考虑下面的拓广文法 (文法 文法 (0) S′ E ) (1) E E+T ) (2) E T ) (3) T T*F ) (4) T F ) (5) F (E) ) (6) F I ) 构造其LR(0)项目集规范族 构造其 项目集规范族

例5.11 p111

编译原理

I0 : S′→ E ′→ E → E + T E → T T → T * F T → F F → (E) F → i I1 : S ′→ E E→E+T I2 : E→T T→T*F

I3 : T→F I4 : F → ( E) E → E + T E → T T → T * F T → F F → (E) F → i I5 : F→i

I6 : E→E+T T → T * F T → F F → (E) F → i I7 : T→T*F F → (E) F → i I8 : F → (E ) E→E+T

DFA 图5.8 p112 移进-归约 移进 归约 冲突I9 : E→E+T T→T*F I10: T→T*F I11: F → (E )

移进-接受冲突 移进 接受冲突 接受 移进-归约冲突 移进 归约冲突 归约

编译原理

SLR(1) 解决方法(0) S′ ) (1) E ) (2) E ) (3) T ) (4) T ) (5) F ) (6) F ) E E+T T T*F F (E) I

I1: S′→ E ′→ E→E+T

FOLLOW(S′) = { # }, {#}∩{+}=φ,因此 1中的冲 = ,因此I突可解决。 突可解决。 遇 ‘+’移进 ,遇 ‘#’接受 移进 接受 其它情况则报错。 其它情况则报错。

编译原理

(0) S′ ) (1) E ) (2) E ) (3) T ) (4) T ) (5) F ) (6) F )

E E+T T T*F F (E) I

I2: E→T T→T*F

FOLLOW(E) = { +, ) , # } FOLLOW(E)∩{*}= φ,因此 2中 因此I 因此的冲突可解决。 的冲突可解决。

编译原理

(0) S′ (1) E (2) E (3) T (4) T (5) F (6) F

E E+T T T*F F (E) I

I9: E→E+T T→T*F

FOLLOW(E) = { + , ) , # } FOLLOW(E)∩{*}= φ,因此 9中 因此I 因此的冲突可解决。 的冲突

可解决。

编译原理

更正

构造SLR(1)分析表 构造SLR(1)分析表 SLR(1)

(1)若 属于I (1)若 A→αaβ 属于Ik , 且GO(Ik, a)=Ij , 则置 ACTION[k, a] 为 sj (2)若 属于I (2)若 A→α 属于Ik,a∈FOLLOW(A) , 则置 ACTION[k,a] 为 rj 是产生式A→α A→α的编号 j是产生式A→α的编号 。 (3)若 ′→S属于I →S属于 ACTION[k,#]为 (3)若 S′→S属于Ik, 则置 ACTION[k,#]为 acc (4)若 A]=j (4)若 GO(Ik,A)=Ij , 则置 GOTO[k, A]=j (5)凡不能用规则(1)~(4)填入的空白格均置为“出错 (5)凡不能用规则(1)~(4)填入的空白格均置为“ 凡不能用规则(1)~(4)填入的空白格均置为 标志” 标志”。

编译原理

Follow(S′)={#} ′ Follow(E)={# , ) , +}

状 态 1 2

ACTION i + s6 r2 s7 r2 * ( s4 acc r2 ) #

GOTO E T F 1 2 3

0 s5

(0) S′ (1) E (2) E (3) T (4) T (5) F (6) F

E E+T T T*F F (E) I

编译原理

状 态 i

ACTION + * ( )

# acc r2 r4

GOTO E T F 1 2 3

0 s5 s4 1 s6 2 r2 s7 r2 3 r4 r4 r4 4 s5 s4 5 r6 r6 r6 6 s5 s4 7 s5 s4 8 s6 s11 9 r1 s7 r1 10 r3 r3 r3 11 r5 r5 r5

SLR(1)分析表 分析表 图5.5 p101(0) S′ (1) E (2) E (3) T (4) T (5) F (6) F E E+T T T*F F (E) I

8 r6

2 9

3 3 10

r1 r3 r5

编译原理5.3.3-SLR分析表的构造.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219