编译原理复习及答案2009

合集下载

2009-2010编译原理A卷及答案汇总

2009-2010编译原理A卷及答案汇总

南昌航空大学2009 —2010 学年第二学期期末考试课程名称:编译原理 闭卷 A 卷 120 分钟一、 填空题(每空2分,共24分)1、一个上下文无关文法G 包括四个组成部分:一组终结符号,一组非终结符号,一个______________,以及一组产生式。

(2分)2、 自下而上分析方法的基本思想是:从输入符号串开始,利用文法规则逐步进行归约,直至归约到文法的______________。

(2分)3、自顶向下的语法分析方法的基本思想是:从文法的_____ _开始,根据给定的输入串并按照文法的产生式一步一步的向下进行_____ _,试图推导出文法的___ ___,使之与给定的输入串______。

(8分)4、S -属性文法中的每个文法符号,只含有______________ 属性。

(2分)5、对于文法的每个产生式都配备了一组属性的计算规则,称为 _____ 。

(2分)6、通过一便扫描来产生布尔表达式的代码主要问题在于,当生成某些转移语句时可能不知道该语句将要转移到的标号究竟是什么。

为了解决这个问题可以采用______________技术。

(2分)7、a*(b-c)的后缀式为______________。

(2分)8、假定G 是一个文法,S 是它的开始符号。

如果S α*⇒,则称α是一个______________。

仅含______________的句型是一个句子。

(2分)二、选择题(每题2分,共20分)1、_____是两类程序语言处理程序。

A.高级语言程序和低级语言程序B.解释程序和编译程序C.编译程序和操作系统D.系统程序和应用程序2、一个句型中的最左_____称为该句型的句柄。

A.短语B.简单短语C.素短语D.终结符号3.若一个文法是递归的,则它所产生的语言的句子_____。

A.是无穷多个B.是有穷多个 C.是可枚举的D.个数是常量4、在自底向上的语法分析方法中,分析的关键是_____。

A.寻找句柄B.寻找句型C.消除递归D.选择候选式5、若a为终结符,则A->α·aβ为_____项目。

编译原理复习题答案

编译原理复习题答案

二、概念题1、设有文法:P→P+Q|QQ→Q*R|RR→(P)|i(1)证明Q*R+Q+Q是它的一个句型。

(3分)(2)给出Q*R+Q+Q的所有短语,直接短语和句柄。

(4分) (3)给出句子i+i*i的最右推导。

(4分)(4)给出句子i+i*i的最左推导。

(4分)2、设有文法:E→E+T|T T→T*F|F F→(E)|i (1)证明E+T*F是它的一个句型。

(3分)⇒+⇒+*答案:E E T E T F(2)给出E+T*F的所有短语,直接短语和句柄。

(4分) 短语: E+T*F, T*F,直接短语: T*F句柄: T*F(3)给出句子i+i*i的最右推导。

(4分)3、写出表达式a+b*(c-d)对应的逆波兰式和三元式序列。

答案:逆波兰式:(abcd-*+)三元式序列:OP ARG1 ARG2(1) - c d(2) * b (1)(3) + a (2)三、词法分析题给出下面语言的相应文法L1={a n b n a m b m|n,m≥0}答案:S→AB|A|B|∑A→aAb|abB→aBb|ab给出下面语言的相应文法L2={a n b n c i|n≥1,i≥0}答案:S→AB|BA→a|aAB→bBc|bc给出下面语言的相应文法L3={a n b n c m| m,n≥1,n为奇数,m为偶数}。

答案:文法G(S):S→ACA→aaAbb/abC→ccCcc/cc四、词法分析题1、构造下面正规式相应的DFA((0|1)*|(11)*)*(要求:先将正规式转化为NFA,再将NFA确定化,最小化)2、构造下面正规式相应的DFA1(0|1)*101答案:I I0 I1{X} Ф{A,B,C}{A,B,C} { B,C} { B,C,D}{B,C} { B,C} { B,C,D}{B,C,D} { B,C,E} { B,C,D}{B,C,E} { B,C} {B,C,D,y}{B,C,D,y} {B,C,E} { B,C,D}3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。

