1.
选择题
(
1
)语言是
____A____
。
A
.句子的集合
B.
产生式的集合
C.
符号串的集合
D.
句型的集合
(2)编译程序前三个阶段完成的工作是
____C____
。
A
.词法分析、语法分析和代码优化
B
.代码生成、代码优化和词法分析
C
.词法分析、语法分析、语义分析和中间代码生成
D
.词法分析、语法分析和代码优化
(3)采用自顶向下分析,必须
____C____
。
A
.消除左递归
B
.消除右递归
C
.消除回溯
D
.提取公共左因子
2.
简答题
(
1
)(a)消除下列文法的左递归;
E
⟶
E
+
T
|
T
T
⟶
T
*
F
|
F
F
⟶
id
|
(
E
)
(b)为(a)的文法构造预测分析器表。
答:消除左递归后为:
E
→
TE'
E'
→
+
TE'
|
ε
T
→
FT'
T'
→
*
FT'
|
ε
F
→
(
E
)
|
id
构造预测分析表
(1)对文法的每个产生式A →α,执行(2)和(3)
(2)对FIRST(α)的每个终结符a,把A一>α加入M[A, a]
(3)如果ε∈FIRST(a)中,对FOLLOW(A)的每个终结符b(包括$) ,把A →α加入M[A, b] (4)M中其它没有定义的条目都是error
根据图 1 算法首先构造下表结构:
E
→
TE'
First(E) = {(, id }
由于ε不属于
First(E)
,则:
E'
→
+
TE'
|
ε
First(E') = {+,
ε }
由于ε∈
First(E')
,
Follow(E') = {), $ }
。则:
T
→
FT'
First(T) = {(, id }
由于ε不属于
First(T)
,则:
T'
→
*
FT'
|
ε
First(T') = {*,
ε }
由于ε∈
First(T')
,
Follow(T') = {+, ), $ }
。则:
F
→
(
E
)
|
id
First(F) = {(, id }
由于ε不属于
First(F)
,则:
因此,最终得到的预测分析表为:
(3)构造下面文法的 LL(1)分析表。
D→TL
T→int┃real
L
→
id
R
R
→
, id
R
|
ε
答:根据图
1
算法首先构造下表结构:
D→TL
First(D) = {int, real}
由于ε不属于
First(D)
,则:
T
→
int
┃
real
First(T) = {int, real}
由于ε不属于
First(T)
,则:
L
→
id
R
First(L) = {id}
由于ε不属于
First(L)
,则:
R
→
, id
R
|
ε
First(R) = {',',
ε
}
由于ε∈
First(R)
,求
Follow(R)
先锁定
L
→
id
R
R
→
, id
R
则需先求出
Follow(L)
,求
Follow(L)
先锁定
D
→
TL
则需先求出
Follow(D)
,求
Follow(D)
,由于产生式集合中没有右边出
现
D
符号,且
D
为产生式集合的开始符号,所以
Follow(D)={$}
。 则:
因此,最终得到的预测分析表为: