编译原理各章习题
编译原理习题(含历年专业考试题)

1. LR 分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错 地点。 () 2. 构造 LR 分析器的任务就是产生 LR 分析表。 () 3 .LR 文法肯定是无二义的,一个无二义文法决不会是 LR 文法。 () 4. 在任何时候,分析栈的活前缀 X1X2...Xm 的有效项目集就是栈顶状态 Sm 所 在的那个 项目集。 () 5 .同心集的合并有可能产生新的“移进”/“归约”冲突。 () 6. 由于 LR(0) 分析表构造简单,所以它的描述能力强、适用面宽; LR(1) 分析 表因构造复杂而描述能力弱、适用面窄。 () 7 .所有 LR 分析器的总控程序都是一样的,只是分析表各有不同。 () 8. LR 分析技术无法适用二义文法。 () 9. 项目 A →β 1 ·β 2 对活前缀αβ 1 是有效的,其条件是存在规范推导 S'*= aAW= a β 1 β 2 ω。 () 10. SLR(1) 文法的特点是:当符号栈中的符号串为βα,而面临的输入符号为α 则存在 把α归约为 A 的规范句型的前缀β A α时,方可把 a 归约为 A 。 ( )
已知文法 G[S] : S → dAB A → aA|a B → Bb| ε (1) 试问 G[S] 是否为正规文法,为什么? (2) G[S] 所产生的语言是什么? (3) G[S] 能否改写为等价的正规文法 ?
答:(1)因为S → dAB不符合正规文法产生式A→aB或A→a, a∈VT* ,A,B∈VN的格式,故G[S]不是正规文法。 (2) G[S]产生的语言为: L={danbm|n≥1,m≥0} (3)可以得到G[S]对应的正规文法G’[S]: S→dA A→aA|aB|a B→bB|ε
编译原理
第一章---第六章补充
例1
编译原理一些习题答案

第2章形式语言基础2.2 设有文法G[N]: N -> D | NDD -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9(1)G[N]定义的语言是什么?(2)给出句子0123和268的最左推导和最右推导。
解答:(1)L(G[N])={(0|1|2|3|4|5|6|7|8|9)+} 或L(G[N])={α| α为可带前导0的正整数}(2)0123的最左推导:N ⇒ ND ⇒ NDD ⇒ NDDD ⇒ DDDD ⇒ 0DDD ⇒ 01DD ⇒ 012D ⇒ 0123 0123的最右推导:N ⇒ ND ⇒ N3 ⇒ ND3 ⇒ N23 ⇒ ND23 ⇒ N123 ⇒ D123 ⇒ 0123268的最左推导:N ⇒ ND ⇒ NDD ⇒ DDD ⇒ 2DDD ⇒ 26D ⇒ 268268的最右推导:N ⇒ ND ⇒ N8 ⇒ ND8 ⇒ N68 ⇒ D68 ⇒ 2682.4 写一个文法,使其语言是奇数的集合,且每个奇数不以0开头。
解答:首先分析题意,本题是希望构造一个文法,由它产生的句子是奇数,并且不以0开头,也就是说它的每个句子都是以1、3、5、7、9中的某个数结尾。
如果数字只有一位,则1、3、5、7、9就满足要求,如果有多位,则要求第1位不能是0,而中间有多少位,每位是什么数字(必须是数字)则没什么要求,因此,我们可以把这个文法分3部分来完成。
分别用3个非终结符来产生句子的第1位、中间部分和最后一位。
引入几个非终结符,其中,一个用作产生句子的开头,可以是1-9之间的数,不包括0,一个用来产生句子的结尾,为奇数,另一个则用来产生以非0整数开头后面跟任意多个数字的数字串,进行分解之后,这个文法就很好写了。
N -> 1 | 3 | 5 | 7 | 9 | BNB -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | B02.7 下面文法生成的语言是什么?G1:S->ABA->aA| εB->bc|bBc G2:S->aA|a A->aS解答:B ⇒ bcB ⇒ bBc⇒ bbccB ⇒ bBc⇒ bbBcc ⇒ bbbccc……A ⇒εA ⇒ aA ⇒ aA ⇒ aA ⇒ aaA ⇒ aa……∴S ⇒ AB ⇒ a m b n c n , 其中m≥0,n≥1即L(G1)={ a m b n c n | m≥0,n≥1} S ⇒ aS ⇒ aA ⇒ aaS ⇒ aaaS ⇒ aA ⇒ aaS ⇒ aaaA ⇒aaaaS ⇒ aaaaa ……∴S ⇒ a2n+1 , 其中n≥0即L(G2)={ a2n+1 | n≥0}2.11 已知文法G[S]: S->(AS)|(b)A->(SaA)|(a)请找出符号串(a)和(A((SaA)(b)))的短语、简单短语和句柄。
《编译原理》期中及期末习题