编译原理复习题有答案

编译原理复习题有答案

编译原理复习题有答案编译原理复习题及答案一、选择题1. 编译器的主要功能是什么?A. 代码格式化B. 代码优化C. 将源代码转换为机器码D. 错误检测和修复答案:C2. 词法分析阶段的主要任务是什么?A. 语法分析B. 语义分析C. 识别源程序中的词法单元D. 代码生成答案:C3. 下列哪个不是编译原理中的常见数据结构?A. 栈B. 队列C. 哈希表D. 链表答案:D4. 语法分析通常采用哪种方法?A. 递归下降分析B. 动态规划C. 贪心算法D. 深度优先搜索答案:A5. 代码优化的目的是什么?A. 增加程序长度B. 减少程序运行时间C. 提高程序的可读性D. 增加程序的复杂性答案:B二、简答题1. 简述编译过程的主要阶段。

答案:编译过程主要分为四个阶段:词法分析、语法分析、语义分析和代码生成。

词法分析负责将源代码分解成词法单元;语法分析构建语法树,检查源代码的语法结构;语义分析检查程序的语义正确性;代码生成将源代码转换成目标代码或机器码。

2. 什么是自底向上的语法分析方法?答案:自底向上的语法分析方法是一种从叶子节点开始,逐步向上构建语法树的方法。

它通常使用移进-归约分析技术,通过将输入符号与栈顶符号进行匹配,不断地将它们归约成非终结符,直到整个输入被归约为起始符号。

3. 请解释什么是中间代码,并说明其作用。

答案:中间代码是一种介于源代码和目标代码之间的代码形式,通常用于代码优化和目标代码生成。

它具有高级语言的可读性,同时又能表达程序的控制流和数据流信息。

中间代码使得编译器可以在不同的阶段对程序进行优化,提高程序的执行效率。

三、论述题1. 论述编译原理中的错误处理机制。

答案:编译原理中的错误处理机制主要包括错误检测、错误恢复和错误报告。

错误检测是指在编译过程中识别出源代码中的语法或语义错误;错误恢复是指在检测到错误后,编译器采取的措施以继续编译过程,避免因单个错误而中断整个编译;错误报告则是向程序员提供错误信息,帮助其定位和修复错误。

编译原理复习题一(含答案)

编译原理复习题一(含答案)

一、单选题(每题2分,共20分)1. 编译器的()阶段可将源程序的字符流收集到若干记号中。

A. 语法分析B. 语义分析C. 代码生成D. 词法分析2. 文法A aA | b属于正则文法,正则文法在乔姆斯基层次中对应于()文法。

A. 1型B. 2型C. 3型D. 0型3. 某C语言源代码文件包含#include <stdio.h>,()将对源代码进行处理,把文件stdio.h 包含进去。

A.编译器B.解释器C.汇编器D.预处理器4. LL(1)文法的充要条件是()。

A.对于文法中的每条产生式Uα1|α2|…|αn,要求FIRST(αi)∩FIRST(αj)=Φ(i≠j)B.该文法对应的LL(1)分析表中每个项目最多只有一条产生式。

C.A和BD.都不是5. 以下说法中正确的是()。

A.任何语言都可以描述为一个正则表达式。

B.对于任何一个NFA M,都存在一个DFA M’,满足L(M)= L(M’)。

C.任何一个DFA只有一个终态。

D.NFA的弧上标记只含输入字母表中的元素。

6.合成属性的计算可以通过对语法树进行()遍历进行。

A. 前序B.中序C.后序D.任意7.乔姆斯基的2型文法是这样一种语言,其产生式限制为()。

A. α->βB. P->βC. P->a或P->aβD. αPγ->αβγ8. 正则式的“*”读作()。

A. 并且B.连接C.正则闭包D.闭包9. 编译程序中的语义分析器接受以()为单位的输入,并产生信息供以后各阶段使用。

A. 语法树B.子程序C.单词D.语句10.文法A->aAb|ab生成的语言是()。

