编译原理复习题集

合集下载

编译原理试题及答案

编译原理试题及答案

编译原理试题及答案一、选择题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. 给定一个简单的四则运算表达式,请写出其对应的逆波兰表达式。

编译原理期末复习题

编译原理期末复习题

编译原理期末复习题(包含上一份N多答案)(总28页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--编译原理复习题一、填空题:1、编译方式与解释方式的根本区别在于(是否生成目标代码)。

2、对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。

3、如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:(编译阶段)和(运行阶段)。

4、如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分成三个阶段:(编译阶段)、(汇编阶段)和(运行阶段)。

5、自顶向下语法分析方法会遇到的主要问题有(回溯)和((左递归带来的)无限循环)。

6、LL(k)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“k”的含义是(向输入串中查看K个输入符号)。

7、LL(1)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“1”的含义是(向输入串中查看1个输入符号)。

8、自顶向下语法分析方法的基本思想是:从(识别符号)出发,不断建立(直接推导),试图构造一个推导序列,最终由它推导出与输入符号相同的(符号串)。

9、自底向上语法分析方法的基本思想是:从待输入的符号串开始,利用文法的规则步步向上进行(直接归约),试图(归约)到文法的(识别符号|开始符号)。

10、LR(0)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“0”的含义是(向貌似句柄的符号串后查看0个输入符号)。

11、LR(1)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。

12、SLR(1)分析法的名字中,“S”的含义是(简单的),“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。

编译原理复习题

编译原理复习题

编译原理复习题1. 定义和分类- 什么是编译原理?- 编译器的主要功能是什么?- 列举编译器的几种类型,并简要描述它们的特点。

2. 词法分析- 词法分析在编译过程中的作用是什么?- 描述词法分析器的工作原理。

- 举例说明如何使用正则表达式进行词法分析。

3. 语法分析- 语法分析的目的是什么?- 解释上下文无关文法和上下文有关文法的区别。

- 描述递归下降解析器的工作原理。

4. 语义分析- 语义分析的任务是什么?- 描述如何使用属性文法进行语义分析。

- 解释类型检查的重要性及其在语义分析中的应用。

5. 中间代码生成- 中间代码的作用是什么?- 列举常见的中间代码形式,并解释它们的优缺点。

- 描述如何从源代码生成三地址代码。

6. 代码优化- 代码优化的目标是什么?- 解释局部优化和全局优化的区别。

- 描述几种常见的代码优化技术。

7. 目标代码生成- 目标代码生成的重要性是什么?- 描述如何将中间代码转换成目标机器代码。

- 解释寄存器分配和指令调度的概念。

8. 符号表管理- 符号表在编译过程中的作用是什么?- 描述符号表的组织结构。

- 解释如何在编译过程中维护和更新符号表。

9. 错误处理- 编译过程中常见的错误类型有哪些?- 描述错误检测和报告的策略。

- 解释如何设计一个有效的错误恢复机制。

10. 编译原理的应用- 编译原理在现代软件开发中的重要性是什么?- 列举编译原理在不同领域的应用实例。

- 讨论编译原理在人工智能和机器学习领域的潜在应用。

结束语编译原理不仅仅是计算机科学中的一个理论领域,它在实际的软件开发和系统设计中扮演着至关重要的角色。

通过深入理解编译原理,我们可以更有效地编写和优化软件,提高程序的性能和可靠性。

希望这些复习题目能够帮助你更好地掌握编译原理的基础知识和应用技巧。

编译原理复习题

编译原理复习题

编译原理复习题一、选择题1、编译原理是对(C)。

A、机器语言的执行B、汇编语言的翻译C、高级语言的翻译D、高级语言程序的解释执行2、(A)是一种典型的解释型语言。

A.BASIC B.C C.FORTRAN D.PASCAL3、把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。

A. 编译器B. 汇编器C. 解释器D. 预处理器4、用高级语言编写的程序经编译后产生的程序叫(B)A.源程序 B.目标程序C.连接程序D.解释程序5、(C)不是编译程序的组成部分。

A.词法分析程序B.代码生成程序C.设备管理程序D.语法分析程序6、通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。

A.模拟执行器B.解释器 C.表格处理和出错处理D.符号执行器7、编译程序绝大多数时间花在(D)上。

A.出错处理B.词法分析C.目标代码生成D.表格管理8、源程序是句子的集合,(B)可以较好地反映句子的结构。

A. 线性表B. 树C. 完全图D. 堆栈9、词法分析器的输出结果是(D)。

A、单词自身值B、单词在符号表中的位置C、单词的种别编码D、单词的种别编码和自身值10、词法分析器不能(D)A. 识别出数值常量B. 过滤源程序中的注释C. 扫描源程序并识别记号D. 发现括号不匹配11、文法:G:S→xSx | y所识别的语言是(D)。

A、xyxB、(xyx)*C、x*yx*D、x n yx n (n≥0)12、如果文法G是无二义的,则它的任何句子α(A)A.最左推导和最右推导对应的语法树必定相同B.最左推导和最右推导对应的语法树可能不同C.最左推导和最右推导必定相同D.可能存在两个不同的最左推导,但它们对应的语法树相同13、正则文法(A)二义性的。

A. 可以是B. 一定不是C. 一定是14、(B)这样一些语言,它们能被确定的有穷自动机识别,但不能用正则表达式表示。

编译原理复习题有答案

编译原理复习题有答案

编译原理复习题有答案编译原理复习题及答案一、选择题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 .BASICB .CC.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) A .出错处理B.词法分析C.目标代码生成D.表格管理17.源程序是句子的集A. 线性表(B) 可以较好地反映句子的结构。