第一章高级语言与编译程序概述典型例题:单项选择题1.1.1.将编译程序分成若干个“遍”是为了___。
a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率1.1.2.构造编译程序应掌握____。
(陕西省2000年自考题)a.源程序b.目标语言c.编译方法d.以上三项都是1.1.3.变量应当_。
a.持有左值b.持有右值c.既持有左值又持有右值d.既不持有左值也不持有右值1.1.4.编译程序绝大多数时间花在____上。
(陕西省1998年自考题)a.出错处理b.词法分析c.目标代码生成d.管理表格1.1.5.____不可能是目标代码。
( 陕西省1997年自考题)a.汇编指令代码b.可重定位指令代码c.绝对指令代码d.中间代码1.1.6.数组A[1…20,1…10]的首地址偏移量为0,按列存储,每个元素占一个字节,存储器按字节编址,则A[i,j]的偏移地址为____。
a.(i-1)X10+(j-1)b.(i-1)X20+(j-1)c. (i-1)+(j-1)X10d.(i-1)+(j-1)X201.1.7.使用____可以定义一个程序的意义。
a.语义规则b.词法规则c.产生规则d.左结合规则1.1.8.表达式X:=5中,变量x____。
a.只有左值b.只有右值c.既有左值又有右值d.没有左值也没有右值1.1.9.词法分析器的输入是__。
a.单词符号b.源程序c.语法单位d.目标程序1.1.10.中间代码生成时所遵循的是_。
a.语法规则b.词法规则c.语义规则d.等价变换规则1.1.11.编译程序是对__。
a.汇编程序的翻译b.高级语言程序的解释执行c.机器语言的执行d.高级语言的翻译1.1.12.词法分析应遵循_。
(陕西省2000年自考题)a.语义规则b.语法规则c.构词规则d.等价变换规则多项选择题:1.2.1 编译程序各阶段的工作都涉及到___。
编译原理各章习题