A. {ab}B.{aAb}C. {anbn|n≥1}D.{anbn|n≥0}二、判断题(每题2分,共10分,对的打√,错的打×)1. 一个LR(0)文法一定是SLR(1)文法。

()2. 在类型声明文法中,类型属性type是继承属性。

编译原理全复习(完整版)

编译原理全复习(完整版)

1》编译程序的框架图与功能块:(1)画出编译程序的总体结构,并简述各部分的主要功能:七个部分(2)编译程序的结构分为几个阶段,各阶段的任务是什么?答编译程序总框架(1)词法分析器,又称扫描器,输入源程序,进行词法分析,输出单词符号。

(2)语法分析器,简称分析器,对单词符号串进行语法分析(根据语法规则进行推导或规约),识别出各类语法单位,最终判断输入串是否构成语法上正确的“程序”。

(3)语义分析与中间代码产生器,按照语义规则对语法分析器归约出(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的中间代码。

(4)优化器,对中间代码进行优化处理。

(5)目标代码生成器,把中间代码翻译成目标程序。

(6)表格管理,登记源程序的各类信息,编译各阶段的进展状况。

(7)出错管理,把错误信息报告给用户。

编译程序的结构分为五个阶段:(1)词法分析.任务是:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),如基本字,标识符,常熟,算符和界符。

(2)。

语法分析,任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴)。

(3)语义分析与中间代码产生。

任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。

(4)优化。

任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。

(5)目标代码生成。

任务是:把中间代码(或优化出理之后)变换成特定机械上的低级语言代码。

2》.重要概念:a. 编译程序:是指能够把源语言程序转换成逻辑上等价的目标语言程序的一个程序。

b. 单词符号:是语言的基本组成成分,是人们理解和编写程序的基本要素,是语言中具有独立意义的最基本结构,它一般包括:基本字、标识符、常数、运算符和界符等c. 中间代码:是一种含义明确,便于处理的记号系统,它通常独立于具体的硬件。

编译原理考试题及答案

编译原理考试题及答案

编译原理考试题及答案一、选择题(每题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. 假设编译器在进行语法分析时,遇到一个语法错误的代码片段,请简述编译器如何处理这种情况。

2008~2009学年度第二学期《编译原理》考试试卷答案-A

2008~2009学年度第二学期《编译原理》考试试卷答案-A

华中科技大学文华学院2008~2009学年度第二学期《编译原理》考试试卷(A卷)标准答案和评分课程性质:(必修)使用范围:(本科)考试时间:2009 年5月日考试方式:(闭卷)学号__________年级专业____________班级________姓名____________ 一、单选题(将正确的答案的字母,填入题干的下划线中。

每题2分,共14分)1.语言学家Chomsky将文法和语言分为四大类,其中3型文法又称为D。

A.无限制文法B.上下文有关文法C.上下文无关文法D.正规文法2.设有文法G[S]:S→(T)|a|∧,T→TbS|S,则FOLLOW(S)= B。

A.{ ),b } B.{ ),b,# } C.{ ),a,# } D.{ ( , b }3.在语法分析方法中,算符优先分析法采用A文法。

A.OPG B.LL(1) C.LR(0) D.LR(1)4.对程序中的表达式的识别工作,编译程序通常都在A阶段完成。

A.语法分析B.语义分析C.词法分析D.目标代码的生成5.自下而上语法分析的工作原理是C。

A.“移进—推导法”B.“最左推导法”C.“移进—规约法”D.“推导—规约法”6.已知∑={a,b},与文法G[S]:S→Sa| Sb| a等价的正规式是C。

A.ab*B.ba* C.a(a|b)*D.aa*|b*7.LR分析法每次都是对当前句型的B进行规约。

A.素短语B.句柄C.短语D.最左素短语二、填空题(每空2分,共22分)1.已知文法G[S]:S →(A)|a ,A →AcS|S|b ;该文法的开始符号是 S ,非终结符号集合为 {S,A},终结符号集合为{a,b,c,(,)}。

