编译原理练习题解答
编译原理试题及答案

编译原理试题及答案一、选择题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、将编译程序分成若干个“遍”就是为了。
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、正规文法又称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|TT→T某P|PP→(E)|i则句型P+T+i的句柄和最左素短语分别为BA.指示器B.临时变量C.符号表D.程序变量8、程序语言的单词符号一般可以分为保留字、标识符、常数、运算符、界符等等。
9、下列B优化方法是针对循环优化进行的。
A.删除多余运算B.删除归纳变量C.合并已知量D.复写传播10、若文法G定义的语言是无限集,则文法必然是AA、递归的B、前后文无关的C、二义性的D、无二义性的11、文法G产生的D的全体是该文法描述的语言。
A、句型B、终结符集C、非终结符集D、句子12、Chomky定义的四种形式语言文法中,0型文法又称为A文法;1型文法又称为C文法。
A.短语文法B.上下文无关文法C.上下文有关文法D.正规文法A.短语文法B.上下文无关文法C.上下文有关文法D.正规文法13、语法分析最常用的两类方法是自顶向下和自底向上分析法。
14、一个确定的有穷自动机DFA是一个AA五元组(K,∑,f,S,Z)B四元组(VN,VT,P,S)C四元组(K,∑,f,S)D三元组(VN,VT,P)A、语法B、语义C、代码D、运行15、B不属于乔姆斯基观点分类的文法。
A、上下文无关文法B、算符优先文法C、上下文有关文法D、正规文法16、一个文法所描述的语言是A;描述一个语言的文法是BA.唯一的B.不唯一的C.可能唯一,可能不唯一A.唯一的B.不唯一的C.可能唯一,可能不唯一17、语法分析是依据语言的语法规则进行的,中间代码产生是依据语言的等价变换规则进行的。
编译原理练习题及答案

第一章练习题(绪论)一、选择题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、将编译程序分成若干个“遍”是为了。
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步或多步推导产生的文法符号序列是。
编译原理试题及答案

编译原理试题及答案一、选择题1. 下列哪个不是编译器所需的基本处理步骤?A. 词法分析B. 语法分析C. 语义分析D. 目标代码优化答案:D2. 编译器的主要功能是将高级语言程序翻译成什么形式?A. 汇编语言B. 机器语言C. 中间代码D. 高级语言答案:B3. 下列哪个不属于编译器的后端阶段?A. 代码优化B. 目标代码生成C. 词法分析D. 目标程序优化答案:C二、填空题1. 编译器的输入是源程序,输出是目标程序。
2. 目标代码生成阶段的任务是将中间代码翻译成汇编语言或机器语言。
3. 语法分析阶段的输出是抽象语法树。
三、简答题1. 请简述编译器的工作原理。
编译器的工作原理主要包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等阶段。
词法分析阶段将源程序分解成单词(也称为词法单元),语法分析阶段根据语法规则将词法单元组织成一个语法树,语义分析阶段对语法树进行语义检查,中间代码生成阶段将语法树转化为中间代码,代码优化阶段对中间代码进行优化,最后目标代码生成阶段将中间代码转化为机器语言或汇编语言。
2. 请说明词法分析的作用是什么,如何实现?词法分析的作用是将源程序中的字符序列转化为单词序列,也就是将一段代码切分成不同的词法单元。
实现词法分析可以通过有限状态自动机来处理输入字符序列,并根据一系列规则将字符序列划分为词法单元。
常用的方法有手写分析器和使用词法分析生成器等。
3. 简要介绍一下代码优化的目的和方法。
代码优化的目的是通过对程序的中间代码或目标代码进行调整,以达到提高程序性能、减小程序的空间占用或减小程序的执行时间等目的。
代码优化的方法主要包括局部优化和全局优化两种。
局部优化主要针对某个代码块进行优化,如常量折叠、公共子表达式消除等。
全局优化则考虑整个程序,对程序的整体结构进行优化,如循环优化、函数内联等。
总结:编译原理试题及答案主要涵盖了选择题、填空题和简答题三个部分。
其中选择题主要考察对编译器基本处理步骤和功能的理解。
编译原理考试题及答案

编译原理考试题及答案一、选择题(每题5分,共20分)1. 编译器的主要功能是什么?A. 代码优化B. 代码翻译C. 代码调试D. 代码运行答案:B2. 下列哪个选项不属于编译器的前端部分?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,文法的产生式通常表示为:A. A -> αB. A -> βC. A -> γD. A -> δ答案:A4. 下列哪个算法用于构建语法分析树?A. LL(1)分析B. LR(1)分析C. SLR(1)分析D. LALR(1)分析答案:A二、填空题(每空5分,共20分)1. 编译器的前端通常包括词法分析、语法分析和________。
答案:语义分析2. 编译器的后端主要负责________和目标代码生成。
答案:代码优化3. 编译器中的词法分析器通常使用________算法来识别单词。
答案:有限自动机4. 语法分析中,________分析是一种自顶向下的分析方法。
答案:递归下降三、简答题(每题10分,共30分)1. 简述编译器的作用。
答案:编译器的主要作用是将高级语言编写的源代码转换成计算机能够理解的低级语言或机器代码,以便执行。
2. 解释一下什么是语法制导翻译。
答案:语法制导翻译是一种翻译技术,它利用源语言的语法信息来指导翻译过程,使得翻译过程能够更好地理解源代码的语义。
3. 什么是词法分析器?答案:词法分析器是编译器前端的一部分,它的任务是将源代码文本分解成一系列的标记(tokens),这些标记是源代码的最小有意义的单位。
四、计算题(每题10分,共30分)1. 给定一个简单的文法G(E):E → E + T | TT → T * F | FF → (E) | id请计算文法的非终结符号E的FIRST集和FOLLOW集。
答案:E的FIRST集为{(, id},FOLLOW集为{), +, $}。
2. 假设编译器在进行语法分析时,遇到一个语法错误的代码片段,请简述编译器如何处理这种情况。
编译原理习题及答案

