广工编译原理复习例题(有客观题的答案
广工编译原理真题
内容加上
。
的DISPLAY表的
三 有穷自动机M接受字母表={0,1}上所有满足下述条件的串:每个1 都有0直接跟在右边。构造一个最小的DFA M及和M等价的正规式。
四 证明正规式(ab)*a 与正规式a(ba)*等价 (用构造他们的最小的 DFA方法)。
五 写一个文法,使其语言是:
L = { 1n0m1m0n | m,n≥0 }
试构造它的LR(1)项目集、可归前缀图和LR(1)分析表。 八 已知源程序如下:
prod:=0; i:=1; while i≤20 do
begin prod:=prod+a[i]*b[i]; i:=i+1
end; 试按语法制导翻译法将源程序翻译成四元式序列(设A是数组a的起始地 址,B是数组b的起始地址;机器按字节编址,每个数组元素占四个字 节)。
编译原理
一 选择题
【 】1.____型文法也称为正规文法。
[A] 0
[B] 1
[C] 2
[D] 3
【 】2.____文法不是LL(1)的。
[A] 递归
[B] 右递归
[C] 2型 [D] 含有公共
左因子的
【 】3. 文法E→E+E|E*E|i的句子i*i+i*i的不同语法分析树的
总数为______。
六 对文法G[S] S → aSb | P P → bPc | bQc Q → Qa | a (1) 它是否是算符优先文法?请构造算符优先关系表
(2) 文法G[S]消除左递归、提取左公因子后是否是 LL(1)文法?请证实。
七 已知文法G为: (0) S′→ S (1) S → aAd (2) S → bAc (3) S → aec (4) S → bed (5) A → e
编译原理样题1(有答案)
编译原理一、是非题(下列各题你认为正确的,请在题干的括号内打“√”,错的打“×”。
每题1分,共5分)l、一个LL( l)文法一定是无二义的。
…………………………………………… ( )2、逆波兰法表示的表达式亦称前缀式。
……………………………………………()3、目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
……………()4、正规文法产生的语言都可以用上下文无关文法来描述。
………………………()5、一张转换图只包含有限个状态,其中有一个被认为是初态,最多只有一个终态。
……………………………………………………………………………………()二、填空题(每题2分,共5分)1、语法分析是依据语言的( )规则进行的,中间代码产生是依据语言的( )规进行的。
2、程序语言的单词符号一般可以分为( )等等。
3、语法分析器的输入是( ),其输出是( )。
4、所谓自上而下分析法是指( )。
5、如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是( )。
6、对于文法G,仅含终结符号的句型称为( )。
7、逆波兰式ab十c+d*e—所表达的表达式为( )。
8、一个名字的属性包括( )和( )。
9、对于数据空间的存贮分配,FORTRAN采用( )策略,PASCAL采用( )策略。
10、所谓优化是指( )。
三、名词解释题(每题2分,共10分)l、词法分析器:2、语法:3、最右推导:4、语法制导翻译:5、基本块:四、简述题(每题4分,共24分)l、考虑下面的程序:…………Var i:integer;a:array[1··2] of integer;prncedure Q( b);Var b:integer;Begini:=1;b:=b十2;i:=2;b:=b+3End;Begina[1]:=5;a[2]:=6;i:=1;Q(a[i]);print(a[l],a[2])End.试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出a[l],a[2]的值是什么?2、画出识别pascal中实常数(可带正负号,但不含指数部分)的状态转换图。
编译原理复习题有答案
编译原理复习题有答案编译原理复习题及答案一、选择题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. 论述编译原理中的错误处理机制。
答案:编译原理中的错误处理机制主要包括错误检测、错误恢复和错误报告。
错误检测是指在编译过程中识别出源代码中的语法或语义错误;错误恢复是指在检测到错误后,编译器采取的措施以继续编译过程,避免因单个错误而中断整个编译;错误报告则是向程序员提供错误信息,帮助其定位和修复错误。
编译原理习题及答案
( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 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.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
广工编译原理复习例题
编译原理复习例题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|AA→a Ab|abB→cB|c4.给出语言{a k b m c n|k,m,n≥1}的正规文法(3型)。
解: G: A→aA|aBB→bB|bCC→cC|c5.将文法G改写成等价的正规文法(3型)。
G: S→dABA→aA|aB→bB|b解: G: S→dAA→aA|aBB→bB|b6.构造一文法产生任意长的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|εa+aB→aB|bA|ε8.写出如图所示的自动机描述的语言的正规式解:abb*|abb*aa*b|aaa*b9.写出在{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)。
广工编译原理(精选题集+必考大题
《编译原理》期末试题(二)1、描述由正规式b*(abb*)*(a| ε)定义的语言,并画出接受该语言的最简DFA。
2、证明文法E → E + id | id是SLR(1)文法。
3、下面是表达式和赋值语句的文法,其中and的类型是bool ⨯ bool → bool,+的类型是int ⨯ int → int,=的类型是int ⨯ int → bool,:= 要求id和E的类型都是int或者都是bool。
为该文法写一个语法制导定义或翻译方案,它完成类型检查。
S →id := EE → E and E | E + E | E = E |id6、描述由正规式b*a(bb*a)*b*定义的语言,并画出接受该语言的最简DFA。
7、下面的文法产生代表正二进制数的0和1的串集:B → B 0 | B 1 | 1下面的翻译方案计算这种正二进制数的十进制值:B →B1 0 {B.va l := B1.val⨯ 2 }| B1 1 {B.val := B1.val⨯ 2 +1}| 1 {B.val := 1 }请消除该基础文法的左递归,再重写一个翻译方案,它仍然计算这种正二进制数的十进制值。
编译原理试卷二答案1、由正规式b*(abb*)*(a| ε)定义的语言是字母表{a, b}上不含子串aa的所有串的集合。
最简DFA如下:2、先给出接受该文法活前缀的DFA如下:I0和I3都只有移进项目,肯定不会引起冲突;I2和I4都无移进项目并仅含一个归约项目,也肯定不会引起冲突;在I1中,E'的后继符号只有$,同第2个项目的展望符号“+”不一样,因此I1也肯定不会引起冲突。
由此可以断定该文法是SLR(1)的。
3、语法制导定义如下。
S →id := E { S.type := if (id.type = bool and E.type = bool) or (id.type = int and E.type = int)then type_ok else type_error }E → E1and E2 { E.type := if E1.type = bool and E2.type = bool then bool elsetype_error }E → E1 + E2 { E.type := if E1.type = int and E2.type = int then int else type_error }E → E1 = E2{ E.type := if E1.type = int and E2.type = int then bool else type_error }E →id { E.type := lookup(id.entry) }6、正规式b*a(bb*a)*b*体现的特点是,每个a的左边都有若干b,除非a是第一个字母。
广工编译原理复习例题(有客观题的答案
编译原理复习例题一选择题1.编译的各阶段工作都涉及 B 。
[A]词法分析 [B]表格管理 [C]语法分析 [D]语义分析2. D 型文法也称为正规文法。
[A] 0 [B] 1 [C] 2 [D] 33. D 文法不是LL(1)的。
[A]递归 [B]右递归 [C]2型 [D]含有公共左因子的4.文法E→E+E|E*E|i的句子i*i+i*i有 C 棵不同的语法树。
[A] 1 [B] 3 [C] 5 [D] 75.文法 S→aaS|abc 定义的语言是 C 。
[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β为 D 。
[A]移进项目 [B]归约项目 [C]接受项目 [D]待约项目7.同心集合并可能会产生新的 D 冲突。
[A]二义 [B]移进/移进 [C]移进/归约 [D]归约/归约8.代码优化时所依据的是 C 。
[A]语法规则 [B]词法规则[C]等价变换规则 [D]语义规则9.表达式a-(-b)*c的逆波兰表示(@为单目减)为 B 。
[A]a-b@c* [B]ab@c*- [C]ab@- [D]ab@c-*10.过程的DISPLAY表是用于存取过程的 B 。
[A]非局部变量 [B]嵌套层次 [C]返回地址 [D]入口地址11. 已知右图所示自动机M,请问下列哪个字符串不是M[A] bbaa [B] abba [C] abab [D] aabb12.若状态k含有项目“A→α.”,且仅当输入符号a∈FOLLOW(A)时,才用规则“A→α”归约的语法分析方法是 D 。
[A] LALR分析法 [B] LR(0)分析法[C] LR(1)分析法[D] SLR(1)分析法13.有一语法制导翻译如下所示:(第8章)S->bAb {print “1” }A->(B {print “2” }A->a {print “3” }B->Aa) {print “4” }若输入序列为b(((aa)a)a)b,则采用自下而上的分析方法,则输出是 B 。
编译原理试题及答案
编译原理试题及答案
试题:
1. 解释编译原理的定义,同时给出编译器的作用。
2. 简要描述编译过程中的四个基本步骤。
3. 解释词法分析器的功能和作用。
4. 解释语法分析器的功能和作用。
答案:
1. 编译原理是研究如何将高级语言程序转化为等价机器语言程序的一门学科。
编译器是将高级语言文本转换成等价的机器语言的软件工具。
它负责将源代码转化为目标代码,以便计算机能够理解和执行。
2. (1) 词法分析:将源代码分解成一系列单词或标记。
(2) 语法分析:根据语法规则组织单词或标记形成语法树。
(3) 语义分析:分析语法树以检测语义错误。
(4) 代码生成:根据语法树生成目标代码。
3. 词法分析器的功能是将源代码分解成一系列单词或标记。
它将源代码读取为字符流,然后将这些字符组成单词,同时可以去除空格、注释等不具有实际意义的内容。
词法分析器的作用是为语法分析器提供正确的单词序列,为后续的语义分析和代
码生成步骤建立基础。
4. 语法分析器的功能是根据语法规则组织单词或标记形成语法树。
它通过构建语法树来分析源代码的语法结构,同时可以检测语法错误。
语法分析器的作用是为后续的语义分析和代码生成步骤提供一个结构化的表示形式,便于后续的处理和转换。
编译原理考试题及答案
编译原理考试题及答案一、选择题(每题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. 假设编译器在进行语法分析时,遇到一个语法错误的代码片段,请简述编译器如何处理这种情况。
编译原理期末考试题(含答案)
编译原理期末考试题(含答案)1. 请简要解释编译原理的定义和作用。
编译原理是研究将高级语言源程序转化为等价的目标程序的一门学科。
它的主要作用是将高级语言的源代码翻译为计算机能够执行的目标代码,从而实现程序的运行。
2. 请列举并解释编译过程的各个阶段。
- 词法分析:将源代码划分为一个个词法单元,如变量、关键字等。
- 语法分析:根据语法规则,将词法单元组合为语法树,检查语法结构是否正确。
- 语义分析:对语法树进行语义检查,如类型匹配、作用域等。
- 中间代码生成:将语法树转化为中间代码表示形式,方便后续优化。
- 代码优化:对中间代码进行优化,提高程序执行效率。
- 目标代码生成:将优化后的中间代码转化为目标机器代码。
3. 请解释符号表在编译过程中的作用。
符号表是编译器在编译过程中用来管理变量、函数、类型等标识符的数据结构。
它的主要作用是记录标识符的相应属性,如类型、作用域等,以便在后续的语法、语义分析以及代码生成过程中进行查找、检查等操作。
4. 请简要解释LL(1)文法的定义和特点。
LL(1)文法是一种上下文无关文法,它具有以下特点:- 对于给定的非终结符,它的产生式右部的首符号不相同。
- 对于给定的产生式右部的首符号,它的产生式右部不相同。
- 通过向前查看一个符号,就能确定所选用的产生式。
5. 请简要解释词法分析器的作用和实现方式。
词法分析器的主要作用是将源代码分解为一个个词法单元,如变量名、关键字等。
它的实现方式一般采用有限自动机,通过定义正则表达式描述各个词法单元的模式,然后根据模式匹配的结果生成相应的词法单元。
答案仅为参考,请以实际考试为准。
编译原理试题及答案
编译原理试题及答案一、选择题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. 论述编译器优化的几种常见方法。
答案:编译器优化主要包括以下几种方法:常量折叠、死代码消除、公共子表达式消除、循环优化、代码内联、寄存器分配等。
这些优化方法可以提高程序的执行效率,减少资源消耗,提高程序的运行速度。
结束语:本试题涵盖了编译原理的基本知识点,包括编译器的功能、编译过程的主要阶段、中间代码的作用以及编译器优化的方法。
希望考生能够通过本试题加深对编译原理的理解和掌握。
编译原理试题及答案
编译原理试题及答案1. 选择题(每题4分,共40分)1) 当编译器在词法分析阶段遇到无法识别的字符时,应该采取的动作是:A. 直接忽略该字符并继续进行词法分析B. 输出错误信息并终止词法分析过程C. 将该字符标记为非法字符并继续词法分析D. 转交给语法分析器进行处理答案:B2) 下列关于语法分析器的描述中,错误的是:A. 语法分析器使用文法规则将输入的记号流转化为推导树B. 语法分析器可以通过自上而下或自下而上的方式进行解析C. LL(1)文法是一种常用于自上而下语法分析的文法形式D. 语法分析器的输入是词法分析器输出的记号流答案:A3) 以下关于语法制导翻译的说法,正确的是:A. 语法制导翻译是在语义分析阶段完成的B. 语法制导翻译通过产生式的属性传递进行信息的传递和计算C. 语法制导翻译只能用于自上而下的语法分析D. 语法制导翻译是在语法分析阶段完成的答案:B4) 在SLR分析算法中,项目集簇的构造过程中需要进行的操作是:A. 闭包操作和移进操作B. 移进操作和规约操作C. 闭包操作和规约操作D. 闭包操作、移进操作和规约操作答案:D5) 下列关于中间代码生成的叙述中,错误的是:A. 中间代码是一种类似于汇编代码的表示形式B. 中间代码可以直接被目标代码生成器所使用C. 中间代码的生成可以采用三地址码的形式D. 中间代码的生成在语法分析和语义分析之后进行答案:B2. 简答题(每题10分,共30分)1) 请简要描述编译器的主要工作流程。
答案:编译器的主要工作流程包括词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成等阶段。
在词法分析阶段,编译器将输入的源代码转化为一个个记号流。
接下来,在语法分析阶段,编译器使用文法规则对记号流进行分析,并生成语法树或推导树。
在语义分析阶段,编译器对语法树进行语义检查,并进行类型推导和符号表管理等操作。
中间代码生成阶段将经过语义分析的源代码转化为一种中间表示形式,通常是三地址码。
编译原理复习题及答案
1、试证明:任何LL(1)文法均为无二义性文法。
证:LL(1)文法的分析句子过程的每一步,永远只有唯一的分析动作可进行。
现在,假设LL(1)文法G是二义性文法,则存在句子α,它有两个不同的语法树。
即存在着句子α有两个不同的最左推导。
从而可知,用LL(1)方法进行句子α的分析过程中的某步中,存在两种不同的产生式替换,且均能正确进行语法分析,即LL(1)分析动作存在不确定性。
与LL(1)性质矛盾。
所以,G不是LL(1)文法。
2、 LL ( 1 )分析法对文法有哪些要求?对于 G 中的每个产生式 A →γ 1 | γ 2 | … | γ m ,其各候选式均应满足:(1)不同的候选式不能推出以同一终结符号打头的符号串,即FIRST( γ i ) ∩ FIRST( γ j )= φ( 1 ≤ i , j ≤ m ; i ≠ j )(2)若有γ j ε,则其余候选式γ i 所能推出的符号串不能以 FOLLOW(A) 中的终结符号开始,即有FIRST( γ i ) ∩ FOLLOW(A)= φ( i ≤ 1,2, … ,m ; i ≠ j )3、一个上下文无关文法生成句子abbaa的推导树如下:(1)给出串abbaa最左推导、最右推导。
(2)该文法的产生式集合P可能有哪些元素?(3)找出该句子的所有短语、直接短语、句柄。
[答案](1)串abbaa最左推导:S=>ABS=>aBS=>aSBBS=>aεBBS=>aεbBS=>aεbbS=>aεbbAa=>aεbbaa最右推导:S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Aεbbaa=>aεbbaa(2)产生式有:S→ABS |Aa|εA→aB→SBB|b(3)该句子的短语有a1b1b2a2a3、a1、b1、b2、b1b2、a2a3、a2;直接短语有a1、b1、b2、a2;句柄是a1。
编译原理试题汇总 编译原理期末试题(8套含答案 大题集)(DOC)
编译原理考试题及答案汇总一、选择1.将编译程序分成若干个“遍”是为了_B__。
A . 提高程序的执行效率B.使程序的结构更加清晰C. 利用有限的机器内存并提高机器的执行效率D.利用有限的机器内存但降低了机器的执行效率2.正规式 MI 和 M2 等价是指__C__。
A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。
C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等3.中间代码生成时所依据的是 _C_。
A.语法规则 B.词法规则 C.语义规则 D.等价变换规则4.后缀式 ab+cd+/可用表达式__B_来表示。
A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。
A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析7.词法分析器用于识别__C___。
A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符8.语法分析器则可以发现源程序中的___D__。
A.( ) 语义错误 B.( ) 语法和语义错误C.( ) 错误并校正 D.( ) 语法错误9.下面关于解释程序的描述正确的是__B___。
(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于 COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3)10.解释程序处理语言时 , 大多数采用的是__B___方法。
A.( ) 源程序命令被逐个直接解释执行B.( ) 先将源程序转化为中间代码 , 再解释执行C.( ) 先将源程序解释转化为目标程序 , 再执行D.( ) 以上方法都可以11.编译过程中 , 语法分析器的任务就是__B___。
编译原理试题及答案(期末复习版)
<编译原理>历年试题及答案一.(每项选择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.一个正规语言只能对应( 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 .BASICB .CC.FORTRAND .PASCAL把汇编语言程序翻译成机器可执行的目标程序的工作12.13.14.15.16.17.18.19.20.21.22.23.24.25.A. 编译器B. 汇编器C. 解释器D. 预处理器用高级语言编写的程序经编译后产生的程序叫(B)A .源程序B.目标程序C.连接程序D.解释程序(C)不是编译程序的组成部分。
A. 词法分析程序B. 代码生成程序C.设备管理程序D.语法分析程序通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。
《编译原理》考试试题及答案(汇总)
编译原理》考试试题及答案(汇总)一、是非题(请在括号内,正确的划",错误的划X)(每个2分,共20分)1 .编译程序是对高级语言程序的解释执行。
(x )2. —个有限状态自动机中,有且仅有一个唯一的终态。
(X)3. —个算符优先文法可能不存在算符优先函数与之对应。
(V )4. 语法分析时必须先消除文法中的左递归。
(x)5. 分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
( V)6. 逆波兰表示法表示表达式时无须使用括号。
(V )7. 静态数组的存储空间可以在编译时确定。
(x)8. 进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。
( x)9. 两个正规集相等的必要条件是他们对应的正规式等价。
(x)(x )10. 一个语义子程序描述了一个文法所对应的翻译工作、选择题 ( 请在前括号内选择最确切的一项作为答案划一个勾, 多划按错4.如果文法G 是无二义的,则它的任何句子aA. ( ) 最左推导和最右推导对应的语法树必定相同B. ( ) 最左推导和最右推导对应的语法树可能不同C. ( ) 最左推导和最右推导必定相同论)( 每个 4 分,共 40分) 1.词法分析器的输出结果是。
A .( ) 单词的种别编码C .( ) 单词的种别编码和自身值 2. 正规式 M 1 和 M 2 等价是指。
A. ( ) M1和M2的状态数相等 的有向边条数相等C. ( ) M1和M2所识别的语言集相等 向边条数相等3. 文法G S f 所识别的语言是。
A. ( )B . ( ) ()*C . ( ) (nB. ( ) 单词在符号表中的位置 D . ( ) 单词自身值B . ( ) M1 和 M2D. ( ) M1 和M2状态数和有> 0) D . ( ) x**D. ( ) 可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握6.四元式之间的联系是通过实现的。
广工编译原理复习例题(有客观题的答案
⼴⼯编译原理复习例题(有客观题的答案编译原理复习例题⼀选择题1.编译的各阶段⼯作都涉及 B 。
[A]词法分析 [B]表格管理 [C]语法分析 [D]语义分析2. D 型⽂法也称为正规⽂法。
[A] 0 [B] 1 [C] 2 [D] 33. D ⽂法不是LL(1)的。
[A]递归 [B]右递归 [C]2型 [D]含有公共左因⼦的4.⽂法E→E+E|E*E|i的句⼦i*i+i*i有 C 棵不同的语法树。
[A] 1 [B] 3 [C] 5 [D] 75.⽂法 S→aaS|abc 定义的语⾔是 C 。
[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β为 D 。
[A]移进项⽬ [B]归约项⽬ [C]接受项⽬ [D]待约项⽬7.同⼼集合并可能会产⽣新的 D 冲突。
[A]⼆义 [B]移进/移进 [C]移进/归约 [D]归约/归约8.代码优化时所依据的是 C 。
[A]语法规则 [B]词法规则[C]等价变换规则 [D]语义规则9.表达式a-(-b)*c的逆波兰表⽰(@为单⽬减)为 B 。
[A]a-b@c* [B]ab@c*- [C]ab@- [D]ab@c-*10.过程的DISPLAY表是⽤于存取过程的 B 。
[A]⾮局部变量 [B]嵌套层次 [C]返回地址 [D]⼊⼝地址11. 已知右图所⽰⾃动机M,请问下列哪个字符串不是M[A] bbaa [B] abba [C] abab [D] aabb12.若状态k含有项⽬“A→α.”,且仅当输⼊符号a∈FOLLOW(A)时,才⽤规则“A→α”归约的语法分析⽅法是 D 。
[A] LALR分析法 [B] LR(0)分析法[C] LR(1)分析法[D] SLR(1)分析法13.有⼀语法制导翻译如下所⽰:(第8章)S->bAb {print “1” }A->(B {print “2” }A->a {print “3” }B->Aa) {print “4” }若输⼊序列为b(((aa)a)a)b,则采⽤⾃下⽽上的分析⽅法,则输出是 B 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)将NFA M确定化为DFA M’
I -0 +1 2 S SZ A
Ia SZ SZ S
Ib A A
8. 有穷自动机M接受字母表={0,1}上所有满足下述条件的串:串中 至少包含两个连续的0或两个连续的1。请写出与M等价的正规式。 解:(0|1)*(00|11)(0|1)* 9.对右图所示的有限自动机 (1)若是确定的,则写出其转换矩阵;若不是,则将其确定化; (2)最小化。 (注:确定化和最小化均应给出转换矩阵和图示)。 解: (1) 符号 a b 状态 -1 2 +3 +4 5 2 1 2 1 5 3 4 5 6 5
[C]
基本
,从而逐个 P→(E)|i,句
最左规约
4.符号表的信息栏中登记了每个名字的有关属性,如 符号名 、符号的类型、符号的存储类别和符号的作用域及可视性等。 5. 一个确定有穷自动机由五部分组成: 有穷状态集 、 有穷字母 表 、 转换函数 、初态和 终态集 。 6. 最常用的两类语法分析方法是 自顶向下 上 分析法。 7. 单词的三种描述工具: 正规文法 、 有穷自动机 互相之间具有等价性。 8. 和 自底向 正规式 和
6 6 6 (2)首先将状态按终态和非终态分成两个集合{1,2,5,6}和{3,4} 检查子集{1,2,5,6},由于f(1,a)=2,f(2,a)=1,
f(5,a)=4,f(6,a)=3,所以子集{1,2,5,6}可进一步划分为{1,2} 和{5,6} 检查子集{3,4},由于f(3,a)=2,f(4,a)=1以及f(3,b)=5, f(4,b)=6,所以不用进一步划分了。 检查子集{1,2},由于f(1,a)=2,f(2,a)=2以及f(1,b)=3, f(2,b)=4,所以不用进一步划分了。 检查子集{5,6},由于f(5,a)=4,f(6,a)=3以及f(5,b)= ¢, f(6,b)= ¢,所以不需要进一步划分了。 因此最终划分的结果是{1,2}、{3,4}和{5,6},重新命名状态, 令{1,2}为1,{3,4}为3和{5,6}为5,则得到化简后的DFA为 符号 a b 状态 -1 +3 5 1 1 5 3 5 5
四
解答题
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.给出语言{ambmcn|m≥1,n≥0}的上下文无关文法(2型)。 解: G: S→AB|A A→aAb|ab B→cB|c
13.对文法G[S]: S → aSb | P P → bPc | bQc Q → Qa | a 构造简单优先关系表。该文法是否是简单优先文法? 解:简单优先关系矩阵如下: S a b P Q c
S a b P Q = = < > <
= < < > > < = = < = = >
c > > 由于矩阵中有元素存在多种优先关系,故不是简单优先文法。 14.考虑文法 G: S → AS | b A → SA | a (1)构造文法的可归前缀图(活前缀的DFA); (2)判断文法是否是LR(0)文法,并说明理由。 解:(1)可归前缀图 (2)因为存在冲突,所以不是LR(0)文法。 15.已知文法G[S]:S→ Uta | Tb T→ S | Sc | d U→ US | e (1) 试判断G是LR(0),SLR(1),LALR(1)还是LR(1),说明理 由。 (2) 构造相应的分析表。 解: (1) 首先拓广文法为G',增加产生式S'→S (0) S'→S (1) S→UTa (2) S→Tb (4) T→Sc (5) T→d (6) U→US G′的LR(0)项目集族及识别活前缀的DFA如下图所示:
在PL/0的目标代码解释执行时,寄存器B总是指向当前执行 过程活动记录的 起始地址 ,而寄存器T总是指向 栈顶 。
9.LR(0)分析法的名字中”L”表示 自左向右扫描输入符号串 ,”R”表示 最右推导的逆过程 ,“0”表示 向前看的输入符号的个数 。 10. 两种常用的动态存储分配办法是 动态分配。 栈式动态分配和堆式
编译原理复习例题
一 选择题
1.编译的各阶段工作都涉及 B 。 [A]词法分析 [B]表格管理 [C]语法分析 [D] 语义分析 2. D 型文法也称为正规文法。 [A] 0 [B] 1 [C] 2 [D] 3 3. D 文法不是LL(1)的。 [A]递归 [B]右递归 [C]2型 [D]含有公 共左因子的 4.文法E→E+E|E*E|i的句子i*i+i*i有 C 棵不同的语法 树。 [A] 1 [B] 3 [C] 5 [D] 7 5.文法 S→aaS|abc 定义的语言是 C 。 [A]{a2kbc|k>0} [B]{akbc|k>0} [C]{a2k-1bc|k>0} [D]{akakbc|k>0} 6.若B为非终结符,则 A→.B 为 D 。 [A]移进项目 [B]归约项目 [C]接受项目 [D]待约项目 7.同心集合并可能会产生新的 D 冲突。 [A]二义 [B]移进/移进 [C]移进/归约 [D]归约/归 约 8.代码优化时所依据的是 C 。 [A]语法规则 [B]词法规则 [C]等价变换规则 [D]语义规则 9.表达式a-(-b)*c的逆波兰表示(@为单目减)为 B 。 [A]a-b@c* [B]ab@c*[C]ab@[D]ab@c-* 10.过程的DISPLAY表是用于存取过程的 B 。 [A]非局部变量 [B]嵌套层次 [C]返回地址 [D]入口地址 b 0
+123 123
+13
123
0 1 2 a a b a -+ + + (3)构造R的相应最小确定有限自动机; 解:对(2)得到的DFA化简,合并状态0和2 为状态2: 1 2 a a b -+ + (4)构造与R等价的正规文法 解:令状态1和2分别对应非终结符B和A G: A→aB|a|ε B→aB|bA|a|b|ε 可化简为: G: A→aB|ε B→aB|bA|ε 7.已知正规文法G[S]: S → aS | bA | a A → aS (1)构造与之等价的自动机NFA M
14. 局部优化是对 [A] 表达式 [C] 循环体 15. 削减运算强度是对
D
进行的优化。 [B] 部分代码 [D] 基本块 D 的一种优化。
[A] 表达式 [B] 过程 块 [D] 循环 二 填空题
1.词法分析阶段的任务式从左到右扫描 源程序 识别 单词 。 2.对于文法G[E]:E→T|E+T 型T+T*F+i的句柄是 T 3.最右推导的逆过程称为 规范规约 。 T→F|T*F 。 F→P^F|P ,也称为
10.写出在{a,b}上,不以a开头,但以aa结尾的字符串集合的正规式 (并构造与之等价的最简DFA)。 解:依题意,“不以a开头”,则必以b开头,又要“以 aa结尾”,故正规式为:b(a|b)*aa (构造与之等价的最简DFA,此略) 11.写一个LL(1)文法G,使其语言是 L(G)={ ambnc2n | 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)的 12.将文法G改写成等价的LL(1)文法,并构造预测分 析表。 G:S→S*aT|aT|*aT
三
判断题(认为正确的填“T”,错的填“F”)
【 T 】1.同心集的合并有可能产生“归约/归 约”冲突。 【 T 】2.一个文法所有句子的集合构成该文法定 义的语言。 【 F 】3.非终结符可以有综合属性,但不能有继 承属性。 【 T 号。 【 F 态。 【 F 】4.逆波兰表示法表示表达式时无需使用括 】5.一个确定有穷自动机有且只有一个终 】6.若过程p第k次被调用,则p的DISPLAY表中就有k+1个元 素。
1 a a 2 + + b a b 11. 已知右图所示自动机M,请问下列哪个字符串不是M所能识别的。D [A] bbaa [B] [C] abab [D] aabb
12. 若状态k含有项目“A→α.”,且仅当输入符号a∈FOLLOW(A)时, 才用规则“A→α”归约的语法分析方法是 D 。 [A] LALR分析法 [B] LR(0)分析法 [C] LR(1)分析法 [D] SLR(1)分析法 13. 有一语法制导翻译如下所示:(第8章) S->bAb {print “1” } A->(B {print “2” } A->a {print “3” } B->Aa) {print “4” } 若输入序列为b(((aa)a)a)b,则采用自下而上的分析方法,则输出是 B 。 [A] 32224441 [B] 34242421 [C] 12424243 [D] 34442212
4.给出语言{akbmcn|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}上的正规式R=(ab|a)*。 (1)构造R的相应有限自动机; 解: 0 1 2 3 b a a ε ε + (2)构造R的相应确定有限自动机; 解:将(1)所得的非确定有限自动机确定化 Ia +013 123 13 Ib