第二章高级语言及其语法描述1、设有文法G[S]:S→NN→D|NDD→0|1|2|…|9试写出028和4321的最左推导和最右推导过程。
2、证明文法G[S]是二义性文法:S→if E then S else S |if E then S |sE→0|13、设有文法G[E]:E→E-T|TT→T/F|FF→i|(E)(1)试写出i/(i-i-i)的推导树。
(2)试写出(F-i)/F的短语、简单短语和句柄。
4、设∑={0,1},请给出∑上下列语言的文法(1)所有以0开头的串(2)所有以0开头,以1结尾的串5、证明文法G1和G2等价G1:S→0S1,S→01G2:A→0R,A→01,R→A1第三章有限状态自动机和词法分析1、请用中文描述下列正规式表示的正规集(1)0(0|1)*0(2)0*10*10*10*2、试写出∑={0,1}上下列集合的正则表达式:(1)所有以1开始和结束的符号串。
(2)恰含有3个1的所有符号所组成的集合。
(3)集合{01,1}。
(4)所有以111结束的符号串。
3、试写出∑={0,1}上下述集合的正则表达式: (1)试写出非负整数集的正则表达式。
(2)试写出以非5数字为头的所有非负整数集的正则表达式。
4、试将图3.1中所示的有限状态自动机M 最小化。
图3.1 M 的状态转换图5、设∑={a,b},试构造下述正则表达式的确定性有限状态自动机: (1)a(a|b)*baa (2)(a|b)*bbb *6、对于下列的状态转换矩阵:(1)分别画出相应的状态转换图。
(2)用自然语言分别描述它们所识别的输入串的特征 7、将图3.2所示的非确定的有限状态自动机确定化和最小化。
图3.2 非确定的有限状态自动机M第四章 自顶向下语法分析 1、从下列文法中消去左递归。
(1)S→Aa|bA→Ac|Sd(2)A→A∨B|BB→B∧C|CC→⌝D|DD→(A)|i2、请消去下面文法G[S]中的回溯G[S]:S→aBc|aB→bB|ε3、有文法G[S]:S→ABA→a|εB→b|ε(1)验证该文法是LL(1)文法;(2)请构造预测分析表4、考虑文法G[A]:A→aABc|d|εB→Bb|b(1)改写为LL(1)文法;(2)请构造预测分析表(3)给出句子adbc的分析过程第五章自底向上语法分析1、请对下列文法G[S]构造算符优先分析表S→bAbA→(B|aB→A a)2、文法G[S]:S→S(SaS→b该文法是LR(0)还是SLR(1)文法?3、文法G[A]:A→(A)|a构造该文法的LR(0)分析表,并请描述((a))的分析过程。
编译原理练习题及答案

第一章练习题(绪论)一、选择题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)。
编译原理习题大全

第1章1、编译过程包括哪几个主要阶段及每个阶段的功能。
答案:编译过程包括词法分析、语法分析、语义分析和中间代码生成、优化、目标代码生成5个阶段。
词法分析的功能是对输入的高级语言源程序进行词法分析,识别其中的单词符号,确定它们的种类,交给语法分析器,即把字符串形式的源程序分解为单词符号串形式。
语法分析的功能是在词法分析结果的基础上,运用语言的语法规则,对程序进行语法分析,识别构成程序的各类语法范畴及它们之间的层次关系,并把这种层次关系表达成语法树的形式。
词义分析和中间代码生成的功能是在语法分析的基础上,对程序进行语义分析,“理解”其含义,产生出表达程序语义的内部表达形式(中间代码)。
优化的功能是按照等价变换的原则,对语义分析器产生的中间代码序列进行等价变换,删除其中多余的操作,对耗时耗空间的代码进行优化,以期最后得到高效的可执行代码。
目标代码生成的功能是把优化后的中间代码变换成机器指令代码,得到可在目标机器上执行的机器语言程序。
第2章1、写一上下文无关文法G,它能产生配对的圆括号串(如:(),(()),()(())等,甚至包括0对括号)文法为:S→(L)|LS|L L→S| 2、已知文法G:E→E+T|E-T|T T→T*F|T/F|F F→ (E) |i(1)给出i+i*i,i*(i-i)的最左推导,最右推导以及语法树。
(2)i-i+i 哪个算符优先。
【解答】(1)最左推导:E⇒E+T⇒T+T⇒F+T ⇒i+T ⇒ i+T*F ⇒i+F*F ⇒ i+i*F ⇒ i+i*i E⇒T⇒T*F⇒F*F ⇒i*F ⇒i*(E) ⇒i*(E-T) ⇒ i*(T-T) ⇒ i*(F-T) ⇒ i*(i-T) ⇒i*(i-F) ⇒ i*(i-i)最右推导:E⇒E+T⇒E+T*F⇒E+T*i ⇒E+F*i ⇒E+i*i ⇒T+i*i ⇒F+i*i ⇒i+i*iE⇒T⇒T*F⇒T*(E) ⇒T*(E-T) ⇒T*(E-F) ⇒T*(E-i) ⇒ T*(T-i) ⇒T*(F-i) ⇒ T*(i-i) ⇒ F*(i-i) ⇒ i*(i-i)i+i*i以及i*(i-i)的语法树如下所示:(2)i-i+i的语法树如下图所示。
编译原理习题及答案(整理后)