编译原理复习题

编译原理复习题

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

《编译原理》复习题集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 。

试构造识别L 的最小化的DFA ,并给出描述L 的正规表达式。

12.写出字母表∑ = {a, b}上语言L = {w | w的最后两个字母是aa或bb}的正规式,并画出接受该语言的最简DFA。

13.有穷自动机M接受字母表∑={0,1}上所有满足下述条件的串:串中至少包含两个连续的0或两个连续的1。

请写出与M等价的正规式。

14.有正规式b*abb*(abb*)* ,(1) 构造该正规式所对应的NFA(画出状态转换图) 。

(2) 将所求的NFA 确定化(画出确定化的状态转换图)。

(3) 将所求的NFA 最小化. (画出最小化后的状态转换图)。

15.求出下列文法所产生语言对应的正规式.S→bS|aAA→aA|bBB→aA|bC|bC→bS|aA16.给出与下图的NFA等价的正规式。

17.把下面的NFA确定化。

18.下面两个文法中哪一个不是LR (1)文法?对非LR (1)的那个文法。

给出那个有移进-归约冲突的规范的LR (1)项目集。

S → aAc S → aAc A → bbA | b A → bAb | b19.将下面的DFA 化成最简形式。

20.为语言L ={ w | w ∈ (a | b )*并且在w 的任何前缀中,a 的个数不少于b 的个数} 写一个LR (1)文法,不准超过6个产生式。

21.写一个文法,使其语言是奇数集,且每个奇数不以0开头。

22.考查文法G(s):S →( T ) | a + S | a T →T, S | S(1) 消除文法的左递归; (2) 提取公共左因子;(3) 对每个非终结符,写出不带回朔的递归子程序。

23.设文法G(S): S →(L)|a S|a L →L ,S|S(1)消除左递归和回溯;(2)计算每个非终结符的FIRST 和FOLLOW ; (3)构造预测分析表。

24.消除下列文法的左递归.S SaP|Sf|Pa,bP→QbP|QQ→cSd|e25.已知文法G :A→aABe|aB→Bb|d给出与上述文法等价的LL(1)文法G'。

26.已知文法G[A]:A →aAB | aB →Bb | d(1)构造与G[A]等价的LL(1)文法;(2)构造G’[A]的预测分析表。

27.程序的文法如下:P →DD →D ; D | id : T | proc id ; D ; S(1)写一个语法制导定义,打印该程序一共声明了多少个id。

(2)写一个翻译方案,打印该程序每个变量id的嵌套深度。

28.构造下面文法的LL(1)分析表。

D → TLT → int | realL → id RR → , id R | ε29.考虑下文法:D → TVT → int |floatV → id , V | ida. 在该文法中提取左公因子。

b. 为所得文法的非终结符构造First和Follow集合。

c. 说明所得的文法是LL(1)文法。

d. 为所得文法构造LL(1)分析表。

e. 假设有输入串int x , y , z写出相应LL(1)分析程序的动作。

30.说明如下文法是否是LL(1)文法,若不是,将其转换为LL(1)文法。

最后给出该文法的LL(1)分析表。

A →B eB → B b | a31.设有文法:P→begin XYendX→Xd;X→d;Y→Y;sY→s(1) 该文法含有左递归吗?若有,消除它。

(2) 改造后的文法是LL(1)文法吗?若是,给出其预测分析表。

(3) 写出句子begin d;s end的分析过程。

32.已给文法G[S] :S →SaP | Sf | PP →qbP | q将G[S] 改造成LL ( 1 )文法,并给出LL ( 1 )分析表。

