You are on page 1of 4

 Consider the grammar

S A

A BA| ε

B aB|b

Prove that the grammar is an LR(1) grammar


Construct an L R(1 ) parsing table for the grammar.
Show the detailed parsing proc edure for the sentence abab, following the style
in slides of this lecture.
解:由题意按照如下步骤对问题进行解答

 将文法进行拓广,结果如下:

(0) S’  S

(1) S  A

(2) A  BA

(3) A  ε

(4) B  aB

(5) B  b

 求解 FIRST(A)

FIRST(A)={ a , b , ε }

 构造该文法的 LR(1)项目集规范族:

状态 项目集

I0 {[S’・S,$],[S・A,$],[A・,$],[A・BA,$] , [B・aB,a/b/$] , [B・b,a/b/$]}

I1 {[S’S・,$]}

I2 {[SA・,$]}

I3 {[AB・A,$] , [A・,$] ,[A・BA,$] , [B・aB,a/b/$] , [B・b,a/b/$]}

I4 {[Ba・B,a/b/$] , [B・aB,a/b/$] , [B・b,a/b/$]}

I5 {[Bb・,a/b/$]}

I6 {[ABA・,$]}

I7 {[BaB・,a/b/$]}

 构造 DFA 如下所示:
SA・,$
B

I2 AB・A,$

A
A・,$
A・BA,$
A ABA・,$
B B・aB,a/b/$
B・b,a/b/$

S’・S,$
I3 I6
S・A,$
A・,$ S S’S・,$
A・BA,$
B・aB,a/b/$
B・b,a/b/$

I1

b
I0
b
Bb・,a/b/$

a
a

a I5
b

Ba・B,a/b/$
B・aB,a/b/$ B BaB・,a/b/$
B・b,a/b/$

I4 I7

 构造 LR(1)分析表如下:

State ACTION GOTO

a b $ S A B

0 s4 s5 r3 1 2 3

1 acc

2 r1

3 s4 s5 r3 6 3

4 s4 s5 7

5 r5 r5 r5

6 r2

7 r4 r4 r4

由上面构造而成的 LR(1)分析表可以看出,表中丌存在多重定义的入口,所以该文法为

LR(1)文法。

 对于句子 abab 的构造过程如下表所示:

Step Symbol State Input Reference Action Output


0 $ 0 abab$ a[0,a]=s4 shift

1 $a 04 bab$ a[4,b]=s5 shift

2 $ab 045 ab$ a[5,a]=r5 reduce Bb

s[4,B]=7

3 $aB 047 ab$ a[7,a]=r4 reduce BaB

s[0,B]=s3

4 $B 03 ab$ a[3,a]=s4 shift

5 $Ba 034 b$ a[4,b]=s5 shift

6 $Bab 0345 $ a[5,$]=r5 reduce Bb

s[4,B]=7

7 $BaB 0347 $ a[7,$]=r4 reduce BaB

s[3,B]=s3

8 $BB 033 $ a[3,$]=r3 reduce Aε

s[3,A]=6

9 $BBA 0336 $ a[6,$]=r2 reduce ABA

s[3,A]=6

10 $BA 036 $ a[6,$]=r2 reduce ABA

s[0,A]=2

11 $A 02 $ a[2,$]=r1 reduce SA

s[0,S]=1

12 $S 01 $ a1,$]=acc accept

 Show that the grammar

S  Aa|bAc|dc| bda

A  d

Is LALR(1) but not SLR(1).


解:由题意针对问题分两部分进行验证
 验证该文法不是 SLR(1)
考虑该文法的 LR(0)项目规范族的状态 0:
I0={S’・S , S・Aa , S・bAc , S・dc , S・bda , A・d}
集合中的第 4 个项目使得当状态 0 面临当前输入符号为 c 时,需要进行移进操作。但是观
察集合中的第 5 个项目,可发现由于 FOLLOW(A)中含有符号 c,而这将使得状态 0 用产生
是 Ad 进行规约。所以在状态 0 面临输入符号为 c 的时候,存在”移进-规约”冲突。所
以该文法丌是 SLR(1)文法。
 验证该文法为 LALR(1)文法
构造文法的 LR(1)项目集规范族如下:
状态 项目集

I0 {[S’・S,$] , [S・Aa,$] , [S・bAc,$] , [S・dc,$] , [S・bda,$] , [A・d,a/$]}

I1 {[S’S・,$]}

I2 {[SA・a,$]}

I3 {[Sb・Ac,$] , [A・d,c/$] , [Sb・da,$]}

I4 {[Sd・c,$] , [Ad・,a/$]}

I5 {[SAa・,$]}

I6 {[SbA・c,$]}

I7 {[Ad・,c/$] , [Sbd・a,$]}

I8 {[Sdc・,$]}

I9 {[SbAc・,$]}

I10 {[Sbda・,$]}

通过对上述规范集进行观察,丌难发现其中并没有具有同心的集合,所以该规范集将仍
然用来构造 LALR(1)文法的分析表。通过对分析表的观察丌难发现该文法丌仅是 LR(1)文法,
亦为 LALR(1)文法。

You might also like