讲稿第9章 编译原理习题课
- 格式:ppt
- 大小:286.25 KB
- 文档页数:42


编译预处理习题与答案
第九章编译预处理9.1 选择题
【题9.1】以下叙述中不正确的是。A)预处理命令⾏都必须以#号开始
B)在程序中凡是以#号开始的语句⾏都是预处理命令⾏
C)C程序在执⾏过程中对预处理命令⾏进⾏处理
D)以下是正确的宏定义
#define IBM_PC
【题9.2】以下叙述中正确的是。A)在程序的⼀⾏上可以出现多个有效的预处理命令⾏
B)使⽤带参的宏时,参数的类型应与宏定义时的⼀致
C)宏替换不占⽤运⾏时间,只占编译时间
D)在以下定义中C R是称为“宏名”的标识符
#define C R 045
【题9.3】请读程序:#define ADD(x) x+x
main()
{
int m=1,n=2,k=3;
int sum=ADD(m+n)*k;
printf(“sum=%d”,sum);
}
上⾯程序的运⾏结果是。A)sum=9 B)sum=10 C)sum=12 D)sum=18
【题9.4】以下程序的运⾏结果是。#define MIN(x,y) (x)<(y)?(x):(y)
main()
{
int i=10,j=15,k;
k=10*MIN(i,j);
printf(“%d\n”,k);
}
A)10 B)15 C)100 D)150
【题9.5】在宏定义#define PI 3.14159中,⽤宏名PI代替⼀个。A)常量B)单精度数C)双精度数D)字符串
【题9.6】以下程序的运⾏结果是。#include
#define FUDGE(y) 2.84+y
#define PR(a) printf(“%d”,(int)(a))
#define PRINT1(a) PR(a); putchar(‘\n’)
main()
{
int x=2;
PRINT1(FUDGE(5)*x);
}
A)11 B)12 C)13 D)15
【题9.7】以下有关宏替换的叙述不正确的是。A)宏替换不占⽤运⾏时间B)宏名⽆类型
C)宏替换只是字符替换D)宏名必须⽤⼤写字母表⽰
一、单项选择题
1、将编译程序分成若干个“遍”是为了 。
a.提高程序的执行效率
b.使程序的结构更加清晰
c.利用有限的机器内存并提高机器的执行效率
d.利用有限的机器内存但降低了机器的执行效率
2、构造编译程序应掌握 。
a.源程序 b.目标语言
c.编译方法 d.以上三项都是
3、编译程序绝大多数时间花在 上。
a.出错处理 b.词法分析
c.目标代码生成 d.管理表格
4、词法分析器的输入是 。
a.单词符号串 b.源程序
c.语法单位 d.目标程序
5、中间代码生成时所遵循的是- 。
a.语法规则 b.词法规则
c.语义规则 d.等价变换规则
6、编译程序是对 。
a.汇编程序的翻译 b.高级语言程序的解释执行
c.机器语言的执行 d.高级语言的翻译
7、语法分析应遵循 。
a.语义规则 b.语法规则
c.构词规则 d.等价变换规则
二、多项选择题
1、编译程序各阶段的工作都涉及到 。
a.语法分析 b.表格管理 c.出错处理
d.语义分析 e.词法分析
2、编译程序工作时,通常有 阶段。
a.词法分析 b.语法分析 c.中间代码生成
d.语义检查 e.目标代码生成
三、填空题
1、解释程序和编译程序的区别在于 。
2、编译过程通常可分为5个阶段,分别是 、语法分析 、代码优化和目标代码生成。 3、编译程序工作过程中,第一段输入是 ,最后阶段的输出为 程序。
4、编译程序是指将 程序翻译成 程序的程序。
1)不带回溯的自上而下分析算法
a) 消除左递归。
i. 什么是左递归:
ii. 消除直接左递归,消除间接左递归。
b) 消除直接左递归。
c) 消除左递归算法。 注:1)若非终结符排列顺序不同,改写后的文法也不同,但它们是等价的。
d) 消除回溯
i. 产生回溯的原因:进行推导时,若产生式存在多个候选式,选择哪个候选式进行推导存在不确定性。 ii. 消除回溯的基本原则:对文法的任何非终结符,若能根据当前读头下的符号,准确的选择一个候选式进行推导,那么回溯就可以消除。注:之所以会产生回溯是因为在推导匹配的过程中存在虚假匹配。
iii. 消除回溯的方法:预测与提左因子
iv. 根据读头下符号选择候选式,使其第一个符号与读头下符号相同,或该候选式可推导出的第一个符号与读头下符号相同。这相当于向前看了一个符号,所以称为预测。注:使用了预测之后,选择候选式不再是盲目的了,所以也就无需回溯。
v.
求候选式的终结首符集。 vi. 采用预测方法后PDA
的运行。
vii.
提取公共左因子。
程序设计语言与编译——语言的设计与实现(第2版)
习题4答案
4-5 解:上下文有关文法(1型文法),产生的语言L(G){=aibici | i≥1,i为整数}
4-6 解:3型文法,L(G)={ai | i≥1,i为奇数}
4-7 解:2型文法,L(G)={aibi | i≥1,i为整数}
4-8 解:1型文法,L(G)={aibici | i≥1,i为整数}
4-9 解:
1. 最左推导 最右推导
S (A) (B) (SdB) S (A) (B) (SdB)
((A)dB) ((B)dB) (SdS) (Sda)
((S)dB) ((b)dB) ((A)da ((B)da)
((b)dS) ((b)da) ((s)da ((b)da)
2. 语法树
4-10解:
1. 因为存在推导S SbF SbP Sbc Fbc FaPbc
所以FaPbc是文法G (S) 的一个句型。
2. 语法树
4-11解:
因为串aaabaa可有下列两棵不同的语法树
所以文法G (S)是二义文法。 2 4-12解:
因为串i (*可有下列两棵不同的语法树
3 习题9答案
9-2解:
(1)消除文法G的②产生式直接左递归。
A→SeA' | fA' ③
A'→dA' | ④
(2)消除间接左递归:按S.A排序,将S的①产生式代入③有
A→AaeA' | AbeA' | ceA' | fA' ⑤
(3)消除⑤的直接左递归有
A→ceA'A" | fA'A" ⑥
A"→aeA'A" | beA'A" | ⑦
(4)对S的①产生式提公因子有
S→AB | c ⑧
B→| a | b ⑨
(5)最后,文法G提取公因子,消除左递归后的产生式由⑧, ⑨, ⑥, ⑦和④组成,无