编译原理_习题
编译原理习题
编译原理习题⼀、填空题:1-01.编译程序的⼯作过程⼀般可以划分为词法分析,语法分析,语义分析,之间代码⽣成,代码优化等⼏个基本阶段,同时还会伴有表格处理和出错处理.1-02.若源程序是⽤⾼级语⾔编写的,⽬标程序是机器语⾔程序或汇编程序,则其翻译程序称为编译程序.1-03.编译⽅式与解释⽅式的根本区别在于是否⽣成⽬标代码.1-04.翻译程序是这样⼀种程序,它能够将⽤甲语⾔书写的程序转换成与其等价的⽤⼄语⾔书写的程序. 1-05.对编译程序⽽⾔,输⼊数据是源程序,输出结果是⽬标程序.1-06.如果编译程序⽣成的⽬标程序是机器代码程序,则源程序的执⾏分为两⼤阶段:编译阶段和运⾏阶段.如果编译程序⽣成的⽬标程序是汇编语⾔程序,则源程序的执⾏分为三个阶段:编译阶段,汇编阶段和运⾏阶段.1-07.若源程序是⽤⾼级语⾔编写的,⽬标程序是机器语⾔程序或汇编程序,则其翻译程序称为编译程序。
1-08.⼀个典型的编译程序中,不仅包括词法分析、语法分析、中间代码⽣成、代码优化、⽬标代码⽣成等五个部分,还应包括表格处理和出错处理。
其中,词法分析器⽤于识别单词。
1-09.编译⽅式与解释⽅式的根本区别为是否⽣成⽬标代码。
2-01.所谓最右推导是指:任何⼀步αβ都是对α中最右⾮终结符进⾏替换的。
2-02.⼀个上下⽂⽆关⽂法所含四个组成部分是⼀组终结符号、⼀组⾮终结符号、⼀个开始符号、⼀组产⽣式。
2-03.产⽣式是⽤于定义语法成分的⼀种书写规则。
2-04.设G[S]是给定⽂法,则由⽂法G所定义的语⾔L(G)可描述为:L(G)={x│S x,x∈V T*}。
2-05.设G是⼀个给定的⽂法,S是⽂法的开始符号,如果S x(其中x∈V*),则称x是⽂法的⼀个句型。
2-06.设G是⼀个给定的⽂法,S是⽂法的开始符号,如果S x(其中x∈V T*),则称x是⽂法的⼀个句⼦。
3-01.扫描器的任务是从源程序中识别出⼀个个单词符号。
4-01.语法分析最常⽤的两类⽅法是⾃上⽽下和⾃下⽽上分析法。
编译原理试题及答案
编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 程序设计B. 程序翻译C. 程序调试D. 数据处理答案:B2. 下列哪一项不是编译器的前端处理过程?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,词法分析器的主要作用是什么?A. 识别程序中的关键字和标识符B. 将源代码转换为中间代码C. 检查程序的语法结构D. 确定程序的运行环境答案:A4. 语法分析通常采用哪种方法?A. 自顶向下分析B. 自底向上分析C. 正则表达式匹配D. 直接解释执行答案:B5. 语义分析的主要任务是什么?A. 检查程序的语法结构B. 检查程序的类型安全C. 识别程序中的变量和常量D. 将源代码转换为机器代码答案:B二、简答题1. 简述编译器的工作原理。
答案:编译器的工作原理主要包括以下几个步骤:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。
词法分析器将源代码分解成一系列的词素;语法分析器根据语法规则检查词素序列是否合法;语义分析器检查程序的语义正确性;中间代码生成器将源代码转换为中间代码;代码优化器对中间代码进行优化;最后,目标代码生成器将优化后的中间代码转换为目标机器代码。
2. 什么是词法分析器,它在编译过程中的作用是什么?答案:词法分析器是编译器前端的一个组成部分,负责将源代码分解成一个个的词素(tokens),如关键字、标识符、常量、运算符等。
它在编译过程中的作用是为语法分析器提供输入,是编译过程的基础。
三、论述题1. 论述编译器中的代码优化技术及其重要性。
答案:代码优化是编译过程中的一个重要环节,它旨在提高程序的执行效率,减少资源消耗。
常见的代码优化技术包括:常量折叠、死代码消除、公共子表达式消除、循环不变代码外提、数组边界检查消除等。
代码优化的重要性在于,它可以显著提高程序的运行速度和性能,同时降低程序对内存和处理器资源的需求。
四、计算题1. 给定一个简单的四则运算表达式,请写出其对应的逆波兰表达式。
编译原理习题答案
1、正规文法又称 DA、0型文法B、1型文法C、2型文法D、3型文法2、对于无二义性的文法,规范归约是 BA. 最左推导B. 最右推导的逆过程C.最左归约的逆过程D.最右归约的逆过程。
3、扫描器的任务是从源程序中识别出一个个单词符号。
4、程序所需的数据空间在程序运行前就可确定,称为 A 管理技术。
A 静态存储B 动态存储C 栈式存储D 堆式存储5、编译过程中,语法分析器的任务是(B)。
①分析单词是怎样构成的②分析单词串是如何构成语句和说明的③分析语句和说明是如何构成程序的④分析程序的结构A、②③B、②③④C、①②③D、①②③④6、文法G:E→E+T|T T→T*P|P P→ (E)| i则句型P+T+i的句柄和最左素短语分别为 B 。
A、P+T和iB、P和P+TC、i和P+T+iD、P和P7、四元式之间的联系是通过B实现的A.指示器B.临时变量C.符号表D.程序变量8、程序语言的单词符号一般可以分为保留字、标识符、常数、运算符、界符等等。
9、下列 B 优化方法是针对循环优化进行的。
A.删除多余运算B.删除归纳变量C.合并已知量D.复写传播10、若文法G 定义的语言是无限集,则文法必然是 AA、递归的B、前后文无关的C、二义性的D、无二义性的11、文法G 产生的D的全体是该文法描述的语言。
A、句型B、终结符集C、非终结符集D、句子12、Chomsky 定义的四种形式语言文法中,0 型文法又称为 A文法;1 型文法又称为 C 文法。
A.短语文法B.上下文无关文法C.上下文有关文法D.正规文法A.短语文法B.上下文无关文法C.上下文有关文法D.正规文法13、语法分析最常用的两类方法是自顶向下和自底向上分析法。
14、一个确定的有穷自动机DFA是一个 A 。
A 五元组(K,∑,f, S, Z)B 四元组(V N,V T,P,S)C 四元组(K,∑,f,S)D 三元组(V N,V T,P)A、语法B、语义C、代码D、运行15、 B不属于乔姆斯基观点分类的文法。
编译原理习题及答案(整理后)
第一章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.目标程序8、中间代码生成时所遵循得就是- 。
a.语法规则b.词法规则c.语义规则d.等价变换规则9、编译程序就是对。
a.汇编程序得翻译b.高级语言程序得解释执行c.机器语言得执行d.高级语言得翻译10、语法分析应遵循。
a.语义规则b.语法规则c.构词规则d.等价变换规则二、多项选择题1、编译程序各阶段得工作都涉及到。
a.语法分析b.表格管理c.出错处理d.语义分析e.词法分析2、编译程序工作时,通常有阶段。
a.词法分析b.语法分析c.中间代码生成d.语义检查e.目标代码生成三、填空题1、解释程序与编译程序得区别在于。
2、编译过程通常可分为5个阶段,分别就是、语法分析、代码优化与目标代码生成。
3、编译程序工作过程中,第一段输入就是,最后阶段得输出为程序。
4、编译程序就是指将程序翻译成程序得程序。
单选解答1、将编译程序分成若干个“遍”就是为了使编译程序得结构更加清晰,故选b。
2、构造编译程序应掌握源程序、目标语言及编译方法等三方面得知识,故选d。
3、对编译而言,变量既持有左值又持有右值,故选c。
4、编译程序打交道最多得就就是各种表格,因此选d。
5、目标代码包括汇编指令代码、可重定位指令代码与绝对指令代码3种,因此不就是目标代码得只能选d。
编译原理习题(含历年专业考试题)
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
编译原理习题及答案
( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 10.× 22.√
) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 11.
二、填空题: 2.编译过程可分为 ( 词法分析) , (语法分析) , (语义分析与中间代码生成 ) , (优化)和(目标 代码生成 )五个阶段。 3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是( 二义性的 4.从功能上说,程序语言的语句大体可分为( 5.语法分析器的输入是( 单词符号 6.扫描器的任务是从( 源程序中 执行性 )语句和(说明性 ) 。 ) 。 ) ,其输出是( 语法单位 )中识别出一个个( 单词符号 ) 。 )语句两大类。
因此,文法 G[为二义文法。
五.计算题(10 分) 已知文法 A->aAd|aAb| ε
判断该文法是否是 SLR(1) 文法,若是构造相应分析表,并对输入串 ab# 给出分析过程。 解:增加一个非终结符 S/后,产生原文法的增广文法有: S'->A A->aAd|aAb|ε 下 面 构 造 它 的 LR(0) 项 目 集 规 范 族 为 :
对输入串 ab#给出分析过程为:
一、是非题:
1.一个上下文无关文法的开始符,可以是终结符或非终结符。 2.一个句型的直接短语是唯一的。 3.已经证明文法的二义性是可判定的。 4.每个基本块可用一个 DAG 表示。 5.每个过程的活动记录的体积在编译时可静态确定。 6.2 型文法一定是 3 型文法。 7.一个句型一定句子。 8.算符优先分析法每次都是对句柄进行归约。 X 9.采用三元式实现三地址代码时,不利于对中间代码进行优化。 10.编译过程中,语法分析器的任务是分析单词是怎样构成的。 11.一个优先表一定存在相应的优先函数。 13.递归下降分析法是一种自下而上分析法。 14.并不是每个文法都能改写成 LL(1)文法。 15.每个基本块只有一个入口和一个出口。 16.一个 LL(1)文法一定是无二义的。 17.逆波兰法表示的表达试亦称前缀式。 18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。 19.正规文法产生的语言都可以用上下文无关文法来描述。 20.一个优先表一定存在相应的优先函数。 21.3 型文法一定是 2 型文法。 22.如果一个文法存在某个句子对应两棵不同的语法树, 则文法是二义性的。 答案:1.× 12.√ 13.× 2.× 14.√ 3.× 15.√ 4.√ 16.√ 5.√ 17.× 6.× × 18.√ 19.√ 20.× 21.√ 7.× 8.× 9.√ X 12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
编译原理习题
22
20、3.3.4:用一个正规式描述select,注意:不关心大小写, 如SeleCt也可为本正规式匹配。
(s|S)(e|E)(l|L)(e|E)(c|C)(t|T)
21、练习4.5.2 文法SSS+|SS*|a,指出下面最右句型的句 柄 S 2)SS+a*a+ S S + S S * a
S
6、对_____表进行变动较为困难
A、三元式
B、间接三元式
C、四元式 D、三地址码
2
7、P202练习5.2.3.有产生式A→BCD,其中四个文法符号均 有两个属性,s为综合属性,i为继承属性。 判断是否符合S属性定义;是否符合L属性定义;是否存 在和这些规则一致的求值过程
1) A.s=B.i+C.s 2) A.s=B.i+C.s 和 D.i=A.i+B.s 3) A.s=B.s+D.s 4) A.s=D.i, B.i=A.s+C.s, C.i=B.s 和 D.i=B.i+C.i
一、实验目的
根据给出的文法编制语义分析程序。加深对自底向上 语义分析的理解。
二、实验时间
21学时
三、实验内容
对所给语言文法,增加相应的语义代码,并输出所得 三地址码;
实验报告必须包括采用的语法制导定义或翻译模式, 设计的思路,测试报告(输入测试例子,输出结果),设 计的体会。
28
实验三:语义分析实验
四、文法
<program> ::= <block> . <block> ::= <var-decl-list> <statement-list> <var-decl-list> ::= <var-decl> | <var-decl> <var-decl-list> <var-decl> ::= <type> <ident-list> ; <type> ::= float | int <ident-list> ::= id | <ident-list> , id
《编译原理》练习题
《编译原理》练习题一一、填空题(每空1分)1.设G [S ]是一个文法,我们把能由文法的 (1) 推导出来的符号串α称为G 的一个句型。
当句型α仅由 (2) 组成时 (即α∈V T *),则将它称为G 产生的句子。
2.从某一给定的状态q 出发,仅经过若干条 (3) 的矢线所能达到的状态所组成的集合称为ε-CLOSURE(q)。
3.设G=(V N ,V T ,P,S)是一文法,我们说G 中的一个符号X ∈V N ∪V T 是有用的,是指X 至少出现在 (4) 的推导过程中,否则,就说X 是无用的。
我们将不含形如A→A 的产生式和不含无用符号及无用产生式的文法称为 (5) 。
4.我们常采用形如 (class, value)的二元式作为一个单词的 (6) 。
其中,class 是一个整数,用来指示该单词的 (7) ,value 则是单词之值。
5.一个文法G[S]可表示成形如 (8) 的四元式。
其中V N ,V T ,P 均为非空的有限集,分别称为非终结符号集、终结符号集和产生式集, S ∈V N 为文法的开始符号。
此外,将出现在各产生式左部和右部的一切符号所组成的集合称为 (9) ,记作V 。
显然,V=V N ∪V T ,V N ∩V T =∅。
6.通常,可通过两种途径来构造词法分析程序。
其一是根据对语言中各类单词的某种描述或定义,用 (10) 构造词法分析程序;另外一种途径是所谓词法分析程序的(11) 。
7.设G 为一文法,A→α是G 的一个产生式,如果α具有υAδ的形式,其中υ,δ不同时为ε,则称产生式A→α是 (12) 。
若存在推导δυαA A *⇒⇒,则称产生式A→α是 (13) 。
8.设M=(K,Σ,f,S 0,Z)为一DFA ,并设s 和t 是M 的两个不同状态,我们说状态s,t 为某一输入串w (14) ,是指从s,t 中之一出发,当扫视完w 之后到达M 的终态,但从其中的另一个状态出发,当扫视完同一个w 后而进入 (15) 。
编译原理考试题
编译原理考试题
1. 编译器的作用是什么?简述编译器的基本工作流程。
2. 解释什么是词法分析。
描述词法分析器的基本工作原理。
3. 什么是语法分析?描述语法分析器的基本工作原理。
4. 解释语义分析的概念。
语义分析器的基本工作原理是什么?
5. 请简要解释编译器的前端和后端分别是做什么的。
6. 什么是中间代码?为什么编译器要生成中间代码?
7. 解释什么是符号表。
符号表在编译过程中起到什么作用?
8. 简述优化在编译过程中的作用。
列举并解释两种常见的优化技术。
9. 解释静态链接和动态链接的区别。
10. 请解释解释器和编译器之间的区别。
描述它们各自的工作
原理。
11. 解释冲突解析算法中的"移进-归约"冲突和"归约-归约"冲突。
12. 简述LL(1)文法和LR(1)文法的特点及区别。
13. 解释编程语言中的数据类型检查和类型推导的概念。
14. 简要描述语法制导翻译的概念和基本原理。
15. 请解释正则表达式和有限自动机之间的关系。
注意:以上为编译原理考试相关的问题,文中不含有标题相同的文字。
编译原理习题及答案(整理后)
第一章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. 一般程序设计语言的定义都涉及()三个方面。
①语法②语义③语用④程序基本符号的确定A.①②③B.①②④C.①③④D.②③④2. 程序语言一般分为()和()两大类,其中()通常又称为面向机器的语言。
A.高级语言B.专用程序语言C.低级语言D.通用程序语言3. 面向机器语言指的是()A.用于解决机器硬件设计问题的语言B.特定计算机系统所固有的语言C.各种计算机系统都通用的语言D.只能在一台计算机上使用的语言4. 在使用高级语言编程时,首先可通过编译程序发现源程序的全部()错误和部分()错误。
A.语法B.语义C.语用D.运行5. 编译程序与具体的机器(),与具体的语言()。
A.有关B.无关6. 使用解释程序时,在程序未执行完的情况下,()重新执行已执行的部分。
A.也能B.不能7. 编译程序是一种常用的()软件。
A.应用B.系统8. 编写一个计算机高级语言的源程序后,到正式上机运行之前,一般要经过()这几步。
①编辑②编译③连接④运行A.①②③④B.①②③C.①③D. ①④9. “用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行。
”这种说法()。
A.不正确B.正确10. 编译程序生成的目标程序()是机器语言的程序。
A.一定B.不一定11. 编译程序的工作过程一般可以划分为等几个基本阶段,同时还会伴有和。
12. 源程序是用高级语言编写的,目标程序是,则其翻译程序称为编译程序。
13. 编译方式与解释方式的根本区别在于。
14. 编译程序是这样一种程序,它能够将转换成与其等价的。
15. 编译程序而言,输入数据是,输出结果是。
16. 如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:和。
如果编译程序生成的目标程序是汇编语言程序,则源程序的执行方式分成三个阶段:、和。
17. 解释下列名词:翻译程序、解释程序、编译程序、遍。
18. 常用的编辑器构造工具有哪些?参考答案1. A2. C,A, C3. B4. A, B5. A, A6. A7. B8. B9. A10. B11. 词法分析、语法分析、语义分析、中间代码生成、代码优化表格处理出错处理12. 机器语言程序或汇编程序13. 是否生成目标代码14. 用甲语言书写的程序用乙语言书写的程序15. 源程序目标程序16. 编译阶段运行阶段编译阶段汇编阶段运行阶段17. 翻译程序:把某一种语言程序转换成另一种语言程序的程序。
编译原理题目
编译原理题目
1. 词法分析器的设计与实现
2. 语法分析器的生成方法与工具
3. 语法制导翻译的算法与实现
4. 语法制导的代码生成技术
5. 语义分析器的设计与实现
6. 属性文法的定义和属性计算方法
7. 中间代码的生成与优化技术
8. 目标代码生成的方法与实现
9. 解释器与编译器的区别与联系
10. 正则表达式在编译原理中的应用
11. 有限自动机的概念与构建方法
12. 句法制导翻译技术在编译器中的应用
13. 语言语义的表示与验证方法
14. 静态类型检查器的设计与实现
15. 字节码与机器码的转换方法
16. 抽象语法树的构建与遍历算法
17. 参数传递的机制与实现
18. 变量作用域的嵌套与解析方法
19. 优化编译器的关键技术与算法
20. 并行编程在编译器优化中的应用。
(完整版)编译原理习题及答案(整理后)
2、对无二义性文法来说,一棵语法树往往代表了 。
a. 多种推导过程
b. 多种最左推导过程
c.一种最左推导过程
d.仅一种推导过程 e.一种最左推导过程
3、如果文法 G 存在一个句子,满足下列条件 之一时,则称该文法是二义文法。
a. 该句子的最左推导与最右推导相同
b. 该句子有两个不同的最左推导
c. 该句子有两棵不同的最右推导
T→T*P|P
P→(E)|I
则句型 P+T+i 的句柄和最左素短语为 。
a.P+T 和 i b. P 和 P+T c. i 和 P+T+i d.P 和 T
8、设文法为:S→SA|A
A→a|b
则对句子 aba,下面 是规范推导。
a. SSASAAAAAaAAabAaba
b. SSASAAAAAAAaAbaaba
标语言
第二章
一、单项选择题
1、文法 G:S→xSx|y 所识别的语言是 。
a. xyx
b. (xyx)* c. xnyxn(n≥0) d. x*yx*
2、文法 G 描述的语言 L(G)是指 。
a. L(G)={α|S⇒+ α , α∈VT*}
b. L(G)={α|S⇒* α, α∈VT*}
c. L(G)={α|S⇒* α,α∈(VT∪VN*)} d. L(G)={α|S⇒+ α, α∈(VT∪VN*)}
第一章
1、将编译程序分成若干个“遍”是为了
。
a.提高程序的执行效率
b.使程序的结构更加清晰
c.利用有限的机器内存并提高机器的执行效率
d.利用有限的机器内存但降低了机器的执行效率
《编译原理》习题及答案
第一章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步或多步推导产生的文法符号序列是。
(完整word版)编译原理练习题
一章: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、过程1、扫描器的任务是从源程序中识别出一个个单词符号。
2、高级语言源程序有两种执行方式,即解释和编译。
判断:高级语言编写的源程序都必须通过编译,产生目标代码后才能运行。
多遍扫描的编译程序的多遍是指多次重复读源程序。
高级语言程序到低级语言程序的转换是基于语义的等价变换。
编译程序中错误处理的任务是对检查出的错误进行修改。
目标程序一定是机器语言程序。
连接装配程序可把经编译程序产生的目标程序变成可执行的机器语言程序。
简答题:1、请指出下列错误信息可能是编译的哪个阶段报告的?①else没有匹配的if;②数组下标越界;③使用的函数没有定义;④在数中出现了非数字信息。
答:①语法分析阶段②语义分析与中间代码生成阶段③语义分析与中间代码生成阶段④词法分析阶段2、何谓源程序、中间代码和目标代码?它们三者之间有何种关系?答:所谓源程序是指用某种高级语言编写的程序,它是编译程序的加工对象。
目标程序是指低级语言(机器语言或汇编语言)编写的程序,它是编译程序的加工结果。
中间代码是其结构介于源程序和目标程序之间的一种机内表示形式,它是编译程序产生的中间临时结果。
它们三者之间的关系是等价关系,即结构不同,但语义相同。
二章:1、文法G:S-xSx|y所识别的语言是。
A、xyx B 、(xyx)* C、x n yx n(n≥0) D、x*yx*2、设有文法G[S]=({S,B},{b},{S-b|bB,B-bS},S),该文法所描述的语言是。
编译原理练习题及答案
第一章练习题(绪论)一、选择题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.编译程序是一种程序,能够将某一种高级语言编写的源程序改造成另一种低级语言编写的目标程序,它们在逻辑上_等价__,完成_相同__的工作。
2.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是___二义性的____。
3.词法分析程序的功能是从左到右扫描源程序字符串,根据语言的词法规则识别出各类单词符号,并以___单词符号或单词符号表示的源程序_____的形式输出。
4.编译程序一般划分为词法分析、语法分析、语义分析、中间代码生成、和_代码优化_目标代码生成六个阶段;除此以外,还有两个重要的基本工作,它们是_表格管理_和_出错处理_。
5.目前,语法分析方法有两大类,分别为自上向下的分析方法和__自下而上__分析方法。
自上而下的分析方法是从____文法的开始符号_____出发,根据文法规则正向推导出给定句子的方法。
6.属性文法是编译技术中用来说明程序设计语言的__语义___的工具。
7.若源程序是用高级语言编写的,_____目标程序 ____是机器语言程序或汇编程序,则其翻译程序称为__编译程序____。
8.扫描器(程序)的任务是从____字符串____中识别出一个个___单词符号___。
9.一个LR分析器包括三部分:总控程序、_分析表___和分析栈。
10.自顶向下的语法分析方法的基本思想是:从文法的___开始符号_____出发,根据给定的输入串并按照文法的产生式一步一步的向下进行____正向推导___,试图推导出文法的__给力句子__,使之与给定的输入串匹配。
11.按Chomsky分类法,文法被分成__4(0~3型文法)_类。
12.局部优化是在__基本块__范围内进行的一种优化。
13.编译程序是一种_翻译_程序,它将某一种高级语言编写的源程序改造成另一种低级语言编写的目标程序,源程序和目标程序在逻辑上等价,完成相同的工作。
14.编译程序与解释程序的根本区别为___解释程序在执行中不产生目标程序___。
编译原理练习题
《编译原理》练习题一、判题(1分/小题,共15分)1、能将某一种语言程序等价转换成另一种语言程序的系统程序称为编译程序。
2、NFA可以含有多个初态,初态同时也可以是终态。
3、每个文法都能改写为LL(1)文法。
4、规范规约与最左推导互为逆过程。
5、分析表中的动作包括移近、规约、接受和报错四种。
6、自顶向下分析过程是一种试探过程,需要进行回溯。
7、如果一个文法是二义文法,则它存在某个句子对应两棵不同的语法树。
8、中间代码只有三元式和四元式两种表示形式。
9、单词的内部码由单词的种别和单词的值两部分构成。
10、状态转换图每次只能识别一个单词。
11、一个LL(1)文法一定是无二义的。
12、目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
13、正规文法产生的语言都可以用上下文无关文法来描述。
14、一转换图只包含有限个状态,其中有一个被认为是初态,最多只有一个终态。
15、正规集可以用NFA表示出来。
16.一个有穷自动机有且只有一个终态。
17.算符优先关系表不一定存在对应的优先函数。
18.每个文法都能改写为LL(1)文法。
19.算符优先归约不是规范归约。
20.在程序流图中,对任意两个结点m和n而言,如果从流图的首结点出发,到达n的一条通路要经过m,则称m是n的必经结点。
二、填空题(1分/空,共15分)1、语法分析是依据语言的 1 规则进行的,中间代码产生是依据语言的 2 规则进行的。
2、程序语言的单词符号一般可以分为 3 、 4 、 5 、 6 、 7 等等。
3、“上下文无关文法”是描述 8 的工具。
4、如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是 9 。
5、产生式是用于定义 10 的一种书写规则6、语法分析最常用的两类方法是 11 和 12 分析法。
7、单词二元式包括单词种别code和 13 。
8、常用的中间代码有 14 和 15 表示形式。
9.一个文法所描述的语言是;描述一个语言的文法是。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章 习题及解答: 习题及解答:
试求下述文法G(Z)所定义的语言: 试求下述文法G(Z)所定义的语言: G(Z)所定义的语言 Z,BG(Z): Z->b|bB ,B->bZ + 【解】 L(G)={ x | Z => x, x∈VT* } 文法所定 义的语言
推导运算法: ⒈ 推导运算法: ∵ Z => b Z => bB => bbZ => bbb Z => bB => bbZ => bbbB => bbbbZ => bbbbb
第2章
习题及解答: 习题及解答:
试构造下述语言L的文法: 试构造下述语言L的文法: L={ ambn |m≥0,n≥1}; 【解】 • 分析: 1. 此语言仅有一种句型: 分析:
a mb n ; 2. ambn 中包含有两个短语:am 和 bn
;
S(句子 句子),A( 设:S(句子),A(短语1), B(短语2) • 于是: ※产生式形式: 于是: 产生式形式: 【解1】 G1(S): S -> AB |ε A -> Aa |ε B -> Bb | b 或 G2(S): S -> AB |ε A -> aA |ε B -> bB | b
G(S): S -> a A S b ① | B d ② A -> c S ③ | ε ④ B -> b B ⑤ | d ⑥ 三对选择集合两两不相交! ∵ 三对选择集合两两不相交! ∴ G(S)是 LL(1)文法! G(S)是 LL(1)文法! 文法 LL(1)分析表 分析表: (2) LL(1)分析表: a S b c d #
b
②-
a 无用 状态
FA4:
③
a b
ε ④
①a ② + ε 【算法】 算法】
a b ③ a a ② b ④ +① ε - b DFA2 +① a
⑴ ε闭路合而为一; 闭路合而为一; 标记隐含初态和终态; ⑵ 标记隐含初态和终态; 并补充新边。 ⑶ 逆序删ε 边,并补充新边。
a
②
b b
a
-
③
第3章 习题及解答:
直接短语: 直接短语: ③ (SaA) ④ (b)
句柄: 句柄: ③ (SaA)
第2章 习题及解答:
证明下面文法是二义性文法 S->iSeS |iS |i 有下述两棵不同的语法树: 【证】 因为句型 iiSeS 有下述两棵不同的语法树: S i S e i S 和 S i i S S e S 所以所属 文法是二 义性文法! 义性文法! BB->d
B{2}
- C{2,3} B{2} FA2: b a b ① ② ③+ a
a b
DFA1: + A DFA2: + A
a
B
b
b
C
a
-
+ A{1} B{2,3} - B{2,3} B{2,3}
a
b B -
第3章 习题及解答
消除 εNFA 的 ε边: FA3:
a ① +
b
ε a ③ ② ε
b
DFA1
① a +
考虑文法: 考虑文法:G(S) 【解】 ABS->aA|bB ; A->0A|1 ; B->0B|1
构造活前缀的DFA(即句柄识别器) DFA(即句柄识别器 ⑴ 构造活前缀的DFA(即句柄识别器) DFA(即句柄识别器 ※扩展文法,编码: ※活前缀的DFA(即句柄识别器): 扩展文法,编码: 活前缀的DFA(即句柄识别器): Z->S1 (0) S->a2A3(1)|b4B5 (2) A->06A7 (3)|18 (4) B->09B10(5)|111 (6) LR(0)文法吗 文法吗? ⑵ 是LR(0)文法吗? 句柄识别器(DFA) ∵ 句柄识别器(DFA) 中无冲突状态! 中无冲突状态! G(S)是LR(0)文法 文法! ∴ G(S)是LR(0)文法! S ①OK + 0 a ② b 0 ④ r(2) B ⑤ 0 0 B ⑨ 1 1
第3章 习题及解答:
试构造确定自动机 DFA: ⑴ e=1(0|1)*101 +① 1 + 0 1 DFA 变换表
A{1} a b B{1,2} C{1,3}
②
0 1
1
③ ④ ⑤- -
-
B{1,2} D{1,2,4} C{1,3} B{1,2} E{1,3,4} C{1,3} D{1,2,4} D{1,2,4}E{1,3,4} E{1,3,4} D{1,2,4}E{1,3,4}
⑵ e=(a|b)*(aa|bb)(a|b)* a a ② a a b b ④+① b ③ b
DFA 状态图 a B D a b a b a b b C E b a
+
A
第3章 习题及解答:
DFA,它接收 ={0,1}上所有满足如下条件的字 它接收∑ 试构造一个 DFA,它接收∑={0,1}上所有满足如下条件的字 符串: 每一个1都有0直接跟在右边。 符串: 每一个1都有0直接跟在右边。 【解】 0 0 0 1 ② 1 ③0 1 + -① 0
B
已知自动机DFA: 已知自动机DFA: ⑴ ⑵
b ① a② b ③ c + 扩展DFA(加入结束标记#), 扩展DFA(加入结束标记#), b c DFA(加入结束标记 b ⑤④构造压缩变换表; 构造压缩变换表; 根据实现算法,写出识别 abbc#的过程。 根据实现算法, abbc#的过程。 的过程
整理: 整理: E -> E + T | E – T | T +|令: ω = +|∴ 有 或 G`(S): G`(S): E -> E ω T | T E -> T { ω T } E -> T E` E`E`-> ω T E` | ε
第2章 习题及解答:
已知文法
SABG(S): S->aSab|bAB ; A->bB|a ; B->aA|b DC->abB|baA ; D->Cbc|abc ; 【解】 删除无用产生式:自定己;不终结;不可达。 删除无用产生式:自定己;不终结;不可达。 自定己产生式 A) 自定己者! ⑴ 找自定己产生式 (如 A -> A) 无自定己者! ⑵ 构造可终结非终结符集 Vvt={ A ,B ,C ,D ,S }, 不终结者! 无不终结者! ⑶ 构造可达非终结符集 VAR={ S ,A ,B }, 删除不可达非终结符: 不可达非终结符 ∴删除不可达非终结符:C,D 后 得: SABG`(S): S->aSab|bAB ; A->bB|a ; B->aA|b
第3章 习题及解答:
【解】 扩展DFA: ⑴ 扩展DFA: # 压缩变换表 索引表 b a ① ② b ③ c ⑤ + c b b ④ ⑵ 输入串 abbc# 识别过程: 识别过程: #
state
1 2 3 3 5
ch a b b c #
bbc# bc# c# #
① ② ③ ④ 剩余 变换 备注 ⑤
2 3 3 5 ok
a b ∀ b c ∀ b c ∀ b # ∀
② ④ no ③ ⑤ no ③ ⑤ no ④ b no
接受
# ok ∀ no
第5章 习题及解答
构造下述文法的递归子程序: 构造下述文法的递归子程序: >cS|ε G(S): S ->aASb|Bd ; A ->cS|ε ; B ->bB|d 【解】
S
SA【习题 】G(S): S->aAcBe ; A->Ab|b ; 是一个句型; ⑴ 证明 α= aAbcde 是一个句型; 画出句型α 的语法树; ⑵ 画出句型α 的语法树;
指出句型α 的短语、简单短语和句柄。 ⑶ 指出句型α 的短语、简单短语和句柄。
第2章 习题及解答:
E->E+T|E已知文法G(S): E->E+T|E-T|T 消除直接左递归公式: 【解】 ∵ 消除直接左递归公式: A -> A β | α ≡ A -> α { β } A -> α A`, A`-> β A` |ε A`-
已知符号串集合,构造正规式、自动机和正规文法: 已知符号串集合,构造正规式、自动机和正规文法: A={ ε,an,ban|n≥1 } 【解】 正规式: e=ε|a+|ba+ 或 e=a*|ba+ 正规式: e=ε e=a 自动机 DFA: 正规文法: 正规文法: a S -> aA|bB|ε a + 1 2 A -> aA|ε b 3 a A S B -> aA
…
2n∴ Z => b2n-1 , n≥1 正规方程式法: ⒉ 正规方程式法: ∵ Z=b|bB, B=bZ 即 Z=b|bbZ 2n可得: ※递推求解 Z=b|bbZ 可得:Z=b2n-1
n≥1
∴
2nL(G)={ b2n-1 | n≥1 }
第2章
习题及解答: 习题及解答:
已知文法G[S]: SA已知文法G[S]: S->(AS)|(b) ; A->(SaA)|(a) 试找出符号串(a)和(A((SaA)(b)))的短语、 试找出符号串(a)和(A((SaA)(b)))的短语、直接短语 (a) 的短语 简单短语)和句柄。 (即 简单短语)和句柄。 【解】 根据文法G[S]: S->(AS)|(b) ; A->(SaA)|(a) 根据文法G[S]: A⑴ 因为(a)不是句子,所以没有短语问题。 因为(a)不是句子,所以没有短语问题 (a)不是句子 没有短语问题。 ⑵ 从语法述上,看(A((SaA)(b)))的短语、直接短语和句柄: 从语法述上, (A((SaA)(b)))的短语、直接短语和句柄: 的短语 S S ( ( A S ) ) ( A A S ) S a A )( b 短语: 短语: ① ② ③ ④ (A((SaA)(b))) ((SaA)(b)) (SaA) (b)