云南大学2009至2010学年上学期信息学院计算机科学与工程系计算机科学与技术专业2007级《编译技术》期中考试B卷(闭卷)
满分100分考试时间:120分钟任课教师:周小兵学院:_______专业:______学号:_______姓名:________
一、选择题(本大题共4小题,每小题5分,共20分)
1.词法分析器的任务是从源程序中识别____B____。
A、句子
B、单词
C、字符
D、终结符号
2. 文法S→aSb|ab所产生的语言是什么____C____。
A、(ab)n
B、a n b m
C、a n b n
D、a和b的个数相等的a、b串
3.在源程序中,使用的某个变量没有声明,在编译的____C____阶段会报错。
A、词法分析
B、语法分析
C、语义分析
D、代码生成
4.编译器在___C_____阶段进行表达式的类型检查及类型转换。
A、词法分析
B、语法分析
C、语义分析
D、目标代码生成
二、分析题(本大题共2小题,每小题10分,共20分)
1、一个上下文无关文法生成句子abbaa的推导树如下:
(1)给出句子的最左推导。
(2)该文法的产生式集合P可能有哪些元素?
(3)找出该句子的所有短语、直接短语、句柄。
解答:
(1)句子abbaa最左推导:
S=>ABS=>aBS=>aSBBS=>aBBS=>abBS=>abbS=>abbAa=>abbaa
注:应该用=>(表示推导),而不能用→(表示定义)
(2)产生式集合P可能:
S→ABS |Aa|εA→a B→SBB|b
(3)把abbaa表示成a1b1b2a2a3
短语:a1, a2, ε, b1, b2, b1b2, a2a3 , a1b1b2a2a3
直接短语:a1, a2, ε, b1, b2,
句柄:a1
注:由于有多个a和b,所以应该加上下标以示区别。
2、将正规式r=a(b|c)*转换成相应的正规文法
解答:
令S是文法的开始符号,首先形成S→a(b|c)*,然后形成S→aA和A→(b|c)*,再变换成:
S→aA
A→(b|c)B
A→ε
B→(b|c)B
B→ε
进而变换为全部符合正规文法产生式的形式:
S→aA
A→bB|c B|ε
B→bB|c B|ε
注:也可分开写成7个产生式
三、设计题(本大题共2小题,每小题10分,共20分)
对文法G[A]:
A → aABe|a
B → Bb|d
1. 文法G[A]是LL(1)文法吗?为什么?如果不是,请改写。
2. 改写后的文法是LL(1)文法吗?请给出它的预测分析表。
解答:
1.文法G[S]不是LL(1)文法,因为存在左公因子(A → aABe|a)和左递归(B →
Bb|d)。
2. 改写(即提取左公因子和消除左递归)后的文法如下:
A→a N
N→A B e|ε
B→dN`
N`→bN` |ε
首先计算First集和Follow集
对左部相同的产生式做如下运算:
所以改写后的文法是LL(1)文法。
预测分析表如下:
通过预测分析表中无多重入口也可判定该文法是LL(1)文法。
四、综合题(本大题共5小题,每小题8分,共40分)
已知文法G[S]如下:
S → S; G | G
G → G(T) | H
H → a | (S)
T → T+S | S
请完成下列问题:
1.给出a(T+S);H;(S)的规范推导,并画出语法树。
2.给出1中句型的短语,直接短语,句柄,素短语,最左素短语。
3.计算G[S]的FIRSTVT和LASTVT集合。
4.构造G[S]的算符优先关系表。
5.G[S]是否为算符优先文法?请说明理由。
解答:
1.S => S;G=>S;H=>S;(S)=>S;G;(S)=>S;H;(S)
=>G;H;(S)=>G(T);H;(S)=>G(T+S);H;(S)
=> H(T+S);H;(S)=> a(T+S);H;(S)
2. 短语:a、T+S、a(T+S)、a(T+S);H、H、(S)、a(T+S);H;(S)
直接短语:a、T+S、H、(S)
句柄:a
素短语:a、T+S、(S)
最左素短语:a
4.算符优先关系表如下:
5. 该文法是算符文法,同时任意两个终结符之间的优先关系唯一,所以该文法是算符优先文法。