第一章1、将编译程序分成若干个“遍”是为了。
b.使程序的结构更加清晰2、构造编译程序应掌握。
a.源程序b.目标语言c.编译方法3、变量应当。
c.既持有左值又持有右值4、编译程序绝大多数时间花在上。
d.管理表格5、不可能是目标代码。
d.中间代码6、使用可以定义一个程序的意义。
a.语义规则7、词法分析器的输入是。
b.源程序8、中间代码生成时所遵循的是- 。
c.语义规则9、编译程序是对。
d.高级语言的翻译10、语法分析应遵循。
c.构词规则二、多项选择题1、编译程序各阶段的工作都涉及到。
b.表格管理c.出错处理2、编译程序工作时,通常有阶段。
a.词法分析b.语法分析c.中间代码生成e.目标代码生成三、填空题1、解释程序和编译程序的区别在于是否生成目标程序。
2、编译过程通常可分为5个阶段,分别是词法分析、语法分析中间代码生成、代码优化和目标代码生成。
3、编译程序工作过程中,第一段输入是源程序,最后阶段的输出为标代码生成程序。
4、编译程序是指将源程序程序翻译成目标语言程序的程序。
一、单项选择题1、文法G:S→xSx|y所识别的语言是。
a. xyxb. (xyx)*c.x n yx n(n≥0) d. x*yx*2、文法G描述的语言L(G)是指。
a. L(G)={α|S+⇒α , α∈V T*}b. L(G)={α|S*⇒α, α∈V T*}c. L(G)={α|S*⇒α,α∈(V T∪V N*)} d. L(G)={α|S+⇒α, α∈(V T∪V N*)}3、有限状态自动机能识别。
a. 上下文无关文法b. 上下文有关文法c.正规文法d. 短语文法4、设G为算符优先文法,G 的任意终结符对a、b有以下关系成立。
a. 若f(a)>g(b),则a>bb.若f(a)<g(b),则a<bc. a~b都不一定成立d. a~b一定成立5、如果文法G是无二义的,则它的任何句子α。
a. 最左推导和最右推导对应的语法树必定相同b. 最左推导和最右推导对应的语法树可能不同c. 最左推导和最右推导必定相同d. 可能存在两个不同的最左推导,但它们对应的语法树相同6、由文法的开始符经0步或多步推导产生的文法符号序列是。
2-3-习题(含解答)

