编译原理练习题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章练习题(绪论)
一、选择题
1.编译程序是一种常用的软件。
A) 应用B) 系统C) 实时系统D) 分布式系统
2.编译程序生成的目标代码程序是可执行程序。
A) 一定B) 不一定
3.编译程序的大多数时间是花在上。
A) 词法分析B) 语法分析C) 出错处理D) 表格管理4.将编译程序分成若干“遍”将。
A)提高编译程序的执行效率;
B)使编译程序的结构更加清晰,提高目标程序质量;
C)充分利用内存空间,提高机器的执行效率。
5.编译程序各个阶段都涉及到的工作有。
A) 词法分析B) 语法分析C) 语义分析D) 表格管理6.词法分析的主要功能是。
A) 识别字符串B) 识别语句C) 识别单词D) 识别标识符7.若某程序设计语言允许标识符先使用后说明,则其编译程序就必须。
A) 多遍扫描B) 一遍扫描
8.编译方式与解释方式的根本区别在于。
A) 执行速度的快慢B) 是否生成目标代码
C) 是否语义分析
9.多遍编译与一遍编译的主要区别在于。
A)多遍编译是编译的五大部分重复多遍执行,而一遍编译是五大部
分只执行一遍;
B)一遍编译是对源程序分析一遍就立即执行,而多遍编译是对源程
序重复多遍分析再执行;
C)多遍编译要生成目标代码才执行,而一遍编译不生成目标代码直
接分析执行;
D)多遍编译是五大部分依次独立完成,一遍编译是五大部分交叉调
用执行完成。
10.编译程序分成“前端”和“后端”的好处是
A)便于移植
B)便于功能的扩充
C)便于减少工作量
D)以上均正确
第二章练习题(文法与语言)
一、选择题
1.文法 G 产生的 (1) 的全体是该文法描述的语言。
A.句型
B. 终结符集
C. 非终结符集
D. 句子
2.若文法 G 定义的语言是无限集,则文法必然是 (2) A递归的 B 上下文无关的 C 二义性的 D 无二义性的
3. Chomsky 定义的四种形式语言文法中, 0 型文法又称为(A)文法;
1 型文法又称为(C)文法;
2 型语言可由(G) 识别。
A 短语结构文法
B 上下文无关文法
C 上下文有关文法
D 正规文法
E 图灵机
F 有限自动机
G 下推自动机
4.一个文法所描述的语言是(A);描述一个语言的文法是(B)。
A 唯一的
B 不唯一的
C 可能唯一,也可能不唯一
二、构造文法以生成下列语言:
1.{a n b n︱n≥0}
G=({S},{a,b},S,P),其中P = { S→ | aSb }
2.{a n b m︱n,m≥1}
G=({S,A,B},{a,b},S,P),
其中P = { S→ AB,A→a︱aA,B→b︱bB}
3.{a n , b m︱n,m≥1}
G=({S,A,B},{a,b},S,P),
其中P = { S→ A | B,A→a︱aA,B→b︱bB}
4. L = {w | w是不含两个相邻1的0、1串} G=({S , A},{0,1},S,P),
其中P = { S→0 | 1 | 0S | 1A, A→ 0S︱0 } 5.能被5整除的整数集合。
G[S]: S→FNC
F→+ | - | ε
C→0 | 5
N→AN |ε
A→0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
以下更准确:
G[S]: S→FC |FNMC
F→+ | - | ε
C→0 | 5
N→1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
M→AM |ε
A→0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
第四章练习题(词法分析)
一、设语言L是由奇数个a和偶数(可以是0)个b组成的符号串之集。
1.构造识别L的DFA;
一、1.
2. 给出定义L的正规文法;
2.S=aA|bB
A=aS|bC
B=bS|aC
C=bA|aB
(其它习题见本章课件)
第五章练习题(自上而下语法分析)
1、已知文法G(E)
E→T | E+T
T→F | T * F
F→(E) | i
(1) 给出句型(T * F+i)的最右推导及画出语法树;
(2) 给出句型(T * F+i)的短语、素短语。
1)最右推导:
E=> E+T => E+F => E+i => T+i => T*F+i
2)句型T*F+i 的短语:
T*F+i
T*F
i
素短语:T*F
i
2、给出文法G[S]:
S -> aSb | P
P -> bPc | bQc
Q -> Qa | a
1)它是Chomsky哪一型文法?
2)它是不是LL(1)文法?若不是,求消除左递归、提取公共左因子
后的文法G’。
3)证明所有(a)左递归、(b)由公共左因子的文法均不是LL(1)文法。
4)G’是不是LL(1)文法,试用预测分析表证实。
1)2型文法
2)不是LL(1)文法, 转换:
G’[S]:
S -> aSb | P
P -> bK
K -> Pc | Qc
Q -> aW
W -> aW |ε
3) LL(1)为从上往下推导,若存在左递归,即形如P->P 的产生式,则面对FIRST(P)的符号,会反复用P->P…进行往下推导,无法终止,故左递归文法不是LL(1)文法。
有公共左因子的文法存在形如P->aβ|aγ的产生式,那么,当面对属于FIRST(a)的终结符时,无法确定用P->aβ还是用P-> aγ匹配,也就是说存在多重入口,所以有公共左因子的文法不是LL(1)文法。
4)
FIRST(S)={a, b}, FIRST(P)={b} , FIRST(K)={b, a}, FIRST(Q)={a}, FIRST(W)={a,ε} ;
FOLLOW(S)={#, b} , FOLLOW(P)={#, b, c}=FOLLOW(K),