2. 正规式 M 1 和 M 2 等价是指_____。 A.( ) M1 和 M2 的状态数相等 C.( ) M1 和 M2 所识别的语言集相等 B.( ) M1 和 M2 的有向边条数相等 D.( ) M1 和 M2 状态数和有向边条数相等
3. 文法 G:S→xSx|y 所识别的语言是_____。 A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*
10.编译程序使用_____区别标识符的作用域。 A. ( ) 说明标识符的过程或函数名 B.( ) 说明标识符的过程或函数的静态层次 C.( ) 说明标识符的过程或函数的动态层次 D. ( ) 标识符的行号 三、填空题(每空 1 分,共 10 分) 1.计算机执行用高级语言编写的程序主要有两种途径:___解释__和__编译___。 2.扫描器是__词法分析器___,它接受输入的__源程序___,对源程序进行___词法分析__并识别出一个个 单词符号,其输出结果是单词符号,供语法分析器使用。 3.自上而下分析法采用___移进__、归约、错误处理、___接受__等四种操作。 4.一个 LR 分析器包括两部分:一个总控程序和___一张分析表__。 5.后缀式 abc-/所代表的表达式是___a/(b-c)__。 6.局部优化是在__基本块___范围内进行的一种优化。 四、简答题(20 分) 1. 简要说明语义分析的基本功能。 答:语义分析的基本功能包括: 确定类型、类型检查、语义处理和某些静态语义检 查。
4lr0分析器所谓lr0分析是指从左至右扫描和自底向上的语法分析且在分析的每一步只须根据分析栈当前已移进和归约出的全部文法符号并至多再向前查看0个输入符号就能确定相对于某一产生式左部符号的句柄是否已在分析栈的顶部形成从而也就可以确定当前所应采取的分析动作移进还是按某一产生式进行归约等
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
* ⇒一.名词解释:1)前缀答:前缀——是指符号串任意首部。
2)可归前缀答:可归前缀——是指规范句型的一个前缀,这种前缀包含句柄且不含句柄之后的任何符号。
3)活前缀答:活前缀——规范句型的一个前缀,这种前缀不含句柄之后的任何符号。
或给定文法规范句型的可归前缀的任意首部。
4)简单短语答:简单短语——设G[Z]是给定文法,w=xuy ∈V +,为该文法的句型,如果满足下面两个条件:① Z xUy ; ② U ⇒u ;则称句型xuy 中的子串u 是句型xuy 的简单短语。
5)扫描遍答:扫描遍——指编译程序对源程序或中间代码程序从头到尾扫描一次。
6)句柄答:句柄——给定句型中的最左简单短语就是句柄。
7)句型答:句型——设G 是一个给定的文法,S 是文法的开始符号,如果S x(其中x ∈V *),则称x 是文法的一个句型。
8)句子答:句子——设G 是一个给定的文法,S 是文法的开始符号,如果S x (其中x ∈V T *),则称x 是文法的一个句子。
9)非终结符答:非终结符——出现在文法产生式的左部且能派生出符号或符号串的那些符号称为非终结符号。
10)终结符答:终结符——出现在文法产生式的右部且不能派生出符号或符号串的那些符号称为终结符号。
11)属性文法答:一个属性文法形式的定义为一个三元组AG ,AG=(G ,V ,E )。
其中G 为一个上下文无关文法;V 为属性的有穷集;E 为一组语义规则。
12)语法制导翻译答:语法制导翻译——语法制导翻译就是在语法分析的过程中,当进行推导或归约时同步完成附加在所使用的产生式上的语义规则描述的动作,从而实现语义处理。
13)后缀式答:后缀式——一种把运算量(操作数)写在前面,把算符写在后面(后缀)的表示法。
* 14)短语答:短语——设G[Z]是给定文法,w=xuy ∈V +,为该文法的句型,如果满足下面两个条件:① Z xUy ; ② U u ;则称句型xuy 中的子串u 是句型xuy 的短语。
或:句型语法树的全部子树的叶从左到右排列起来构成的符号串均是句型的短语。
15)基本块答:基本块——源程序或者中间代码程序中只有一个入口和一个出口的顺序执行的代码段。
16)语义规则答:对于文法的每个产生式都配备了一组属性的计算规则,称为语义规则。
17)语法分析答:语法分析——按文法的产生式识别输入的符号串是否为一个句子的分析过程。
18)四元式答:四元式——是一个带有四个域的记录结构,这四个域分别称为操作符域、左运算对象域、右运算对象域及运算结果域。
二.简答题:1) 什么是句子? 什么是语言?解答:句子——设G 是一个给定的文法,S 是文法的开始符号,如果S x (其中x ∈V T *),则称x 是文法的一个句子。
语言——语言是句子的集合。
或——设G[S]是给定文法,则由文法G 所定义的语言L(G)可描述为:L(G)={x │S x,x ∈V T *} 。
2) DFA 与NFA 有何区别 ?解答:DFA 与NFA 的区别表现为两个方面:一是NFA 可以有若干个开始状态,而DFA 仅只有一个开始状态。
另一方面,DFA 的映象M 是从K ×∑到K ,而NFA 的映象M 是从K ×∑到K 的子集,即映象M 将产生一个状态集合(可能为空集),而不是单个状态。
3) 自顶向下的语法分析方法的基本思想是什么?解答:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接推导,试图推导出文法的句子,使之与给定的输入串匹配。
4) 自底向上的语法分析方法的基本思想是什么?解答:从给定的输入串(终结符串)开始,根据文法的规则一步一步的向上进行直接归约,试图归约到文法的开始符号。
5) 一个上下文无关文法G 包括哪四个组成部分?解答:一组非终结符号,一组终结符号,一个开始符号,以及一组产生式。
6) 在自底向上的语法分析方法中,分析的关键是什么?解答:关键是寻找句柄。
7) 在自顶向下的语法分析方法中,分析的关键是什么?解答:关键是选择候选式。
8)编译程序中语法分析器接收以什么为单位的输入?解答: 接收以单词为单位的输入。
9)若一个文法是递归的,则它所产生的语言的句子是可枚举的吗?解答: 它所产生的语言的句子不是可枚举的,而是无穷多个。
10)编译程序生成的目标程序是不是一定是机器语言的程序?解答:不一定是机器语言的程序。
11)词法分析器是用于做什么的?解答:词法分析器是用于识别单词的。
12)“用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行”这种说法正确吗?解答:不正确。
13)把汇编语言程序翻译成机器可执行的目标程序的工作是由什么完成的?14)图示运行时存储空间的划分(分为哪几个区)。
解答: 一般分为静态区和动态区:程序代码区、静态数据区、栈区和堆区15)词法分析的主要任务是什么?解答:词法分析器的任务是对构成源程序的字符串从左到右逐个字符逐个字符地进行扫描,依次把它们识别为一个一个具有独立意义的单词,并确定其属性,再转换为长度统一的属性字并输出。
16)常用的中间语言种类有哪几种?解答: 常用的中间语言种类有逆波兰表示、三元式、四元式和树形表示。
17)文法G所描述的语言是什么的集合?解答:是由文法的开始符号推出的所有终结符串的集合。
或说是句子的集合。
18)乔姆斯基把文法分为四种类型,即0型、1型、2型、3型。
其中2型文法叫什么?解答: 2型文法叫上下文无关文法。
19)编译程序是一种解释程序吗?还是什么程序?解答:编译程序是一种翻译程序。
20)按逻辑上划分,编译程序第二步工作是什么?解答: 编译程序第二步工作是语法分析。
21)源程序是用高级语言编写的,目标程序是机器语言程序或汇编语言程序,则其翻译程序称为什么?解答: 其翻译程序称为编译程序。
22)编译方式与解释方式的根本区别为什么?解答:编译方式与解释方式的根本区别在于是否生成目标代码。
23)常见的动态存贮分配策略有哪两种?解答:常见的两种动态存贮分配策略是栈式动态分配策略和堆式动态分配策略。
24)常用的参数传递方式有哪三种?解答:常见的参数传递方式有传地址、传值和传名三种方式。
25)语法分析的任务是什么?解答:语法分析的任务是识别给定的终结符串是否为给定文法的句子。
26)局部优化是局限于一个什么范围内的一种优化?解答:是局限于一个基本块范围内的一种优化。
27)文法等价的定义是什么?解答:设G1和G2是给定的文法,如果有L(G1)= L(G2),则称G1与G2等价。
28)在语法分析处理中,FIRST集合、FOLLOW集合、SELECT集合均是什么集合?解答:均是终结符集。
29)通常一个编译程序中应包括哪七个部分?解答:通常一个编译程序中应包含词法分析,语法分析,语义分析与中间代码生成,代码优化,目标代码生成以及表格处理和出错处理等七个部分。
32)如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分为哪三个阶段?解答: 源程序的执行分为三个阶段: 编译阶段,汇编阶段和运行阶段。
33)翻译程序是这样一种程序,它能够将用什么转换成与其等价的用乙语言书写的程序?解答:能够将用甲语言书写的程序转换成与其等价的用乙语言书写的程序。
34)说明下面文法G[S]是二义性文法:S→SaS|SbS|cSd|eS|f解答:fafbf是文法G[S]的一个句子,并且有两个不同的最右推导。
(1)S => SaS => SaSbS => SaSbf=> Safbf=> fafbf(2)S => SbS => Sbf=> SaSbf => Safbf=> fafbf 因此说明此文法有二义性。
35)在属性文法中,综合属性与继承属性是如何传递信息的?解答: 综合属性用于自下而上传递信息,继承属性用于自上而下传递信息。
36)代码优化的主要目标是什么?解答: 代码优化的主要目标是如何提高目标程序的运行速度和如何减少目标程序运行时所需的空间。
37)写一个文法,使其语言是无符号二进制实数(不含指数)。
解答:文法G(N):N→L.L|LL→LB|BB→0|1三.应用题1)消除下列文法G[A]的左递归。
E→E-T∣TT→T/F∣FF→( E )∣i解答:消除文法G[E]的左递归后得到:E→TE′E’→-T E′∣ε其中:开始状态:0终止状态:2bT →FT ′T ’→/FT ′∣εF →( E )∣i2) 消除下列文法G[A]的左递归。
A →AaB ∣BB →BbC ∣CC →eD ∣DD →(A)∣d解答:消除文法G[A]的左递归后得到:A →BA ˊA ˊ→aBA ˊ∣εB →CB ˊB ˊ→bcB ˊ∣εC →eD ∣DD →(A)∣d3)给定下列自动机:把此自动机转换为确定自动机DFA 。
解答:从而可得DFA 如图:4)正规式(a|b )*a(a|b) 构造一个等价的有限自动机。
解答:⇒四.设计题(1)给定文法G[S′] 及相应翻译方案为:1.S'→S {print:“a”}2.S→r D {print:“b”}3.D→D,i {print:“c”}4.D→i {print:“d”}a. 按chomsky分类法,文法G属于哪一型文法?b. 符号串ri,i,i是不是该文法的一个句型,请证实。
c. 若是句型,写出该句型的所有短语、简单短语,以及句柄。
d. 构造识别该文法的活前缀的DFA。
e. 判断该文法是LR(0)还是SLR(1),并构造其相应的语法分析表。
f. 对于ri,i,i这个输入符号串,经该翻译方案翻译后的输出是什么?解答:a.文法G属于2型(上下文无关)文法。
b.符号串r i,i,i是该文法的一个句型。
证:S'⇒S⇒rD⇒rD,i⇒ rD,i,i ⇒ r i,i,i,得证。
或证:构造语法树见图4,可知符号串r i,i,i是该文法的一个句型。
c.句型r i,i,i的短语有:①r i,i,i;② i,i,i;③i,i;④第一个i简单短语有:第一个i句柄有:第一个id.求得文法G的识别全部活前缀的DFA见图3:图3 识别全部活前缀的DFAe.∵在项目集I4中存在冲突项目,∴文法G不是LR(0)文法。
FOLLOW(S')={#}FOLLOW(S)={#}FOLLOW(D)={ ,,#}而由于{ ,}∩FOLLOW(S)={ ,}∩{#}=Φ,所以文法G是SLR(1)文法。
求得文法G的SLR(1)分析表见表1:f.可以先求得该句子的语法树(见图4),然后通过剪枝的方式进行归约,最后归约到文法的开始符号,在归约的过程中同步产生输出符号串dccba。
即对于r i,i,i这个输入符号串,该翻译方案的输出是:dccba(2)给定文法:(1)S→bTc(2)S→a(3)T→R(4)R→R/S(5)R→Sa)符号串ba/ac是不是该文法的一个句子,请证实。