2.描述源程序中的单词结构有3种方法:有穷自动机,正规式和正规文法。

3.自上而下的语法分析方法有LL(1)和递归下降方法。

4.设有文法G[S]:S →Sa|a ,构造它的拓广文法,引入一个产生式:S ˊ→S ;则I 。

编译原理期末总复习题(含答案)

编译原理期末总复习题(含答案)

第八节习题一、单项选择题1、将编译程序分成若干个“遍”是为了 b 。

a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器存并提高机器的执行效率d.利用有限的机器存但降低了机器的执行效率2、构造编译程序应掌握 d 。

a.源程序b.目标语言c.编译方法d.以上三项都是3、变量应当 c 。

a.持有左值b.持有右值c.既持有左值又持有右值d.既不持有左值也不持有右值4、编译程序绝大多数时间花在 b 上。

a.出错处理b.词法分析c.目标代码生成d.管理表格5、 d 不可能是目标代码。

a.汇编指令代码b.可重定位指令代码c.绝对指令代码d.中间代码6、使用 a 可以定义一个程序的意义。

a.语义规则b.词法规则c.产生规则d.词法规则7、词法分析器的输入是 a 。

a.单词符号串b.源程序c.语法单位d.目标程序8、中间代码生成时所遵循的是- d 。

a.语法规则b.词法规则c.语义规则d.等价变换规则9、编译程序是对 d 。

a.汇编程序的翻译b.高级语言程序的解释执行c.机器语言的执行d.高级语言的翻译10、语法分析应遵循 b 。

a.语义规则b.语法规则c.构词规则d.等价变换规则解答1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。

2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。

3、对编译而言,变量既持有左值又持有右值,故选c。

4、编译程序打交道最多的就是各种表格,因此选d。

5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d。

6、词法分析遵循的是构词规则,语法分析遵循的是语法规则,中间代码生成遵循的是语义规则,并且语义规则可以定义一个程序的意义。

因此选a。

7、b 8、c 9、d 10、c二、多项选择题1、编译程序各阶段的工作都涉及到bc 。

a.语法分析b.表格管理c.出错处理d.语义分析e.词法分析2、编译程序工作时,通常有abce 阶段。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

考试题型:(满分100分)
1、填空(每空1分,共10分)
2、选择:(单选,每题2分,共30分)
3、术语解释(每题5分,共15分)
4、简答:(每题10分,共10分)
5、计算:(共2题,共35分)
复习题:
一、填空、选择题(参照复习提纲+课上强调部分)
二、术语解释:
1、文法:语言结构的定义和描述
2、句型:假定G是一个文法,S是它的开始符号,如果S
*
α,则称α是G 的一个句型
3、句子:仅含终结符的句型是一个句子
4、文法的语言:文法G所产生的句子的全体称为文法的语言
5、二义文法:若一个文法中存在某个句子,它有两个不同的最左(最右)推导,则称这
个文法是二义的
6、消除回溯:在推导时,根据面临的输入符号去找出唯一正确的候选式
7、句柄:一个句型的最左面的直接短语称为该句型的句柄
8、规范规约:在规约过程中始终对句柄进行规约而形成的序列称为规范规约
9、规范句型:由最左规约所得到的句型称为规范句型
10、前缀:字的任意首部
11、活前缀:规范句型的一个前缀
12、语法制导翻译:为每个产生式配一个翻译子程序,在语法分析过程中,当一个产生式
获得匹配或用于规约时,产生式的语义子程序就进行工作,完成既定的翻译任务。

三、简答题:
1、编译过程包括哪几个主要阶段及每个阶段的功能
编译过程分为词法分析、语法分析、中间代码生成、目标代码生成四个主要阶段。

