编译原理第五章答案(5000字) 下载本文

第5章 自顶向下语法分析方法

第1题

对文法g[s]

s

t

(1)

(2) 子程序。

(3)

(4)

→a||(t)∧ →t,s|s 给出(a,(a,a))和(((a,a),,(a)),a)∧的最左推导。 对文法g,进行改写,然后对每个非终结符写出不带回溯的递归经改写后的文法是否是ll(1)的?给出它的预测分析表。 给出输入串(a,a)#的分析过程,并说明该串是否为g的句子。 答案:

也可由预测分析表中无多重入口判定文法是ll(1)的。

可见输入串(a,a)#是文法的句子。

第3题

已知文法g[s]:

s→mh|a

h→lso|ε

k→dml|ε

l→ehf

m→k|blm

判断g是否是ll(1)文法,如果是,构造ll(1)分析表。

第7题

对于一个文法若消除了左递归,提取了左公共因子后是否一定为ll(1)文法?试对下面文法进行改写,并对改写后的文法进行判断。

(1)a→bab|ε

b→abb|a

(2) a→aabe|a

b→bb|d

(3) s→aa|b

a→sb

b→ab

答案:

(1)先改写文法为:

0) a→bab

1) a→ε

2) b→babbb

3) b→bb

4) b→a

再改写文法为:

0) a→bab

1) a→ε

2) b→bn

3) b→a

4) n→abbb

5) n→b

(2) 文法: a→aabe|a b→bb|d

提取左公共因子和消除左递归后文法变为:

1) n→a b e

→a n 0) a

2) n→ε

3) b→d n1

4) n1→b n1

5) n1→ε

(3)文法: s→aa|b a→sb b→ab

第1种改写:

用a的产生式右部代替s的产生式右部的a得: s→sba|b b→ab

消除左递归后文法变为:

0) s→b n

1) n→b a n

2) n→ε

3) b→a b

也可由预测分析表中无多重入口判定文法是ll(1)的。 第2种改写:

b→ab

0) s

1) s

2) a

3) n

4) n

5) b

用s的产生式右部代替a的产生式右部的s得:消除左递归后文法变为: →a a →b →b b n →a b n →ε →a b →aa|b a→aab|bb s

预测分析表: