编译原理题集
编译原理题库

编译原理题库
1. 什么是编译原理?
编译原理是研究将高级程序语言翻译成为机器语言的原理和方法的学科。
2. 编译器的主要功能是什么?
编译器的主要功能包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等。
3. 什么是词法分析?
词法分析是将输入的字符流转化为标记流的过程。
4. 什么是语法分析?
语法分析是将词法分析得到的标记流转化为语法树的过程。
5. 什么是语义分析?
语义分析是对语法树进行解析,检查程序中是否存在语义错误或不符合语言规范的地方。
6. 什么是中间代码生成?
中间代码生成是将语义分析得到的语法树转化为中间表示形式,以便进行后续的代码优化和目标代码生成。
7. 什么是代码优化?
代码优化是对中间代码进行优化,以提高程序的执行效率和空间利用率。
8. 什么是目标代码生成?
目标代码生成是将优化后的中间代码转化为机器语言的过程。
9. 什么是语法制导翻译?
语法制导翻译是一种以语法规则为基础,通过对语法树的遍历和语义规则的应用来进行翻译的方法。
10. 什么是LL(1)文法?
LL(1)文法是一种上下文无关文法,它具有左递归和左因子的特点,并且在进行预测分析时每个非终结符的每个可能产生式都有唯一的选择。
编译原理复习题

编译原理复习题一、选择题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)这样一些语言,它们能被确定的有穷自动机识别,但不能用正则表达式表示。
编译原理试题集33493

第一章引论一.单项选择题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. Lex是语法分析自动生成器d. 解释程序属于编译程序7. 目标代码生成阶段所生成的目标代码的形式不可能是____。
a. 绝对指令代码b. 可充定位的指令代码。
c. 汇编指令代码d. 三地址代码8. 语义错误是指源程序中不符合语义规则的错误,不包括:____a. 非法字符错误b. 类型不一致错误。
c. 作用域错误d. 说明错误解答:1.2.3.4.5.6.7.8.二.填空题1. 对编译程序而言,输入数据是________________;输出数据是_____________。
编译原理试题汇总 编译原理期末试题(8套含答案 大题集)

编译原理考试题及答案汇总一、选择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___。
编译原理习题集1

目录第一章编译概述 (1)第二章文法和语言 (2)第三章词法分析 (6)第四章自顶向下语法分析方法 (13)第五章算符优先分析法 (17)第六章LR(K)分析法 (22)第七章语义分析 (30)第九章运行时刻环境 (39)第十章代码优化 (46)第一章编译概述1、画出编译程序的总体结构图,简述其部分的主要功能。
[答案]编译程序的总框图见下图。
图1编译程序的总体结构图其中词法分析器,又称扫描器,它接受输入的源程序,对源程序进行词法分析,识别出一个个的单词符号,其输出结果上单词符号。
语法分析器对单词符号串进行语法分析(根据语法规则进行推导或归纳),识别出程序中的各类语法单位,最终判断输入串是否构成语法上正确的“程序”。
语义分析及中间代码产生器,按照语义规则对语法分析器归纳出(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的中间代码。
编译程序可以根据不同的需要选择不同的中间代码形式,有的编译程序甚至没有中间代码形式,而直接生成目标代码。
优化器对中间代码进行优化处理。
一般最初生成的中间代码执行效率都比较低,因此要做中间代码的优化,其过程实际上是对中间代码进行等价替换,使程序在执行时能更快,并占用更小的空间。
目标代码生成器把中间代码翻译成目标程序。
中间代码一般是一种与机器无关的表示形式,只有把它再翻译成与机器硬件相关的机器能识别的语言,即目标程序,才能在机器上运行。
表格管理模块保持一系列的表格,登记源程序的各类信息和编译各阶段的进展状况。
编译程序各个阶段所产生的中间结果都记录在表格中,所需要的信息也大多从表格中,所需要的信息也大多从表格中获取,整个编译过程都在不断地和表格打交道。
出错处理程序对出现在源程序中的错误进行处理。
如果源程序有错误,编译程序应设法发现错误,把有关错误信息报告给用户。
编译程序的各个阶段都有可能发现错误,出错处理程序要对发现的错误进行处理、记录,并反映给用户。
2、计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?[答案]计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。
编译原理考试题库

一、判断(共计50分,每题2.5分)1、静态存储分配策略是在程序运行期间为源程序中的量进行分配。
A. 正确B. 错误错误:【B】2、含有优化部分的编译程序的执行效率高。
A. 正确B. 错误错误:【A】3、四元式之间的联系是通过符号表实现的。
A. 正确B. 错误错误:【B】4、包含公共左因子的文法也能直接用预测分析法来分析。
A. 正确B. 错误错误:【B】5、局部优化是在一个程序块内进行的优化。
A. 正确B. 错误错误:【B】6、数组元素的地址计算与数组的存储方式有关。
A. 正确B. 错误错误:【A】7、紧跟在条件转移语句后面的语句是基本块的入口语句。
A. 正确B. 错误错误:【A】8、LL(1)文法是无左递归、无二义性文法。
A. 正确B. 错误错误:【A】9、设有一个LR(0)项目集I={X→α.Bβ, A→α.},该项目集含有“归约-归约”冲突。
A. 正确B. 错误错误:【B】10、使用语法制导翻译法的编译程序能够同时进行语法分析和语义分析。
A. 正确B. 错误错误:【A】11、包含左递归的文法也能直接用LL(1)分析法来分析。
A. 正确B. 错误错误:【B】12、产生式是用于定义词法成分的一种书写规则。
A. 正确B. 错误错误:【B】13、如果i •>j , 则j <•i 。
A. 正确B. 错误错误:【B】14、编译程序与解释程序的区别在于编译程序对源程序进行了翻译,而解释程序则没有。
A. 正确B. 错误错误:【B】15、在形式语言中,最右推导的逆过程也称为规范归约。
A. 正确B. 错误错误:【A】16、设有一个LR(0)项目集Ii={X→α.Bβ,A→α.},该项目集含有“移进-归约冲突”。
A. 正确B. 错误错误:【A】17、动态存储分配是指在编译阶段对源程序中的量进行分配,以使目标代码在运行时加快行速度。
A. 正确B. 错误错误:【B】18、设有一个LR(0)项目集Ii={X→α.,A→α.},该项目集含有“归约-归约冲突”。
编译原理复习题集

《编译原理》复习题集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 。
编译原理期末试题8套含答案大题集

《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。
(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。
(×)3.一个算符优先文法可能不存在算符优先函数与之对应。
(√ )4.语法分析时必须先消除文法中的左递归。
(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
(√)6.逆波兰表示法表示表达式时无须使用括号。
(√ )7.静态数组的存储空间可以在编译时确定。
(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。
(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。
(× )10.一个语义子程序描述了一个文法所对应的翻译工作。
(×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.词法分析器的输出结果是_____。
A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值2.正规式M 1 和M 2 等价是指_____。
A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____。
A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*4.如果文法G是无二义的,则它的任何句子α_____。
A.( )最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( ) 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。
编译原理

第一套一、是非题1.编译程序是对高级语言程序的解释执行。
2.一个有限状态自动机中,有且仅有一个唯一的终态。
3.一个算符优先文法可能不存在算符优先函数与之对应。
4.语法分析时必须先消除文法中的左递归。
5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
6.波兰表示法表示表达式时无须使用括号。
7.2 型文法一定是3型文法。
8.编译过程中,语法分析器的任务是分析单词是怎样构成的。
9.并不是每个文法都能改写成LL(1)文法。
10.一个LL(1)文法一定是无二义的。
11.逆波兰法表示的表达式亦称前缀式。
12.正规文法产生的语言都可以用上下文无关文法来描述。
13.3型文法一定是2型文法。
14.如果一个文法存在某个句子对应两棵不同的语法树,则文法是二义性的。
15.计算机高级语言翻译成低級语言只有解释一种方式。
16.在编译中进行语法检查的目的是为了发现程序中所有错误。
17.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。
18.每个文法都能改写为LL(1)文法。
19.递归下降法不允许任一非终极符是直接左递归的。
20.自底而上语法分析方法的主要问题是候选式的选择。
21.LR法是自顶向下语法分析方法。
22.一个句型的句柄一定是文法某产生式的右部。
23.编译程序与具体的机器有关,与具体的语言无关。
24.递归下降分析法是自顶向下分析方法。
24.综合属性是用于“自上而下”传递信息。
25.正规文法产生的语言都可以用上下文无关文法来描述。
26.逆波兰法表示的表达式亦称后缀式。
27.如果一个文法存在某个句子对应两颗不同的语法树,则称这个文法是二义的。
28.一个有限状态自动机中,有且仅有一个唯一的终态。
29.r和s分别是正规式,则有L(r|s)=L(r)L(s)。
30.确定的自动机以及不确定的自动机都能正确地识别正集。
31.词法分析作为单独的一遍来处理较好。
32.LR分析器的任务就是产生LR分析表。
编译原理词法分析习题集带答案

《编译原理》习题(一)——词法分析一、就是非题(请在括号内,正确的划√,错误的划×)1.编译程序就是对高级语言程序的解释执行。
(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。
(×)9.两个正规集相等的必要条件就是她们对应的正规式等价。
(× )二、选择题1.词法分析器的输出结果就是_____。
A.( ) 记号B.( ) 相应条目在符号表中的位置C.( ) 记号与属性二元组D.( ) 属性值2. 正规式M 1 与M 2 等价就是指_____。
A.( ) M1与M2的状态数相等B.( ) M1与M2的有向边条数相等C.( ) M1与M2所识别的语言集相等D.( ) M1与M2状态数与有向边条数相等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.生成目标代码三、填空题1.计算机执行用高级语言编写的程序主要有两种途径:___解释__与__编译___。
3、编译过程可分为( 词法分析) ,(语法分析),(语义分析与中间代码生成),(优化)与(目标代码生成)五个阶段。
6、扫描器的任务就是从( 源程序中)中识别出一个个( 单词符号)。
17、一张转换图只包含有限个状态,其中有一个被认为就是(初)态;而且实际上至少要有一个(终)态。
1.编译程序首先要识别出源程序中每个(单词),然后再分析每个(句子)并翻译其意义。
编译原理考试题

编译原理考试题
1. 编译器的作用是什么?简述编译器的基本工作流程。
2. 解释什么是词法分析。
描述词法分析器的基本工作原理。
3. 什么是语法分析?描述语法分析器的基本工作原理。
4. 解释语义分析的概念。
语义分析器的基本工作原理是什么?
5. 请简要解释编译器的前端和后端分别是做什么的。
6. 什么是中间代码?为什么编译器要生成中间代码?
7. 解释什么是符号表。
符号表在编译过程中起到什么作用?
8. 简述优化在编译过程中的作用。
列举并解释两种常见的优化技术。
9. 解释静态链接和动态链接的区别。
10. 请解释解释器和编译器之间的区别。
描述它们各自的工作
原理。
11. 解释冲突解析算法中的"移进-归约"冲突和"归约-归约"冲突。
12. 简述LL(1)文法和LR(1)文法的特点及区别。
13. 解释编程语言中的数据类型检查和类型推导的概念。
14. 简要描述语法制导翻译的概念和基本原理。
15. 请解释正则表达式和有限自动机之间的关系。
注意:以上为编译原理考试相关的问题,文中不含有标题相同的文字。
编译原理题目

编译原理题目
1. 词法分析器的设计与实现
2. 语法分析器的生成方法与工具
3. 语法制导翻译的算法与实现
4. 语法制导的代码生成技术
5. 语义分析器的设计与实现
6. 属性文法的定义和属性计算方法
7. 中间代码的生成与优化技术
8. 目标代码生成的方法与实现
9. 解释器与编译器的区别与联系
10. 正则表达式在编译原理中的应用
11. 有限自动机的概念与构建方法
12. 句法制导翻译技术在编译器中的应用
13. 语言语义的表示与验证方法
14. 静态类型检查器的设计与实现
15. 字节码与机器码的转换方法
16. 抽象语法树的构建与遍历算法
17. 参数传递的机制与实现
18. 变量作用域的嵌套与解析方法
19. 优化编译器的关键技术与算法
20. 并行编程在编译器优化中的应用。
编译原理练习题

编译原理练习题⼀章: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、过程1、扫描器的任务是从源程序中识别出⼀个个单词符号。
2、⾼级语⾔源程序有两种执⾏⽅式,即解释和编译。
判断:⾼级语⾔编写的源程序都必须通过编译,产⽣⽬标代码后才能运⾏。
多遍扫描的编译程序的多遍是指多次重复读源程序。
⾼级语⾔程序到低级语⾔程序的转换是基于语义的等价变换。
编译程序中错误处理的任务是对检查出的错误进⾏修改。
⽬标程序⼀定是机器语⾔程序。
连接装配程序可把经编译程序产⽣的⽬标程序变成可执⾏的机器语⾔程序。
简答题:1、请指出下列错误信息可能是编译的哪个阶段报告的?①else没有匹配的if;②数组下标越界;③使⽤的函数没有定义;④在数中出现了⾮数字信息。
答:①语法分析阶段②语义分析与中间代码⽣成阶段③语义分析与中间代码⽣成阶段④词法分析阶段2、何谓源程序、中间代码和⽬标代码?它们三者之间有何种关系?答:所谓源程序是指⽤某种⾼级语⾔编写的程序,它是编译程序的加⼯对象。
⽬标程序是指低级语⾔(机器语⾔或汇编语⾔)编写的程序,它是编译程序的加⼯结果。
中间代码是其结构介于源程序和⽬标程序之间的⼀种机内表⽰形式,它是编译程序产⽣的中间临时结果。
它们三者之间的关系是等价关系,即结构不同,但语义相同。
⼆章:1、⽂法G:S-→xSx|y所识别的语⾔是。
A、xyx B 、(xyx)* C、x n yx n(n≥0) D、x*yx*2、设有⽂法G[S]=({S,B},{b},{S-→b|bB,B-→bS},S),该⽂法所描述的语⾔是。
编译原理与技术 - 习题集(含答案)

编译原理与技术 - 习题集(含答案)《编译原理与技术》课程习题集西南科技大学成人、网络教育学院版权所有习题【说明】:本课程《编译原理与技术》(编号为03002)共有简答题,计算题1,计算题2,问答与作图题,计算题3,计算题4,计算题5等多种试题类型,其中,本习题集中有[简答题]等试题类型未进入。
一、计算题1 1. 已知NFA M1、将NFA M确定化为DFA M;2、求DFA M的正规式; 2. 已知正规式:a+b(b|ab)*1、求等价的NFA;2、求等价的DFA; 3. 已知正规式((ε|a)b*)*1、求等价的NFA;2、将NFA确定化3、若所求DFA可最小化,则求其最小化DFA;若无,说明原因。
4. 写出字母表? = {a, b}上语言L = {w | w中a的个数是偶数}的正规式,并画出接受该语言的最简DFA。
5. 有文法 G[S] :第 1 页共 26 页S → aC | aA A → aC C → bC |b1、求等价的NFA;2、求等价的DFA;二、计算题2 6. 将文法G[S]:S→aA A→AS|Bc B→Bi|i1、消除左递归;2、证明该文法消除左递归后是LL(1)文法?3、给出相应的LL(1)分析表。
7. 已知文法G(S):E→aTb|iE|i T→TE|E1、提公因子和消除左递归;2、计算每个非终结符的FIRST和FOLLOW;3、证明该文法是否为LL(1)文法?8. 已知文法G(S)为:E → E or T | T T → T andF | FF → not F | ( E ) | true | false 1、对文法消除左递归;第 2 页共 26 页2、计算消除左递归后的文法的每个非终结符的FIRST和FOLLOW;3、判断消除左递归后的文法是否是LL(1) 文法。
9. 已知文法G(D)为:D→int L| real L L→L,id | id1、提公因子和消除左递归;2、计算每个非终结符的FIRST和FOLLOW;3、证明该文法是否为LL(1)文法?10. 已给文法 G[S]:S → SaP | Sf | P P → qbP | q1、对文法提公因子和消除左递归,得到其LL(1)文法;2、对LL(1)文法计算每个非终结符的FIRST和FOLLOW; 3、给出LL(1)文法的 LL(1)分析表。
编译原理词法分析习题集带答案

编译原理词法分析习题集带答案《编译原理》习题(⼀)——词法分析⼀、就是⾮题(请在括号内,正确得划√,错误得划×)1.编译程序就是对⾼级语⾔程序得解释执⾏。
(× )2.⼀个有限状态⾃动机中,有且仅有⼀个唯⼀得终态。
(×)9.两个正规集相等得必要条件就是她们对应得正规式等价。
(× )⼆、选择题1.词法分析器得输出结果就是_____。
A.( ) 记号B.( ) 相应条⽬在符号表中得位置C.( ) 记号与属性⼆元组D.( ) 属性值2. 正规式M 1 与M 2 等价就是指_____。
A.( ) M1与M2得状态数相等B.( ) M1与M2得有向边条数相等C.( ) M1与M2所识别得语⾔集相等D.( ) M1与M2状态数与有向边条数相等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.⽣成⽬标代码三、填空题1.计算机执⾏⽤⾼级语⾔编写得程序主要有两种途径:___解释__与__编译___。
3、编译过程可分为( 词法分析) ,(语法分析),(语义分析与中间代码⽣成),(优化)与(⽬标代码⽣成)五个阶段。
6、扫描器得任务就是从( 源程序中)中识别出⼀个个( 单词符号)。
17、⼀张转换图只包含有限个状态,其中有⼀个被认为就是(初)态;⽽且实际上⾄少要有⼀个(终)态。
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. 程序语言的定义;2. 高级程序语言一般结构和主要共同特征;3. 正确理解上下文无关文法基本概念,包括:文法的定义、推导、句型、句子、语言、语法树、二义性等;4. Chomsky文法分类;本章目标掌握和理解程序语言的定义、高级语言的一般特征及程序语言的语法描述。
本章重点1. 语法,词法规则与语法规则;2. 语义和语义规则;3. 数据类型与操作;4. 推导,最左推导和最右推导;5. 语法分析树和二义性;本章难点1. 二义性文法;2. Chomsky各个文法类;作业题一、单项选择题:(按照组卷方案,至少15道小题)1. Chomsky把文法分成四种类型,0型、1型、2型和3型。
3型文法也称为,2型文法也称为。
a.上下文无关文法b.上下文相关文法c.正则文法d.短语文法2. 许多广为使用的语言,如Fortran、C、Pascal等,属于。
a. 强制式语言b. 应用式语言c. 基于规则的语言d. 面向对象的语言3. 设G是一个文法,S是开始符号。
若S⇒*α,α∈(V T∪V N)*,则称α是一个。
a. 句子b. 句型c. 推导d. 语言4. 一个数据类型通常包括的三种要素中,没有下面的。
a. 用于区别这种类型的数据对象的属性;b. 这种类型的数据对象可以具有的值;c. 对这种类型的数据对象的内存分配;d. 可以作用于这种类型的数据对象的操作;5. Chomsky把文法分成四种类型,其中,也称正规文法a. 0型b. 1型c. 2型d. 3型6. 语言的词法规则一般用Chomsky的型文法来描述:a. 0b. 1c. 2d. 37. 文法S→(L)|aL→L,S|S中,下面是该文法中的终结符号。
a. Sb. ,c. Ld. |8. 文法G所描述的语言是的集合。
a. 文法G的字母表∑中的所有符号组成的符号串;b. 文法G的字母表∑的闭包∑*中的所有符号串;c. 文法G的识别符号推出的所有符号串;d. 文法G的识别符号推出的所有终结符号串;9. 语言L={αcα | α∈(a|b)*},该语言是_____________语言。
编译原理练习题

《编译原理》练习题(总22页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--《编译原理》练习题一一、填空题(每空1分)1.设G[S]是一个文法,我们把能由文法的(1)推导出来的符号串α称为G的一个句型。
当句型α仅由(2)组成时 (即α∈VT*),则将它称为G产生的句子。
2.从某一给定的状态q出发,仅经过若干条 (3) 的矢线所能达到的状态所组成的集合称为ε-CLOSURE(q)。
3.设G=(VN ,VT,P,S)是一文法,我们说G中的一个符号X∈VN∪VT是有用的,是指X至少出现在(4)的推导过程中,否则,就说X是无用的。
我们将不含形如A→A的产生式和不含无用符号及无用产生式的文法称为(5)。
4.我们常采用形如 (class, value)的二元式作为一个单词的(6) 。
其中,class是一个整数,用来指示该单词的 (7) ,value则是单词之值。
5.一个文法G[S]可表示成形如(8)的四元式。
其中VN ,VT,P均为非空的有限集,分别称为非终结符号集、终结符号集和产生式集, S∈VN 为文法的开始符号。
此外,将出现在各产生式左部和右部的一切符号所组成的集合称为(9),记作V。
显然,V=VN ∪VT,VN∩VT=。
6.通常,可通过两种途径来构造词法分析程序。
其一是根据对语言中各类单词的某种描述或定义,用 (10) 构造词法分析程序;另外一种途径是所谓词法分析程序的 (11) 。
7.设G为一文法,A→α是G的一个产生式,如果α具有υAδ的形式,其中υ,δ不同时为ε,则称产生式A→α是(12)。
若存在推导δυαAA*⇒⇒,则称产生式A→α是(13)。
8.设M=(K,Σ,f,S,Z)为一DFA,并设s和t是M的两个不同状态,我们说状态s,t为某一输入串w (14) ,是指从s,t中之一出发,当扫视完w之后到达M的终态,但从其中的另一个状态出发,当扫视完同一个w后而进入(15) 。
编译原理习题集与答案解析(整理后)

第一章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。
编译原理试题及答案(期末复习版)

<编译原理>历年试题及答案一.(每项选择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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章▪什么是编译器?▪编译程序的结构分为几个阶段,各阶段的任务是什么?▪遍、编译前端及编译后端的含义?▪编译程序的生成方式有哪些?第二章▪ 1. 写一文法,使其语言是偶正整数的集合。
▪要求:(1)允许0打头(2)不允许0打头解:(1)允许0开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|02.证明下述文法G[〈表达式〉]是二义的。
〈表达式〉∷=a|(〈表达式〉)|〈表达式〉〈运算符〉〈表达式〉〈运算符〉∷=+|-|*|/解:可为句子a+a*a构造两个不同的最右推导:最右推导1 〈表达式〉⇒〈表达式〉〈运算符〉〈表达式〉⇒〈表达式〉〈运算符〉a⇒〈表达式〉* a⇒〈表达式〉〈运算符〉〈表达式〉* a⇒〈表达式〉〈运算符〉a * a⇒〈表达式〉+ a * a⇒ a + a * a最右推导2 〈表达式〉⇒〈表达式〉〈运算符〉〈表达式〉⇒〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉⇒〈表达式〉〈运算符〉〈表达式〉〈运算符〉 a⇒〈表达式〉〈运算符〉〈表达式〉 * a⇒〈表达式〉〈运算符〉a * a⇒〈表达式〉+ a * a⇒ a + a * a3. 给出生成下述语言的上下文无关文法:(1){ anbnambm| n,m>=0}(2){ 1n0m1m0n| n,m>=0}解:(1){ anbnambm| n,m>=0}S→AAA→aAb|ε(2) { 1n0m1m0n| n ,m>=0}S →1S0|A A →0A1|ε第三章1、构造一个DFA ,它接收∑={a, b}上所有满足下述条件的字符串:字符串中的每个a 都有至少一个b 直接跟在其右边。
解:已知∑={a, b},根据题意得出相应的的正规式为: (b*abb*)* 根据正规式画出相应的DFA M ,如下图所示 用子集法将其确定化由DFA 得状态图 用最小化方法化简得:{0},{1},{2},{3,4},按顺序重新命名DFA M ’第四章练习1:文法G[V]:V →N|N[E] E →V|V+E N →i是否为LL(1)文法,如不是,如何将其改造成LL(1)文法。
解:LL(1)文法的基本条件是不含左递归和回溯(公共左因子),而G[V]中含有回溯,所以先消除回溯得到文法G’[V]:G’[V]: V→NV’ V’→ε|[E]E→VE’ E’→ε|+EN→i由LL(1)文法的充要条件可证G’[V]是LL(1)文法练习2:有文法G[s]:S→BA A→BS|d B→aA|bS|c(1)证明文法G是LL(1)文法。
(2)构造LL(1)分析表。
(3)写出句子adccd的分析过程解:(1)一个LL(1)文法的充要条件是:对每一个非终结符A的任何两个不同产生式A→α|β,有下面的条件成立:① FIRST(α)∩FIRST(β)=Φ;②若β* ε, 则有FIRST(α)∩FOLLOW(A)=Φ对于文法G[s]:S→BA A→BS|d B→aA|bS|c其FIRST集如下:FIRST(B)={a, b, c}; FIRST(A)={a, b, c, d}; FIRST(S)={a, b, c}。
其FOLLOW集如下:首先, FOLLOW(S)={#};对S→BA有: FIRST(A)\{ε}加入FOLLOW(B), 即FOLLOW(B)={a, b, c, d };对A→BS有:FIRST(S)\{ε}加入FOLLOW(B), 即FOLLOW(B)={a, b, c, d };对B→aA有:FOLLOW(B)加入FOLLOW(A), 即FOLLOW(A)={a, b, c, d };对B→bS有:FOLLOW(B)加入FOLLOW(S), 即FOLLOW(S)={#, a, b, c, d };由A→BS|d得:FIRST(BS) ∩FIRST(d) = { a, b, c } ∩{d} = Φ;由B→aA|bS|c得:FIRST(aA) ∩FIRST(bS) ∩FIRST(c) ={a} ∩{b} ∩{c}= Φ。
由于文法G[s]不存在形如β→ε的产生式,故无需求解形如FIRST(α)∩FOLLOW(A)的值。
也即,文法G[S]是一个LL(1)文法。
(2) 由G[s]:S→BA A→BS|d B→aA|bS|c的FIRST(B)={a, b, c}; FOLLOW(B)={a, b, c, d };FIRST(A)={a, b, c, d}; FOLLOW(A)={a, b, c, d };FIRST(S)={a, b, c}。
FOLLOW(S)={#, a, b, c, d }可构造LL(1)预测分析表如下:第五章1 已知文法G[S]为:S→a|∧|(T) T→T,S|S(1) 计算G[S]的FIRSTVT和LASTVT。
(2) 构造G[S]的算符优先关系表并说明G[S]是否为算符优先文法。
(3) 给出输入串 (a,(a,a))#的算符优先分析过程。
解:文法:S→a|∧|(T) T→T,S|S展开为:S→a S→∧S→(T)T→T,S T→S(1) FIRSTVT -- LASTVT表(2)算符优先关系表如下: 表中无多重入口所以是算符优先(OPG)文法。
(3) 输入串(a,(a,a))# 的算符优先分析过程为:第六章例1:有文法: S→(L)|a L→L,S|S给此文法配上语义动作子程序(或者说为此文法写一个语法制导定义),它输出配对括号的个数。
如对于句子(a,(a,a)),输出是2。
解:加入新开始符号S'和产生式S'→S,设num 为综合属性,代表值属性,则语法制导定义如下:产生式语义规则S'→S print(S.num)S→(L) S.num:=L.num+1S→a S.num:=0L→L1,S L.num:=L1.num+S.numL→S L.num:=S.num例2:构造属性文法,能对下面的文法,只利用综合属性获得类型信息。
D → L,id | L L → T id T → int | real解:属性文法(语法制导)定义:产生式语义规则D → L,id D.type:=L.typeaddtype(id.entry,L.type)D → L D.type:=L.typeL → T id L.type:=T.typeaddtype(id.entry,T.type)T → int T.type:=integerT → real T.type:=real第七章例1:给出下面表达式的逆波兰表示(后缀式):(1) a*(-b+c)(2) if(x+y)*z=0 then s:=(a+b)*c else s:=a*b*c解:(1) ab-c+*(2) xy+z*0=sab+c*:=sab*c*:=¥(注:¥表示if-then-else 运算)例2:请将表达式-(a+b)*(c+d)-(a+b)分别表示成三元式、间接三元式和四元式序列。
解:三元式间接三元式(1) (+ a, b) 间接三元式序列间接码表(2) (+ c, d) (1) (+ a, b) (1)(3) (* (1), (2)) (2) (+ c, d) (2)(4) (- (3), /) (3) (* (1), (2)) (3)(5) (+ a, b) (4) (- (3), /) (4)(6) (- (4), (5)) (5) (- (4), (1)) (1)(5)四元式(1) (+, a, b, t1) (2) (+, c, d, t2)(3) (*, t1, t2, t3) (4) (-, t3, /, t4)(5) (+, a, b, t5) (6) (-, t4, t5, t6)例3:请将下列语句while (A<B) do if (C>D) then X:=Y+Z翻译成四元式解:假定翻译的四元式序列从(100)开始:(100) if A<B goto(102)(101) goto (107)(102) if C>D goto(104)(103) goto (100)(104) T∶=Y+Z(105) X∶=T(106) goto (100)(107)例4:写出for 语句的翻译方案解:产生式动作S → for E do S1 S.begin := newlabelS.first := newtempst := newtempS.curr:= newtempS.code:=gen(S.first “:=” E.init)||gen(st “:=” E.final)||gen(“if” S.first “>” st “goto” S.next) ||gen(S.curr “:=” S.first)||gen(S.begin “:” )||gen(“if ” S.curr “>” st “goto” S.next) ||S1.code||gen(S.curr := succ(S.curr))||gen(“goto” S.begin)E → v:=initial to final E.init := initial.placeE.final := final.place第八章例1:C语言中规定变量标识符的定义可分为extern, extern static, auto, local static 和register五种存储类:(1) 对五种存储类所定义的每种变量,分别说明其作用域。
(2) 试给出适合上述存储类变量的内存分配方式。
(3) 符号表中登记的存储类属性,在编译过程中支持什么样的语义检查。
解:(1) extern 定义的变量,其作用域是整个C 语言程序。
extern static 定义的变量,其作用域是该定义所在的C 程序文件。
auto 定义的变量,其作用域是该定义所在的例程。
local static 定义的变量,其作用域是该定义所在的例程。
且在退出该例程时,该变量的值仍保留。
register 定义的变量,其作用域与auto 定义的变量一样。
这种变量的值,在寄存器有条件时,可存放在寄存器中,以提高运行效率。
(2) 对extern 变量,设置一个全局的静态公共区进行分配。
对extern static 变量,为每个C 程序文件,分别设置一个局部静态公共区进行分配。
对auto 和register 变量,设定它们在该例程的动态区中的相对区头的位移量。
而例程动态区在运行时再做动态分配。