词法分析的主要任务是从文件读入源程序,识别出每一个单词并输出单词的内部码语法分析的主要任务是根据语法规则,将词法分析器所提供的单词种别分析成各类语法范畴
中间代码生成的主要任务是按照语法分析器所识别出的语法范畴产生相应的中间代码,并建立符号表和常数表,用于登录源程序中各种名字的性质和状态
目标代码生成的主要任务是根据中间代码和表格信息,确定各类数据在内存中的位置,选择合适的指令代码,将中间代码翻译成汇编语言或机器指令
2、请简述编译执行和解释执行的过程和主要区别
编译方式和解释方式的根本区别在于:是否生成了目标代码。

在解释方式下,翻译程序事先并不对高级语言程序进行彻底翻译以得到机器代码,而是每读入一条语句,就解释其含义并执行,然后再读入下一条语句,再解释执行,即按源程序中语句的动态顺序逐句地进行分析翻译,并立即予以执行。

在编译方式下,翻译程序先对高级语言程序进行彻底翻译并生成目标代码,然后再对目标代码进行执行,即对源程序的处理是先翻译后执行
四、计算题:
1、构造正规式(a|b)* a (a|b)对应的NFA,并求出其对应的DFA(画出状态转换图)(1)构造NFA状态转换图
(2)构造转换矩阵,并重新命名
重新命名:
(3)构造DFA状态转换图
2、已知文法G:
S->AB
A->x|ε
B->y|ε
(1)求出该文法每个非终结符的first集和每个非终结符的follow集(2)判断该文法是否是LL(1)文法,若是则构造出LL(1)分析表
(1)求每个非终结符的first集
求每个非终结符的follow集
(2)判断是否是LL(1)文法
对于产生式S->AB,first(AB)={x,y,ε},follow(S)={#}
对于产生式A->x|ε:first(x)= {x}first(ε) = {ε}follow(A)={y,#} first(x)∩ first(ε)= Φ且 first(x)∩ follow(A)= Φ
对于产生式B->y|ε:first(y)= {y} first(ε) = {ε}follow(B)={#} first(y)∩ first(ε)= Φ且 first(y)∩ follow(B)= Φ
综上判断,该文法是LL(1)文法
构造LL(1)分析表如下:
3、已知文法G:
S->BB
B->aB | b
(1)构造识别活前缀的确定有限自动机(LR(0)项目集规范族)
(2)请构造该文法的SLR(1)分析表,并判断其是否是SLR(1)文法
(1)①对文法进行拓广并对产生式编号
拓广文法G’:
0 S’->S
1 S->BB
2 B->aB
3 B->b
②构造LR(0)项目集规范族
拓广文法的项目集为:
①S’->.S ②S’->S. ③S->.BB ④S->B.B ⑤S->BB. ⑥B->.aB ⑦B->a.B ⑧B->aB.
⑨B->.b ⑩B->b.
构造LR(0)项目集规范族
LR(0)项目集规范族为:
I0:{①S’->.S ,③S->.BB ,⑥B->.aB ,⑨B->.b } I1:{②S’->S.}
I2:{⑥B->.aB ,⑦B->a.B,⑨B->.b }
I3:{⑩B->b.}
I4:{④S->B.B,⑥B->.aB ,⑨B->.b }
I5:{⑧B->aB.}
I6:{⑤S->BB.}
③求非终结符的follow集
first(B)= {a,b}(此处可忽略过程直接写结果)
(2)构造该文法的SLR(1)分析表如下:
由于在分析表中不存在规约-移进的冲突,也不存在规约-规约的冲突,所以该文法是SLR(1)文法。

4、 知文法G :
S-> Sa | Sb | c | d
(1)请写出句子dbab 所对应的最左推导
(2)请消除该文法中的左递归
(1) 最左推导为:L L L L
S Sb Sab Sbab dbab ⇒⇒⇒⇒ (2) 消除左递归
S->cS ’| dS ’
S ’->aS ’| bS ’| ε
5、已知文法G :
S->SaA | A
A->AbB | B
B->cSd | e
构造句型AacAbBd 相应的语法树,并给出其短语、直接短语、句柄
(1)句型AacAbBd 对应的语法树)
(2)短语:AacAbBd、A、cAbBd、cAbBd、AbB、AbB 直接短语:A,AbB
句柄:A。

相关文档
最新文档