Tags

一道曾今的考题,当做复习了

考虑文法:

S→AaAb

S→BbBa

A→ε

B→ε

1)计算First和Follow集合

2)构造LL预测分析表

首先是First和Follow的计算:

[blockquote source=”FIRST”]

FIRST(X):

可以从X推导得到的串的首符号的集合

算法:

1)如果X是一个终结符号,那么FIRST(X)=X

2)如果X是一个非终结符号,且X→Y1Y2….其中Y1…Yi-1 能推导出空串,则将FIRST(Yi)加入FIRST(X)中

3)如果X→∊,则∊也在FIRST(X)中

[/blockquote]

[blockquote source=”FOLLOW”]

FOLLOW(X):

可能在某些句型中紧跟在A右边的终结符号的集合

算法:

1)$在FOLLOW(S)中

2)如果存在一个产生式 A→αXb,那么FIRST(b)中除∊之外的所有终结符号都在FOLLOW(X)中

3)如果存在一个产生式 A→aX,或者A→aXb且FIRST(b)包含∊,那么FOLLOW(A)中的符号都在FOLLOW(X)中

[/blockquote]

于是

First(A) = First(B) = ∊

First(S)由于S能推导出Aa..和Bb..,故First(a)和First(b)包含在First(S)中,可得 First(S)=a,b

 

Follow(S) = $

由于S→AaAb,故Follow(A) = a,b

S→BbBa,故Follow(B) = a,b

First-Follow

然后是LL预测分析表构建

[blockquote source=”LL预测分析表构建算法”]

输入:文法G

输出:预测分析表M

算法:

对于每个G的产生式 A→X:

1)对于First(X)中得每个终结符号a,将A→X加入到M[A,a]中

2)如果∊在First(X)中,那么对于Follow(A)中的每个终结符号b,将A→X加入到M[A,b]中

如果∊在First(X)中,且$在Follow(A)中,也将A→X加入到M[A,$]中

[/blockquote]

由于S→AaAb,S→BbBa而

First(AaAb)=a,故有M[S,a]=S→AaBb

First(BbBa)=b,故有M[S,b]=S→BbBa

A→∊,B→∊, ∊在First(∊)中,Follow(A) = Follow(B)=a,b

故M[A,a]=M[A,b] = A→∊,M[B,a] = M[B,b] = B→∊

LLTable