33.设文法G(S):S→(L)|a S|aL→L,S|S(1) 消除左递归和回溯;(2) 计算每个非终结符的FIRST和FOLLOW;(3) 构造预测分析表。

34.给定文法G[S] :S →Aa|dAb|Bb|dBaA →cB →c构造文法G[S] 的LR ( 1 )分析表。

35.已知文法G(S)S→a|∧|(T)T→T,S|S写出句子((a,a),a)的规范归约过程及每一步的句柄。

36.已知文法G(E)E→T|E+TT→F|T *FF→(E)|i给出句型(T *F+i)的最右推导及画出语法树;37.说明下面的文法不是SLR(1)文法,并重写一个等价的SLR(1)文法。

S → M a | b M c | d c | b d aM → dS’ → S S → M a | b M c | d c | b d a M → d因为a是M的后继符号之一,因此在上面最右边一个项目集中有移进-归约冲突。

等价的SLR(1)文法是S → d a | b d c | d c | b d a38.在PASCAL语言中,简单类型的变量的声明例举如下:m, n : integerp, q, r : real为这样的声明写一个LR(1)文法(为简单起见,变量标识符都用id表示),并根据你的文法写一个语法制导定义(或叫做为你的文法加上语义动作),它将变量的类型填入符号表。

39.一个非LR(1)的文法如下:L→MLb | aM →ε请给出所有有移进-归约冲突的LR(1)项目集,以说明该文法确实不是LR(1)的。

40.若有文法G(S)的产生式如下:S→L=RS→RL→*RL→iR→L,构造识别所有项目集规范族的DFA.,判断该文法是否是SLR(1)文法,说明理由。

41.现有句型γ bα lβ和产生式A→bα,分别指出LL(1)方法和LR(1)方法在扫描到此句型的什么位置决定用此产生式?42.为下面的算术表达式文法写一个语法制导的翻译方案,它将每个子表达式E的符号(即值大于零还是小于零)记录在属性E.sign中(属性值分别用POS或NEG表示)。

你可以假定所有的整数都不为零,这样就不用担心零的符号。

E→E *E | +E | -E | unsigned_integer43.一个文法如下:S → ( S )S → a请给出该文法中对活前缀(((有效的LR (1)项目。

44.为下面文法添加语义规则(或叫动作子程序),输出S'产生的二进制数的值,如输入是101时,输出5。

S'→ SS → S B | BB → 0 | 145.写出表达式(a+b*c)/(a+b)-d的逆波兰表示及三元式序列。

46.把表达式- (a+b)*(c+d)+(a+b+c)翻译成三地址码序列。

47.设布尔表达式的文法为E →E∨E21E →E∧E21E →i假定它们将用于条件控制语句中,请(1)改写文法,使之适合进行语法制导翻译;(2)写出改写后的每个产生式的语义动作。

48.将语句if (A<X ∧ B>0) while ( C>0 ) C=C+D; 翻译成三地址码序列。

49.设有基本块如下:T1=S+RT2= 3T3= 12/T2T4=S/RA=T1-T4T5=S+RB=T5T6=T5*T3B=T6(1) 画出中间代码的流图;(2) 设A、B是出基本块后的活跃变量,请给出优化后的三地址码序列。

50.设已构造出文法G(S):(1) S → BB(2) B → aB(3) B→ b化过程)。

51.给出活动记录空间结构。

并给出各部分的存储对象。

52.将下面程序段翻译成四元式序列。

while( A<C∧B<D ){if ( A==1) C=C+1 ;else while ( A<D ) {A=A+2;}}53.有一语法制导翻译如下所示:S →bAb { print(“1”) }A →(B { print(“2”) }A →a { print(“3”) }B →Aa) { print(“4”) }若对输入序列b(((aa)a)a)b 进行自底向上分析,请写出输出序列。

54.画出IF a>0 THEN x:=x+1 ELSE x:=4*( x- 1)的翻译方案图。

55.下面是一个C语言程序:main(){long i;long a[0][4];long j;i = 4; j = 8;printf(“%d, %d\n”, sizeof(a), a[0][0]);}虽然出现long a[0][4]这样的声明,在X86/Linux机器上该程序还是能通过编译并生成目标代码。

请回答下面两个问题:(1)sizeof(a)的值是多少,请说明理由。

(2)a[0][0]的值是多少,请说明理由。

(1)按照数组size的计算公式,sizeof(a)的值一定是0。

(2)a[0][0]的值是4。

虽然a的size是0,但它仍然有起始地址,并且a[0][0]的地址等于a的起始地址。

相关文档
最新文档