2-3 习题(含解答)目录第1章编译原理概述 (1)第2章PL/O编译程序的实现 (4)第3章文法和语言 (4)第4章词法分析 (13)第5章自顶向下语法分析方法 (28)第6章自底向上优先分析 (39)第7章LR分析 (42)第8章语法制导翻译和中间代码生成 (60)第9章符号表 (67)第10章目标程序运行时的存储组织 (70)第11章代码优化 (73)第12章代码生成 (76)综合练习一 (79)综合练习二 (84)综合练习三 (90)综合练习四 (95)综合练习五 (101)综合练习六 (107)第1章编译原理概述一、选择题1.一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括 (1) 。
其中, (2) 和代码优化部分不是每个编译程序都必需的。
词法分析器用于识别 (3) ,语法分析器则可以发现源程序中的 (4) 。
(1) A.模拟执行器 B.解释器 C.表格处理和出错处理 D.符号执行器(2) A.语法分析 B.中间代码生成 C.词法分析 D.目标代码生成(3) A.字符串 B.语句 C.单词 D.标识符(4) A.语义错误 B.语法和语义错误 C.错误并校正 D.语法错误2.程序语言的语言处理程序是一种 (1) 。
(2) 是两类程序语言处理程序,他们的主要区别在于 (3) 。
(1) A.系统软件 B.应用软件 C.实时系统 D.分布式系统(2) A.高级语言程序和低级语言程序 B.解释程序和编译程序C.编译程序和操作系统D.系统程序和应用程序(3) A.单用户与多用户的差别 B.对用户程序的查错能力C.机器执行效率D.是否生成目标代码3.汇编程序是将翻译成,编译程序是将翻译成。
A.汇编语言程序B.机器语言程序C.高级语言程序D. A 或者BE. A 或者CF. B或者C4.下面关于解释程序的描述正确的是。
(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A. (1)(2)B. (1)C. (1)(2)(3)D.(2)(3)5.高级语言的语言处理程序分为解释程序和编译程序两种。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章高级语言及其语法描述
1、设有文法G[S]:
S→N
N→D|ND
D→0|1|2|…|9
试写出028和4321的最左推导和最右推导过程。
2、证明文法G[S]是二义性文法:
S→if E then S else S |if E then S |s
E→0|1
3、设有文法G[E]:
E→E-T|T
T→T/F|F
F→i|(E)
(1)试写出i/(i-i-i)的推导树。
(2)试写出(F-i)/F的短语、简单短语和句柄。
4、设∑={0,1},请给出∑上下列语言的文法(1)所有以0开头的串
(2)所有以0开头,以1结尾的串
5、证明文法G1和G2等价
G1:S→0S1,S→01
G2:A→0R,A→01,R→A1
第三章有限状态自动机和词法分析
1、请用中文描述下列正规式表示的正规集
(1)0(0|1)*0
(2)0*10*10*10*
2、试写出∑={0,1}上下列集合的正则表达式:(1)所有以1开始和结束的符号串。
(2)恰含有3个1的所有符号所组成的集合。
(3)集合{01,1}。
(4)所有以111结束的符号串。
3、试写出∑={0,1}上下述集合的正则表达式: (1)试写出非负整数集的正则表达式。
(2)试写出以非5数字为头的所有非负整数集的正则表达式。
4、试将图3.1中所示的有限状态自动机M 最小化。
图3.1 M 的状态转换图
5、设∑={a,b},试构造下述正则表达式的确定性有限状态自动机: (1)a(a|b)*baa (2)(a|b)*bbb *
6、对于下列的状态转换矩阵:
(1)分别画出相应的状态转换图。
(2)用自然语言分别描述它们所识别的输入串的特征 7、将图3.2所示的非确定的有限状态自动机确定化和最小化。
图3.2 非确定的有限状态自动机M
第四章 自顶向下语法分析 1、从下列文法中消去左递归。
(1)S→Aa|b
A→Ac|Sd
(2)A→A∨B|B
B→B∧C|C
C→⌝D|D
D→(A)|i
2、请消去下面文法G[S]中的回溯
G[S]:S→aBc|a
B→bB|ε
3、有文法G[S]:
S→AB
A→a|ε
B→b|ε
(1)验证该文法是LL(1)文法;
(2)请构造预测分析表
4、考虑文法G[A]:
A→aABc|d|ε
B→Bb|b
(1)改写为LL(1)文法;
(2)请构造预测分析表
(3)给出句子adbc的分析过程
第五章自底向上语法分析
1、请对下列文法G[S]构造算符优先分析表
S→bAb
A→(B|a
B→A a)
2、文法G[S]:
S→S(Sa
S→b
该文法是LR(0)还是SLR(1)文法?
3、文法G[A]:
A→(A)|a
构造该文法的LR(0)分析表,并请描述((a))的分析过程。
4、文法G[S]:
S→(S)
S→
(1)这个文法是例如LR(0)文法吗?若是,请构造该文法的LR(0)分析表。
(2)这个文法是例如SLR(1)文法吗?若是,请构造该文法的SLR分析表。
(3)构造该文法识别活前缀的DFA。