编译原理复习例题
编译原理课后习题答案(清华大学_张素琴)复习例题
编译原理复习例题(有些内容没有覆盖,比如优化、SLR(1)、LR(1)、LALR(1)等。
但要求至少要按照作业题的范围复习。
)一选择题1.编译的各阶段工作都涉及。
[A]词法分析[B]表格管理 [C]语法分析 [D]语义分析2.型文法也称为正规文法。
[A] 0 [B] 1 [C] 2 [D] 33.文法不是LL(1)的。
[A]递归 [B]右递归 [C]2型 [D]含有公共左因子的4.文法E→E+E|E*E|i的句子i*i+i*i有棵不同的语法树。
[A] 1 [B] 3 [C] 5 [D] 75.文法 S→aaS|abc 定义的语言是。
[A]{a2k bc|k>0} [B]{a k bc|k>0}[C]{a2k-1bc|k>0} [D]{a k a k bc|k>0}6.若B为非终结符,则 A→α.Bβ为。
[A]移进项目 [B]归约项目 [C]接受项目 [D]待约项目7.同心集合并可能会产生新的冲突。
[A]二义 [B]移进/移进 [C]移进/归约 [D]归约/归约8.代码优化时所依据的是。
[A]语法规则 [B]词法规则[C]等价变换规则 [D]语义规则9.表达式a-(-b)*c的逆波兰表示(@为单目减)为。
[A]a-b@c* [B]ab@c*- [C]ab@- [D]ab@c-*10.过程的DISPLAY表是用于存取过程的。
[A]非局部变量[B]嵌套层次 [C]返回地址 [D]入口地址二填空题1.词法分析阶段的任务式从左到右扫描字符流,从而逐个识别一个个的单词。
2.对于文法G[E]:E→T|E+T T→F|T*F F→P^F|P P→(E)|i,句型T+T*F+i的句柄是。
3.最右推导的逆过程称为规范归约,也称为最左归约。
4.符号表的每一项是由名字栏和两个栏目组成。
在目标代码生成阶段,符号表是的依据。
三判断题(认为正确的填“T”,错的填“F”)【】1.同心集的合并有可能产生“归约/归约”冲突。
编译原理复习题有答案
编译原理复习题有答案编译原理复习题及答案一、选择题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. 论述编译原理中的错误处理机制。
答案:编译原理中的错误处理机制主要包括错误检测、错误恢复和错误报告。
错误检测是指在编译过程中识别出源代码中的语法或语义错误;错误恢复是指在检测到错误后,编译器采取的措施以继续编译过程,避免因单个错误而中断整个编译;错误报告则是向程序员提供错误信息,帮助其定位和修复错误。
(完整版)编译原理复习题及答案
编译原理复习题及答案一、选择题1.一个正规语言只能对应(B)A 一个正规文法B 一个最小有限状态自动机2.文法G[A]:A→εA→aB B→Ab B→a是(A)A 正规文法B 二型文法3.下面说法正确的是(A)A 一个SLR(1)文法一定也是LALR(1)文法B 一个LR(1)文法一定也是LALR(1)文法4.一个上下文无关文法消除了左递归,提取了左公共因子后是满足LL(1)文法的(A)A 必要条件B 充分必要条件5.下面说法正确的是(B)A 一个正规式只能对应一个确定的有限状态自动机B 一个正规语言可能对应多个正规文法6.算符优先分析与规范归约相比的优点是(A)A 归约速度快B 对文法限制少7.一个LR(1)文法合并同心集后若不是LALR(1)文法(B)A 则可能存在移进/归约冲突B 则可能存在归约/归约冲突C 则可能存在移进/归约冲突和归约/归约冲突8.下面说法正确的是(A)A Lex是一个词法分析器的生成器B Yacc是一个语法分析器9.下面说法正确的是(A)A 一个正规文法也一定是二型文法B 一个二型文法也一定能有一个等价的正规文法10.编译原理是对(C)。
A、机器语言的执行B、汇编语言的翻译C、高级语言的翻译D、高级语言程序的解释执行11.(A)是一种典型的解释型语言。
A.BASIC B.C C.FORTRAN D.PASCAL12.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。
A. 编译器B. 汇编器C. 解释器D. 预处理器13.用高级语言编写的程序经编译后产生的程序叫(B)A.源程序 B.目标程序C.连接程序D.解释程序14.(C)不是编译程序的组成部分。
A.词法分析程序B.代码生成程序C.设备管理程序D.语法分析程序15.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。
A.模拟执行器B.解释器 C.表格处理和出错处理D.符号执行器16.编译程序绝大多数时间花在(D)上。
编译原理复习题
编译原理(一)一、是非题1、算符优先关系表不一定存在对应的优先函。
………………………………………()2、数组元素的地址计算与数组的存储方式有关。
……………………………()3、仅考虑一个基本块,不能确定一个赋值是否真是无用的。
…………………………()4、每个文法都能改写为LL(1)文法。
……………………………………………()5、对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。
………………()二、填空题1、从功能上说,程序语言的语句大体可分为()语句和()语句两大类。
2、扫描器的任务是从()中识别出一个个()。
3、所谓最右推导是指:()。
4、语法分析最常用的两类方法是()和()分析法。
5、一个上下文无关文法所含四个组成部分是()。
6、所谓语法制导翻译方法是()。
7、符号表中的信息栏中登记了每个名字的有关的性质,如()等等。
8、一个过程相应的DISPLA Y表的内容为()。
9、常用的两种动态存贮分配办法是()动态分配和()动态分配。
10、产生式是用于定义()的一种书写规则。
三、名词解释1、遍--2、无环路有向图(DAG)--3、语法分析--4、短语--5、后缀式--四、简述题1、考虑下面程序…………V ar a:integer;Procedure S(X);V ar X:integer;Begina:=a+1;X:=a+XEnd;Begina:=5;S(a);Print(a)End.试问:若参数传递方式分别采取传名和传值时,程序执行后输出a的值是什么?2、画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。
3、写出表达式(a+b*c)/(a+b)-d的逆波兰表示及三元式序列。
4、已知文法G(S)S→a|∧|(T)T→T,S|S写出句子((a,a),a)的规范归约过程及每一步的句柄。
5、何谓优化?按所涉及的程序范围可分为哪几级优化?6、目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?五、计算题1、写一个文法,使其语言是奇数集,且每个奇数不以0开头。
《编译原理》复习题(看完必过)
《编译原理》复习题(看完必过)一、单项选择题1.将编译程序分成若干个“遍”是为了( B )A.提高程序的执行效率B. 使程序的结构更加清晰C.利用有限的机器内存并提高机器的执行效率D.利用有限的机器内存但降低了机器的执行效率2.不可能是目标代码的是( D )A.汇编指令代码 B.可重定位指令代码C.绝对指令代码 D.中间代码3.词法分析器的输入是( B )A.单词符号串 B.源程序C.语法单位 D.目标程序4.中间代码生成时所遵循的是( C )A.语法规则 B.词法规则C.语义规则 D.等价变换规则5.编译程序是对( D )A.汇编程序的翻译 B.高级语言程序的解释执行C.机器语言的执行 D.高级语言的翻译6.词法分析应遵循( C )A.语义规则 B.语法规则C.构词规则 D.等价变换规则7.词法分析器的输出结果是( C )A.单词的种别编码 B.单词在符号表中的位置C.单词的种别编码和属性值 D.单词属性值8.正规式M1和M2等价是指( C )A.M1和M2的状态数相等 B.M1和M2的有向弧条数相等C.M1和M2所识别的语言集相等 D.M1和M2状态数和有向弧条数相等9.词法分析器作为独立的阶段使整个编译程序结构更加简洁、明确,因此,( B ) A.词法分析器应作为独立的一遍B.词法分析器作为子程序较好C.词法分析器分解为多个过程,由语法分析器选择使用.D.词法分析器并不作为一个独立的阶段10.如果L(M1)=L(M2),则M1与M2( A )A .等价B .都是二义的C .都是无二义的D .它们的状态数相等 11.文法G :S →xSx|y 所识别的语言是( C )A .xyxB .(xyx)* c .x n yx n (n ≥0) d .x *yx *12.文法G 描述的语言L(G)是指( A ) A.⎭⎬⎫⎩⎨⎧∈⇒=+*,|)(T V S G L αααB .⎭⎬⎫⎩⎨⎧⋃∈⇒=+*)(,|)(N T V V S G L ααα C .⎭⎬⎫⎩⎨⎧∈⇒=**,|)(T V S G L αααD .⎭⎬⎫⎩⎨⎧⋃∈⇒=**)(,|)(N T V V S G L ααα 13.有限状态自动机能识别( C )A .上下文无关文法B .上下文有关文法C .正规文法D .短语文法14.如果文法G 是无二义的,则它的任何句子( A ) A .最左推导和最右推导对应的语法树必定相同 B .最左推导和最右推导对应的语法树可能不同 C .最左推导和最右推导必定相同D .可能存在两个不同的最左推导,但它们对应的语法树相同 15.由文法的开始符经0步或多步推导产生的文法符号序列是( C ) A .短语 B .句柄 C .句型 D .句子 16.文法G :E →E+T|T T →T*P|P P →(E)|i则句型P+T+i 的句柄为( B )A .P+TB .PC .P+T+iD .i 17.文法G :S →b|∧|(T) T →T ∨S|S 则FIRSTVT(T)=( C )A .{ b ,∧,( }B .{ b ,∧,) }C .{ b ,∧,(,∨ }D .{ b ,∧,),∨ } 18.产生正规语言的文法为( D )A .0型B .1型C .2型D .3型19.任何算符优先文法( D )优先函数。
编译原理复习题集
《编译原理》复习题集1.名词解释短语句柄文法上下文无关文法LL(1)文法LR(1)文法语法分析无环路有向图(DAG)后缀式语法制导翻译遍局部优化词法分析语法分析语义分析源语言源程序目标语言中间语言(中间表示)2.简答题(1)编译程序和高级语言有什么区别?(2)编译程序的工作分为那几个阶段?(3)简述自下而上的分析方法。
(4)目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?(5)何谓优化?按所涉及的程序范围可分为哪几级优化?(6)简述代码优化的目的和意义。
3.叙述下面的正规式描述的语言,并画出接受该语言的最简DFA的状态转换图。
( 1 | 01 )* 0*4.Pascal语言无符号数的正规定义如下:num→digit+ (.digit+)? (E(+|-)? digit+)?其中digit表示数字,用状态转换图表示接受无符号数的确定有限自动机。
5.画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。
6.用状态转换图表示接收(a|b)*aa的确定的有限自动机。
7.处于/* 和 */之间的串构成注解,注解中间没有*/。
画出接受这种注解的DFA的状态转换图。
8.某操作系统下合法的文件名为device:name.extension其中第一部分(device:)和第三部分(.extension)可缺省,device, name和extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限自动机。
9.构造一个DFA,它接受∑={0, 1}上0和1的个数都是偶数的字符串。
10.设有非确定的有自限动机 NFA M=({A,B,C},{0,1},δ,{A},{C}),其中:δ(A,0)={C} δ (A,1)={A,B} δ (B,1)={C} δ (C,1)={C}。
请画出状态转换距阵和状态转换图。
11.设L⊆ {a,b,c}* 是满足下述条件的符号串构成的语言:(1)若出现a ,则其后至少紧跟两个c ;(2)若出现b ,其后至少紧跟一个c 。
编译原理复习习题 (修复的)
一、单项选择题1、将编译程序分成若干个“遍”是为了______。
a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率答案:b2、构造编译程序应掌握______。
a.源程序b.目标语言c.编译方法d.以上三项都是答案:d3、编译程序绝大多数时间花在______上。
a.出错处理b.词法分析c.目标代码生成d.管理表格答案:d4、______不可能是目标代码。
a.汇编指令代码b.可重定位指令代码c.绝对指令代码d.中间代码答案:d(可重定位指令代码就是可装配代码,绝对指令代码就是exe文件)5、使用______可以定义一个程序的意义。
a.语义规则b.词法规则c.产生规则d.语法规则答案:a6、词法分析器的输入是______。
a.单词符号串b.源程序c.语法单位d.目标程序答案:b(源程序—【词法分析】—单词符号串—【语法分析】—语法单位—【语义分析】—目标程序)7、中间代码生成时所遵循的是______。
a.语法规则b.词法规则c.语义规则d.等价变换规则8、编译程序是对______。
a.汇编程序的翻译b.高级语言程序的解释执行c.机器语言的执行d.高级语言的翻译答案:d9、语法分析应遵循______。
a.语义规则b.语法规则c.构词规则d.等价变换规则答案:b二、多项选择题1、编译程序各个阶段的工作都涉及到______。
a.语法分析b.表格管理c.出错处理d.语义分析e.词法分析答案:b、c2、编译程序工作时,通常有______阶段。
a.词法分析b.语法分析c.中间代码生成d.语义检查e.目标代码生成答案:a、b、c、e三、填空题1、解释程序和编译程序的区别在于______。
答案:是否生成目标代码(解释程序没有目标代码,编译程序有目标代码)2、编译过程通常可分为5个阶段,分别是______、语法分析、______、代码优化和目标代码生成。
编译原理考试试题
编译原理考试试题
1. 简答题
(1)什么是编译原理?
(2)解释词法分析和语法分析的区别。
(3)描述语法制导翻译的过程。
(4)什么是上下文无关文法?
(5)解释LL和LR分析器之间的差异。
2. 分析题
对于以下文法G:
S → aB | bA
A → a | ε
B → b
进行如下操作:
(1)用LL(1)分析器分析串“ab”。
(2)用LR(1)分析器分析串“ba”。
3. 论述题
请分析编译器的工作原理并解释编译器的主要功能。
同时比较解释型语言和编译型语言之间的区别。
4. 计算题
对于文法G:
E → E + T | T
T → T * F | F
F → (E) | id
请根据该文法构建一个SLR(1)分析表并分析串“id + id * id”。
5. 应用题
假设您需要编写一个简单的编译器来编译一种自定义的编程语言。
请设计该编程语言的词法规则和语法规则,并解释如何构建一个简单的编译器来将该语言转换为目标代码。
以上为编译原理考试试题,希望能够帮助您对编译原理的相关知识有更全面的了解。
祝您考试顺利!。
编译原理总结复习题包括答案.doc
.....二、概念题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)三、词法分析题给出下面语言的相应文法n n m m≥L1={a b a b |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≥ 1n,为奇数,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.对于文法G[S]S →(L)S→aSS→aL →L,SL→S(1) 画出句型(S,(a)) 的语法树;(2) 写出上述句型的所有短语、直接短语、句柄和素短语。
解答这类题目重点考查语法树、推导、短语、直接短语、句柄和素短语等基本概念。
在句型中寻找短语、直接短语、句柄的方法:(1) 画出句型对应的语法树。
句型(S,(a)) 的语法树如下图所示(2) 在该语法树中寻找短语、直接短语、句柄。
首先我们看短语的定义:令G是一个文法,S是文法的开始符,假设α,β,δ是文法G的句型,如果有S*⇒αAδ且 A +⇒β则称β是句型αβδ相对于非终结符A的短语。
如果有A⇒β,则称β是句型αβδ相对于规则A→β的直接短语。
一个句型的最左直接短语称为该句型的句柄。
根据短语的定义可知,以非终结符A为根的子树的叶结点从左到右排列就是相对于非终结符A的短语;如果子树只有两代,则短语就是直接短语;最左边的两代子树的所有叶结点从左到右排列,就是该句型的句柄。
素短语是一个短语,它至少包含一个终结符,且除自身外不再包含其他素短语。
处于句型最左边的素短语为最左素短语。
从语法树中我们可以找到:短语:a,S,(a),S, (a),(S, (a))直接短语:a,S句柄:S素短语:a2. 写一个上下文无关文法,使其语言能被5整除且不以0开头的无符号整数集合(如{5,10,15}) 解答能被5整除的数从形式上看,是以0,5结尾的数字串。
题目要求不以0开头,注意0不是该语言的句子。
句子的结构分为三种:其中,A 代表可以出现在个位上的数字,只能是0或5;B 代表可以出现在开始位上的数字,除了0以外,其他数字都可以;C 代表可以出现在中间位上的数字。
0-9所有数字都可以。
于是,A →0 | 5B →1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9C →0 | B写文法时,先描述一位数结构,于是有产生式S →5。
对于两位数和多位数,都是以B 开头和以A 结尾,于是有产生式S →DA 。
编译原理试题及答案
编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 将高级语言代码翻译成机器语言代码B. 进行程序调试C. 进行代码优化D. 管理程序运行时的内存分配答案:A2. 词法分析器的主要任务是什么?A. 将源代码分解成多个语句B. 将源代码分解成多个词素C. 检查源代码的语法正确性D. 将词素转换为相应的语法单位答案:B3. 下列哪个是自顶向下的语法分析方法?A. LL(1)分析法B. LR(1)分析法C. LALR(1)分析法D. GLR分析法答案:A4. 语义分析的主要任务是什么?A. 检查程序的语法正确性B. 检查程序的类型正确性C. 将源代码转换为目标代码D. 进行程序的优化答案:B5. 代码生成阶段的主要任务是什么?A. 将语法树转换为目标代码B. 进行程序的优化C. 检查程序的类型正确性D. 将源代码分解成多个词素答案:A二、简答题1. 简述编译过程的主要阶段。
答案:编译过程主要分为四个阶段:词法分析、语法分析、语义分析和代码生成。
词法分析将源代码分解成词素,语法分析检查源代码的语法结构,语义分析检查源代码的语义正确性,代码生成将源代码转换为目标代码。
2. 什么是中间代码?它在编译过程中起到什么作用?答案:中间代码是一种介于源代码和目标代码之间的代码形式,它通常具有更接近于机器语言的特性,但仍然保持一定的抽象级别。
中间代码在编译过程中起到桥梁的作用,它使得代码优化和目标代码生成更加方便和高效。
三、论述题1. 论述编译器优化的几种常见方法。
答案:编译器优化主要包括以下几种方法:常量折叠、死代码消除、公共子表达式消除、循环优化、代码内联、寄存器分配等。
这些优化方法可以提高程序的执行效率,减少资源消耗,提高程序的运行速度。
结束语:本试题涵盖了编译原理的基本知识点,包括编译器的功能、编译过程的主要阶段、中间代码的作用以及编译器优化的方法。
希望考生能够通过本试题加深对编译原理的理解和掌握。
完整版编译原理复习题及答案
A必要条件B充分必要条件
下面说法正确的是( A )
A一个正规文法也一定是二型文法
B一个二型文法也一定能有一个等价的正规文法 编译原理是对(C)。
A、机器语言的执行B、汇编语言的翻译
D、咼级语言程序的解释执行
(A)是一种典型的解释型语言。
A.线性表B.树
词法分析器的输出结果是(D)。
A、单词自身值
C、单词的种别编码 词法分析器不能(D)
A.识别出数值常量
C.扫描源程序并识别记号
C.完全图D.堆栈
B、单词在符号表中的位置
D、单词的种别编码和自身值
B.过滤源程序中的注释
D.发现括号不匹配
文法:G:StxSx|y所识别的语言是(D)。
A、xyxB、(xyx)*
A.状态数相等
C.所识别的语言相等
若状态k含有项目“ 归约的语法分析方法是
LR分析法
源程序
(C)。
Af a
(D)。
B.LR(0)分析法
a•为(B)项目。
B.移进
_宀曰 一定是
但不能用正则表达式表示。
无法判定是否存在
C. a0b0a
D. cba
(D)
D. bc10
C.非终结符集
(A)
C.二义性的
A.BASICB.C
把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。
A.编译器
B.汇编器
C.解释器
D.
预处理器
用高级语言编写的程序经编译后产生的程序叫
(B)
A•源程序
B.目标程序
C.连接程序
编译原理-复习题-答案
一、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论) ACDBB BCCBD CCBBB ACBDCDACAB BADDC二、填空题(每空2分)1.表格处理、出错处理2.编译程序3.是否生成目标代码4.源程序、目标程序5.语法成分6.自上而下、自下而上7.句子8.左9.开始符号、直接推导、句子、匹配10.直接归约、开始符号11.传地址12.语法13.句柄14.语义规则15.词法分析、语法分析、中间代码生成、16.执行性、说明性17.源程序、单词符号18.语法范畴三、简答题1. 写一文法,使其语言是偶正整数的集合,要求:(1)允许0打头;(2)不允许0打头。
答案:(1)G[S]=({S,P,D,N},{0,1,2,…,9},P,S)P:S->PD|DP->NP|ND->0|2|4|6|8N->0|1|2|3|4|5|6|7|8|9(2)G[S]=({S,P,R,D,N,Q },{0,1,2,…,9},P,S)P:S->PD|P0|DP->NR|NR->QR|QD->2|4|6|8N->1|2|3|4|5|6|7|8|9Q->0|1|2|3|4|5|6|7|8|92. 已知文法 G[E] 为:E→T|E+T|E-TT→F|T*F|T/FF→ ( E ) |i①该文法的开始符号(识别符号)是什么?②请给出该文法的终结符号集合 VT 和非终结符号集合 VN 。
③找出句型 T+T*F+i 的所有短语、简单短语和句柄。
答案:①该文法的开始符号(识别符号)是E。
②该文法的终结符号集合VT={+、-、*、/、(、)、i}。
非终结符号集合VN={E、T、F}。
③句型T+T*F+I的短语为i、T*F、第一个T、T+T*F+i; 简单短语为i、T*F、第一个T;句柄为第一个T。
3. 构造正规式相应的 NFA : 1(0|1)*101答案:1(0|1)*101对应的NFA为4. 写出表达式(a+b*c)/(a+b)-d的逆波兰表示和三元式序列。
编译原理复习题
FIRST(S')={+,ε } FOLLOW(S')={#}
FIRST(F)={*}
FOLLoW(F)=(+,#}
FIRST(F')={*,ε} FOLLOW(+,#}
18. 试为表达式 w+(a+b)*(c+d/(e-10)+8) 写出相应的逆波兰表示。
解: w a b + c d e 10 - / + 8 + * +
17.语法分析最常用的两类方法是__自上而下___和__自下而上___分析法。
18.计算机执行用高级语言编写的程序主要有两种途径:___解释__和__编译___。
19.扫描器是__词法分析器___,它接受输入的__源程序___,对源程序进行___词法分析__并识别出一个个单词
符号,其输出结果是单词符号,供语法分析器使用。
A.LALR 文法 B.LR(0)文法
C.LR(1)文法
D.SLR(1)文法
三、填空题
2.编译方式与解释方式的根本区别在于__是否生成目标代码___。
4.设 G 是一个给定的文法,S 是文法的开始符号,如果 S->x( 其中 x∈VT*), 则称 x 是文法的一个__句子___。
5.自顶向下的语法分析方法的基本思想是:从文法的__开始符号____开始,根据给定的输入串并按照文法的产
28.一个算符优先文法可能不存在算符优先函数与之对应。
29.语法分析时不用消除文法中的左递归 。
30.LR 分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
34.两个正规集相等的必要条件是他们对应的正规式等价。
正规式等价=》正规集相等
软考-编译原理复习习题一及答案
编译原理一、选择1.一个正规语言只能对应()?A 一个正规文法;B 一个最小有限状态自动机;2.文法G[A]:A→ε A→aB B→Ab B→a是( ):A 正规文法B 二型文法3.下面说法正确的是( ):A 一个SLR(1)文法一定也是LALR(1)文法B 一个LR(1)文法一定也是LALR(1)文法4.一个上下文无关文法消除了左递归,提取了左公共因子后是满足LL(1)文法的( ):A 必要条件B 充分必要条件二、多项选择1.PL/0语言的目标程序解释执行时用到的数据对象有( ):A 目标代码CODEB 符号表TABLEC 数据栈SD 关键字表WORD2.PL/0语言编译时产生或使用的数据对象有( ):A 目标代码CODEB 符号表TABLEC 数据栈SD 关键字表WORD三、问答题问答第1题(5分)将文法G[S] 改写为等价的G′[S],使G′[S]不含左递归和左公共因子。
G[S]:S→bSAe | bAA→Ab | d问答第2题(10分) 判断下面文法是否为LL(1)文法,若是,请构造相应的LL(1)分析表。
S→aHH→aMd | dM→Ab | εA→aM | e问答第3题给出与正规式R=(ab)*(a|b*)ba等价的NFA。
问答第4题将下图的NFA确定化为DFA。
问答第5题(7分)(1)给出下列PL/0示意程序中当程序执行到X过程调用Z过程后(即执行Z过程体时)的栈式存储分配布局和用Display显示表时Z过程最新活动记录的内容。
(2)说明Display表和DL(老SP),RA,TOP及全局Display的作用。
PL/0示意程序为:const a=80;var b,c;procedure X;var d;procedure Z;var e,g;begin (* Z *)c:=b*a;end ;(* Z *)begin (* X *)call Z;end ;(* X *)procedure Y;var f;begin (* Y *)call X;end ;(* y *)begin (* main *)call Y;end. (* main *)问答第6题(5分)给出问答第5题PL/0示意程序编译到Y过程体时TABLE表的内容。
编译原理期末复习题
3.2是非判断,对下面的陈述,正确的在陈述后的括号内写T,否则写F。
(1)有穷自动机接受的语言是正则语言。
()(2)若r1和r2是Σ上的正规式,则r1|r2也是。
()(3)设M是一个NFA,并且L(M)={x,y,z},则M的状态数至少为4个。
()(4)令Σ={a,b},则Σ上所有以b为首的字构成的正规集的正规式为b*(a|b)*。
()(5)对任何一个NFA M,都存在一个DFA M',使得L(M')=L(M)。
()(6)对一个右线性文法G,必存在一个左线性文法G',使得L(G)=L(G'),反之亦然。
()答案(1)T (2)T (3)F(4)F (5)T (6) T3.3描述下列各正规表达式所表示的语言。
(1)0(0|1)*0(2)((ε|0)1*)*(3)(0|1)*0(0|1)(0|1)(4)0*10*10*10*(5)(00|11)*((01|10)(00|11)*(01|10)(00|11)*)*答案(1)以0开头并且以0结尾的,由0和1组成的符号串。
(2){α|α∈{0,1}*}(3)由0和1组成的符号串,且从右边开始数第3位为0。
(4)含3个1的由0和1组成的符号串。
{α|α∈{0,1}+,且α中含有3个1 }(5){α|α∈{0,1}*,α中0和1为偶数}3.4对于下列语言分别写出它们的正规表达式。
(1)英文字母组成的所有符号串,要求符号串中顺序包含五个元音。
(2)英文字母组成的所有符号串,要求符号串中的字母依照词典顺序排列。
(3)Σ={0,1}上的含偶数个1的所有串。
(4)Σ={0,1}上的含奇数个1的所有串。
(5)具有偶数个0和奇数个1的有0和1组成的符号串的全体。
(6)不包含子串011的由0和1组成的符号串的全体。
(7)由0和1组成的符号串,把它看成二进制数,能被3整除的符号串的全体。
答案(1)令Letter表示除这五个元音外的其它字母。
((letter)*A(letter)*E(letter)*I(letter)*O(letter)*U(letter))*(2)A*B*....Z*(3)(0|10*1)*(4)(0|10*1)*1(5)[分析]设S是符合要求的串,|S|=2k+1 (k≥0)。
编译原理试题及答案(期末复习版)
<编译原理>历年试题及答案一.(每项选择2分,共20分)选择题1.将编译程序分成若干个“遍”是为了_b__。
a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率2.构造编译程序应掌握__d__。
a.源程序b.目标语言c.编译方法d.以上三项都是3.变量应当c_。
a.持有左值b.持有右值c.既持有左值又持有右值d.既不持有左值也不持有右值4.编译程序绝大多数时间花在_d___上。
a.出错处理b.词法分析c.目标代码生成d.管理表格5.词法分析器的输出结果是_c___。
a.单词的种别编码b.单词在符号表中的位置c.单词的种别编码和自身值d.单词自身值6.正规式MI和M2等价是指__c__。
a.MI和M2的状态数相等b.Ml和M2的有向弧条数相等。
C.M1和M2所识别的语言集相等 d.Ml和M2状态数和有向弧条数相等7.中间代码生成时所依据的是—c。
a.语法规则b.词法规则c.语义规则d.等价变换规则8.后缀式ab+cd+/可用表达式__b_来表示。
a.a+b/c+d b.(a+b)/(c+d)c.a+b/(c+d)d.a+b+c/d9.程序所需的数据空间在程序运行前就可确定,称为____c__管理技术。
a.动态存储b.栈式存储c.静态存储d.堆式存储10.堆式动态分配申请和释放存储空间遵守___d_____原则。
a.先请先放b.先请后放c.后请先放d.任意二(每小题10分,共80分)简答题1.画出编译程序的总体结构图,简述各部分的主要功能。
2.已知文法G[E]:E→ET+|T T→TF*|F F→F^|a试证:FF^^*是文法的句型,指出该句型的短语、简单短语和句柄.3.为正规式(a|b)*a(a|b)构造一个确定的有限自动机。
4.设文法G(S):S→(L)|a S|aL→L,S|S(1)消除左递归和回溯;(2)计算每个非终结符的FIRST和FOLLOW;(3)构造预测分析表。
编译原理典型例题
编译原理典型案例1.对于文法G[S]S →(L)S→aSS→aL →L,SL→S(1) 画出句型(S,(a)) 的语法树;(2) 写出上述句型的所有短语、直接短语、句柄和素短语。
解答这类题目重点考查语法树、推导、短语、直接短语、句柄和素短语等基本概念。
在句型中寻找短语、直接短语、句柄的方法:(1) 画出句型对应的语法树。
句型(S,(a)) 的语法树如下图所示(2) 在该语法树中寻找短语、直接短语、句柄。
首先我们看短语的定义:令G是一个文法,S是文法的开始符,假设α,β,δ是文法G的句型,如果有S*⇒αAδ且 A +⇒β则称β是句型αβδ相对于非终结符A的短语。
如果有A⇒β,则称β是句型αβδ相对于规则A→β的直接短语。
一个句型的最左直接短语称为该句型的句柄。
根据短语的定义可知,以非终结符A为根的子树的叶结点从左到右排列就是相对于非终结符A的短语;如果子树只有两代,则短语就是直接短语;最左边的两代子树的所有叶结点从左到右排列,就是该句型的句柄。
素短语是一个短语,它至少包含一个终结符,且除自身外不再包含其他素短语。
处于句型最左边的素短语为最左素短语。
从语法树中我们可以找到:短语:a,S,(a),S, (a),(S, (a))直接短语:a,S句柄:S素短语:a2. 写一个上下文无关文法,使其语言能被5整除且不以0开头的无符号整数集合(如{5,10,15}) 解答能被5整除的数从形式上看,是以0,5结尾的数字串。
题目要求不以0开头,注意0不是该语言的句子。
句子的结构分为三种:其中,A 代表可以出现在个位上的数字,只能是0或5;B 代表可以出现在开始位上的数字,除了0以外,其他数字都可以;C 代表可以出现在中间位上的数字。
0-9所有数字都可以。
于是,A →0 | 5B →1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9C →0 | B写文法时,先描述一位数结构,于是有产生式S →5。
对于两位数和多位数,都是以B 开头和以A 结尾,于是有产生式S →DA 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理复习例题(有些内容没有覆盖,比如优化、SLR(1)、LR(1)、LALR(1)等。
但要求至少要按照作业题的范围复习。
)
一选择题
1.编译的各阶段工作都涉及。
[A]词法分析[B]表格管理 [C]语法分析 [D]语义分析
2.型文法也称为正规文法。
[A] 0 [B] 1 [C] 2 [D] 3
3.文法不是LL(1)的。
[A]递归 [B]右递归 [C]2型 [D]含有公共左因子的
4.文法E→E+E|E*E|i的句子i*i+i*i有棵不同的语
法树。
[A] 1 [B] 3 [C] 5 [D] 7
5.文法 S→aaS|abc 定义的语言是。
[A]{a2k bc|k>0} [B]{a k bc|k>0}
[C]{a2k-1bc|k>0} [D]{a k a k bc|k>0}
6.若B为非终结符,则 A→.B为。
[A]移进项目 [B]归约项目 [C]接受项目 [D]待约项目
7.同心集合并可能会产生新的冲突。
[A]二义 [B]移进/移进 [C]移进/归约 [D]归约/归约
8.代码优化时所依据的是。
[A]语法规则 [B]词法规则
[C]等价变换规则 [D]语义规则
9.表达式a-(-b)*c的逆波兰表示(@为单目减)为。
[A]a-b@c* [B]ab@c*- [C]ab@- [D]ab@c-*
10.过程的DISPLAY表是用于存取过程的。
[A]非局部变量[B]嵌套层次 [C]返回地址 [D]入口地址
二填空题
1.词法分析阶段的任务式从左到右扫描字符流,从而逐个识别一个个的单词。
2.对于文法G[E]:E→T|E+T T→F|T*F F→P^F|P P→(E)|i,句型T+T*F+i的句柄是。
3.最右推导的逆过程称为规范归约,也称为最左归约。
4.符号表的每一项是由名字栏和两个栏目组成。
在目标代码生成阶段,符号表是的依据。
三判断题(认为正确的填“T”,错的填“F”)
【】1.同心集的合并有可能产生“归约/归约”冲突。
【】2.一个文法所有句子的集合构成该文法定义的语言。
【】3.非终结符可以有综合属性,但不能有继承属性。
【】4.逆波兰表示法表示表达式时无需使用括号。
【】5.一个有穷自动机有且只有一个终态。
【】6.若过程p第k次被调用,则p的DISPLAY表中就有k+1个元素。
四解答题
1.给定文法G和句型(T+F)*i+T,
G: E→E+T|T T→T*F|F F→(E)|i
(1)画出句型的语法树;
(2)写出句型的全部短语、简单短语和句柄。
解:(略)
2.设有文法G:S→S+S|S*S|i|(S)。
(1)对于输入串i+i*i 给出一个最左推导;
(2)该文法是否是二义性文法?请证明你的结论。
解:(1)i+i*i的最左推导:
S => S+S => i+S => i+S*S => i+i*S => i+i*i (2)该文法是二义性的。
因为对于句子i+i*i可以画出两棵语法树(语法树略)。
3.给出语言{a m b m c n|m≥1,n≥0}的上下文无关文法(2型)。
解:G: S→AB|A
A→a Ab|ab
B→cB|c
4.给出语言{a k b m c n|k,m,n≥1}的正规文法(3型)。
解: G: A→aA|aB
B→bB|bC
C→cC|c
5.将文法G改写成等价的正规文法(3型)。
G: S→dAB
A→aA|a
B→bB|b
解: G: S→dA
A→aA|aB
B→bB|b
6.构造一文法产生任意长的a,b串,使得
|a|≤|b|≤2|a|
其中,“|a|”和“|b|”分别表示串中的字符a和b的个数。
解:b的个数在a的个数和其2倍之间,串的结构形如aSBS和BSaS,其中B为1或2个b。
故得文法
G: S→aSBS|BSaS|ε
B→b|bb
7.设有字母表{a,b}上的正规式R=(ab|a)*。
(1)构造R的相应有限自动机;
解:
(2)构造R的相应确定有限自动机;
(3)构造R 的相应最小确定有限自动机;
解:对(2)得到的DFA 化简,合并状态0和2 为状态2:
(4)构造与R 等价的正规文法
解:令状态1和2分别对应非终结符B 和A
G: A →aB|a|ε
B →aB|bA|a|b|ε 可化简为: G: A →aB|ε B →aB|bA|ε
8.写出如图所示的自动机描述的语言的正规式
解:abb*|abb*aa*b|aaa*b
9.写出在{a,b}上,不以a 开头,但以aa 结尾的字符串集合的正规式(并构造与之等价的最简DFA )。
解:依题意,“不以a 开头”,则必以b 开头,又要“以aa
结尾”,
故正规式为:b(a|b)*aa
(构造与之等价的最简DFA ,此略)
10
.写一个LL(1)文法G ,使其语言是
+
L(G)={ a m b n c2n | m>=0,n>0 }
并证明文法是LL(1)。
解:文法G(S):S → aS | E
E →bE’
E’→ Ecc | cc
Select(S → aS)∩Select (S →E)= Ф
Select(E’→ Ecc)∩Select (E’→cc) =Ф
故文法为LL(1)的
11.将文法G改写成等价的LL(1)文法,并构造预测分析表。
G:S→S*a T|aT|*aT
T→+a T|+a
(编写递归下降子程序)
解:消除左递归后的文法G’: S→aTS’|*aTS’
S’→*aTS’|ε
T→+aT|+a
提取左公因子得文法G’’:S→aTS’|*aTS’
S’→*aTS’|ε
T→+aT’
T’→T|ε
Select(S→aTS’)={a}
Select(S→*aTS’)={*}
Select(S→aTS’)∩Select(S→*aTS’)=Ф
Select(S’→*aTS’)={*}
Select(S’→ε)=Follow(s’)={#}
Select(S’→*aTS’)∩Select(S’→ε)= Ф
Select(T→+aT’)={+}
Select(T’→T)=First(T) ={+}
Select(T’→ε)=Follow(T’)={*,#}
Select(T’→T)∩Select(T’→ε)= Ф
所以该文法是LL(1)文法。
(递归下降子程序,略)
12.对文法G[S]: S → aSb | P
P → bPc | bQc
Q → Qa | a
构造简单优先关系表。
该文法是否是简单优先文法?
由于矩阵中有元素存在多种优先关系,故不是简单优先文法。
13.考虑文法 G: S→AS|b
A→SA|a
(1)构造文法的可归前缀图(活前缀的DFA);
(2)判断文法是否是LR(0)文法,并说明理由。
解:(1)可归前缀图
(2)因为存在冲突,所以不是LR(0)文法。
14.文法G及其LR分析表如下,请给出对串dada#的分析过程。
G: S → VdB ①
V → e ②
V →ε③
B → a ④
B → Bda ⑤
B →ε⑥
解:对输入串dada#的分析过程
15.对传值、传地址和传名3种参数传递方法分别写出下列程序的输出:
void p(int x, int y, int z) {
y *= 3;
z += x;
}
void main() {
int a=5, b=2;
p(a*b,a,a);
printf(“%d\n”, a);
}
这些参数传递机制如何实现?
解:(1)传值 5;(2)传地址 25;(3)传名 45 (参数传递机制,略)
16.将下面程序划分为基本块,并画出其程序流图。
b := 1
b := 2
if w <= x goto L2
e := b
goto L2
L1:goto L3
L2:c := 3
b := 4
c := 6
L3:if y <= z goto L4
halt
L4:g := g + 1
h := 8
goto L1
解:(1)基本块:(2)程序流图
b := 1
b := 2
if w <= x goto L2 (1)
e := b
goto L2 (2)
L1: goto L3 (3)
L2: c := 3
b := 4
c := 6 (4)
L3: if y <= z goto L4 (5)
halt (6)
L4: g := g + 1
h := 8
goto L1 (7)。