1、编译原理考试题及答案汇总一、选择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
2、a+b/(c+d) D a+b+c/d 6 一个编译程序中,不仅包含词法分析,_A_,中间代码生成,代码优化, 目标代码生成等五个部分。A( ) 语法分析 B( )文法分析 C( )语言分析 D( )解释分析 7 词法分析器用于识别_C_。A( ) 字符串 B( )语句 C( )单词 D( )标识符8 语法分析器则可以发现源程序中的_D_。A( ) 语义错误 B( ) 语法和语义错误C( ) 错误并校正 D( ) 语法错误9 下面关于解释程序的描述正确的是_B_。(1) 解释程序的特点是处理程序时不产生目标代码 (2) 解释程序适用于 COBOL 和 FORTRAN 语言 (3) 解释程序是为
3、打开编译程序技术的僵局而开发的 A( ) (1)(2) B( ) (1) C( ) (1)(2)(3) D( ) (2)(3)10 解释程序处理语言时 , 大多数采用的是_B_方法。A( ) 源程序命令被逐个直接解释执行B( ) 先将源程序转化为中间代码 , 再解释执行C( ) 先将源程序解释转化为目标程序 , 再执行D( ) 以上方法都可以11 编译过程中 , 语法分析器的任务就是_B_。(1) 分析单词是怎样构成的 (2) 分析单词串是如何构成语句和说明的(3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构A( ) (2)(3) B( ) (2)(3)(4)C( ) (1)(2)
4、(3) D( ) (1)(2)(3)(4) 12 编译程序是一种_C_。A. ( ) 汇编程序 B( ) 翻译程序 C( ) 解释程序 D( ) 目标程序13 文法 G 所描述的语言是_C_的集合。A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串B( ) 文法 G 的字母表 V 的闭包 V* 中的所有符号串C( ) 由文法的开始符号推出的所有终极符串D. ( ) 由文法的开始符号推出的所有符号串14 文法分为四种类型,即 0 型、1 型、2 型、3 型。其中 3 型文法是_B_。 A. ( ) 短语文法 B( ) 正则文法 C( ) 上下文有关文法 D( ) 上下文无关文法15 一
5、个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一 组终结符号,一个开始符号,以及一组 _D_。A( ) 句子 B( ) 句型 C( ) 单词 D( ) 产生式16 通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目 标代码生成等五个部分,还应包括_C_。A( ) 模拟执行器 B ( ) 解释器C( ) 表格处理和出错处理 D( ) 符号执行器17 文法 GN= ( b , N , B , N , Nb bB , BbN ) ,该文法所描述 的语言是 CA( ) L(GN)=bi i 0 B( ) L(GN)=b2i i 0C( ) L(GN)=b2i+
6、1 i 0 D( ) L(GN)=b2i+1 i 118 一个句型中的最左_B_称为该句型的句柄。A( ) 短语 B( ) 简单短语 C( ) 素短语 D( ) 终结符号19设 G 是一个给定的文法,S 是文法的开始符号,如果 S-x( 其中 xV*), 则称 x 是文法 G 的一个_B_。A( ) 候选式 B ( ) 句型 C( ) 单词 D( ) 产生式20 文法 GE :E TE TT FT FF a ( E )该文法句型 E F (E T) 的简单短语是下列符号串中的_。 ( E T ) E T F F (E T)A( ) 和 B( ) 和 C( ) 和 D( ) 21 若一个文法是递
7、归的,则它所产生的语言的句子_A_。A( ) 是无穷多个 B ( ) 是有穷多个C( ) 是可枚举的 D( ) 个数是常量22 词法分析器用于识别_C_。A( ) 句子 B ( ) 句型 C( ) 单词 D( ) 产生式23 在语法分析处理中, FIRST 集合、 FOLLOW 集合、 SELECT 集合均是_B_。A . ( ) 非终极符集 B ( ) 终极符集 C( ) 字母表 D . ( ) 状态集24 在自底向上的语法分析方法中,分析的关键是_A_。A .( ) 寻找句柄 B .( ) 寻找句型 C .( ) 消除递归 D .( ) 选择候选式25 在 LR 分析法中,分析栈中存放的状
8、态是识别规范句型_C_的 DFA 状态。A .( ) 句柄 B .( ) 前缀 C .( ) 活前缀 D .( ) LR(0) 项目26 文法 G 产生的_D_的全体是该文法描述的语言。A( ) 句型 B( ) 终结符集 C( ) 非终结符集 D( ) 句子27 若文法 G 定义的语言是无限集,则文法必然是 _A_A( ) 递归的 B ( ) 前后文无关的C ( ) 二义性的 D( ) 无二义性的28 四种形式语言文法中,1 型文法又称为 _A_文法。A( ) 短语结构文法 B ( ) 前后文无关文法C( ) 前后文有关文法 D( ) 正规文法29 一个文法所描述的语言是_A_。A( ) 唯一
9、的 B( ) 不唯一的C( ) 可能唯一,好可能不唯一 D( ) 都不对30 _B_和代码优化部分不是每个编译程序都必需的。 A( ) 语法分析 B ( ) 中间代码生成C( ) 词法分析 D( ) 目标代码生成31_B_是两类程序语言处理程序。A( ) 高级语言程序和低级语言程序 B ( ) 解释程序和编译程序C( ) 编译程序和操作系统 D( ) 系统程序和应用程序32 数组的内情向量中肯定不含有数组的_A_的信息。A . ( ) 维数 B( ) 类型 C( ) 维上下界 D( ) 各维的界差33. 一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符
10、号,以及一组 _D_。A( ) 句子 B( ) 句型C( ) 单词 D( ) 产生式34 文法分为四种类型,即 0 型、1 型、2 型、3 型。其中 2 型文法是_D_。A . ( ) 短语文法 B ( ) 正则文法C( ) 上下文有关文法 D( ) 上下文无关文法35一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 _D_。A( ) 句子 B( ) 句型 C( ) 单词 D( ) 产生式36_A_是一种典型的解释型语言。A( ) BASIC B( ) C C( ) FORTRAN D( ) PASCAL 37与编译系统相比,解释系统_D_
11、。A( ) 比较简单 , 可移植性好 , 执行速度快B( ) 比较复杂 , 可移植性好 , 执行速度快C ( ) 比较简单 , 可移植性差 , 执行速度慢D( ) 比较简单 , 可移植性好 , 执行速度慢38用高级语言编写的程序经编译后产生的程序叫_B_。A( ) 源程序 B ( ) 目标程序 C( ) 连接程序 D( ) 解释程序 39编写一个计算机高级语言的源程序后 , 到正式上机运行之前,一般要经过_B_这几步:(1) 编辑 (2) 编译 (3) 连接 (4) 运行A . ( ) (1)(2)(3)(4) B( ) (1)(2)(3) C( ) (1)(3) D( ) (1)(4) 40
12、把汇编语言程序翻译成机器可执行的目标程序的工作是由_A_完成的。A( ) 编译器 B( ) 汇编器C( ) 解释器 D( ) 预处理器 41词法分析器的输出结果是_C_。A( ) 单词的种别编码 B( ) 单词在符号表中的位置C( ) 单词的种别编码和自身值 D( ) 单词自身值42 文法 G :SxSx|y 所识别的语言是_C_。A( ) xyx B( ) (xyx)* C ( ) xnyxn(n0) D( ) x*yx* 43如果文法 G 是无二义的,则它的任何句子 _A_。A( ) 最左推导和最右推导对应的语法树必定相同 B( ) 最左推导和最右推导对应的语法树可能不同 C( ) 最左推
13、导和最右推导必定相同D( ) 可能存在两个不同的最左推导,但它们对应的语法树相同 44构造编译程序应掌握_D_。A( ) 源程序 B ( ) 目标语言C( ) 编译方法 D( ) 以上三项都是45四元式之间的联系是通过_B_实现的。A( ) 指示器 B ( ) 临时变量C( ) 符号表 D( ) 程序变量46表达式( A B)(CD)的逆波兰表示为_B_。A . ( ) ABCD B ( ) A BCDC( ) AB CD D( ) A B CD47. 优化可生成_D_的目标代码。A( ) 运行时间较短 B( ) 占用存储空间较小C( ) 运行时间短但占用内存空间大 D( ) 运行时间短且占用
14、存储空间小48下列_C_优化方法不是针对循环优化进行的。A . ( ) 强度削弱 B ( ) 删除归纳变量C( ) 删除多余运算 D( ) 代码外提49编译程序使用_B_区别标识符的作用域。 A . ( ) 说明标识符的过程或函数名B( ) 说明标识符的过程或函数的静态层次C( ) 说明标识符的过程或函数的动态层次 D . ( ) 标识符的行号50编译程序绝大多数时间花在_D_ 上。 A( ) 出错处理 B( ) 词法分析 C( ) 目标代码生成 D( ) 表格管理51 编译程序是对_D_。A( ) 汇编程序的翻译 B ( ) 高级语言程序的解释执行C( ) 机器语言的执行 D( ) 高级语言
15、的翻译52 采用自上而下分析,必须_C_。A( ) 消除左递归 B ( ) 消除右递归C( ) 消除回溯 D( ) 提取公共左因子53在规范归约中,用_B_来刻画可归约串。A( ) 直接短语 B( ) 句柄C( ) 最左素短语 D( ) 素短语54 若 a 为终结符,则 A - a 为_B_项目。A( ) 归约 B ( ) 移进 C( ) 接受 D( ) 待约55间接三元式表示法的优点为_A_。A( ) 采用间接码表,便于优化处理 B ( ) 节省存储空间,不便于表的修改C( ) 便于优化处理,节省存储空间 D( ) 节省存储空间,不便于优化处理56基本块内的优化为_B_。A . ( ) 代码
16、外提,删除归纳变量 B( ) 删除多余运算,删除无用赋值C( ) 强度削弱,代码外提 D( ) 循环展开,循环合并57 在目标代码生成阶段,符号表用_D_。A( ) 目标代码生成 B( ) 语义检查 C( ) 语法检查 D( ) 地址分配58若项目集 Ik 含有 A - ,则在状态 k 时,仅当面临的输入符号 aFOLLOW(A)时,才采取“A - ”动作的一定是_D_。A . ( ) LALR 文法 B( ) LR(0)文法C( ) LR(1)文法 D( ) SLR(1)文法59堆式动态分配申请和释放存储空间遵守_D_原则。A . ( ) 先请先放 B( ) 先请后放C( ) 后请先放 D
17、. ( ) 任意二、判断1计算机高级语言翻译成低级语言只有解释一种方式。() 2在编译中进行语法检查的目的是为了发现程序中所有错误。()3甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系 统功能完全相同。 ( )4正则文法其产生式为 A-a , A-Bb, A,BVN , a 、 bVT 。 ()5每个文法都能改写为 LL(1) 文法。 () 6递归下降法不允许任一非终极符是直接左递归的。 () 7算符优先关系表不一定存在对应的优先函数。 () 8自底而上语法分析方法的主要问题是候选式的选择。 ()9LR 法是自顶向下语法分析方法。 ()10简单优先文法允许任意两个产生式具有
18、相同右部。 () 11“ 用高级语言书写的源程序都必须通过编译, 产生目标代码后才能投入运行 ”这种说法。( )12若一个句型中出现了某产生式的右部,则此右部一定是该句型的句柄。( )13一个句型的句柄一定是文法某产生式的右部。 ( )14在程序中标识符的出现仅为使用性的。 ( )15仅考虑一个基本块,不能确定一个赋值是否真是无用的。 ( )16削减运算强度破坏了临时变量在一基本块内仅被定义一次的特性。 ( )17在中间代码优化中循环上的优化主要有不变表达式外提和削减运算强度。 ( )18数组元素的地址计算与数组的存储方式有关。 ( )19编译程序与具体的机器有关,与具体的语言无关。 ( )
19、20递归下降分析法是自顶向上分析方法。( )21产生式是用于定义词法成分 的一种书写规则。 ( )22LR 法是自顶向下语法分析方法。 ()23在 SLR ( 1 )分析法的名称中,S 的含义是简单的。( ) 24综合属性是用于 “ 自上而下 ” 传递信息。( )25符号表中的信息栏中登记了每个名字的 属性和特征等有关信息 ,如类型、种属、所占 单元大小、地址等等。 ( )26程序语言的语言处理程序是一种应用软件。 ( ) 27一个 LL(l)文法一定是无二义的。 ( ) 28正规文法产生的语言都可以用上下文无关文法来描述。 ( )29一张转换图只包含有限个状态,其中有一个被认为是初态,最多只
20、有一个终态。 ( ) 30目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。 ( )31逆波兰法表示的表达式亦称后缀式 。 ( )32如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。 ( )33数组元素的地址计算与数组的存储方式有关。( )34对于数据空间的存贮分配, FORTRAN 采用动态贮存分配策略。 ( )35编译程序是对高级语言程序的解释执行。( ) 36一个有限状态自动机中,有且仅有一个唯一的终态。( ) 37语法分析时必须先消除文法中的左递归 。 ( )38LR 分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。 ( ) 39逆波兰表示
21、法表示表达式时无须使用括号。 ( ) 40静态数组的存储空间可以在编译时确定。 ( ) 41进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。( ) 42两个正规集相等的必要条件是他们对应的正规式等价。( ) 43一个语义子程序描述了一个文法所对应的翻译工作。 ( )44r 和 s 分别是正规式,则有 L(r|s)=L(r)L(s)。( ) 45确定的的自动机以及不确定的自动机都能正确地识别正集()46分析作为单独的一遍来处理较好。 ( )47 LR 分析器的任务就是产生 LR 分析表。 ( ) 48归约和规范推导是互逆的两个过程。 ( )49同心集的合并有可能产生新
22、的“移进”/ “归约” 冲突 ()50.lR 分析技术无法适用二义文法。 ( )51树形表示和四元式不便于优化,而三元式和间接三元式则便于优化。 ( )52序中的表达式语句在语义翻译时不需要回填技术。 ( ) 三、填空1编译程序的工作过程一般可以划分为词法分析, 语法分析,语义分析, 中间代码 生成,代码优化等几个基本阶段,同时还会伴有_ 表格处理_和 _ _出错处理_。 2若源程序是用高级语言编写的,_目标程序_ 是机器语言程序或汇编程序, 则其翻译程序称为 _ 编译程序_ _ 。 3编译方式与解释方式的根本区别在于_是否生成目标代码_。 4对编译程序而言,输入数据是 _源程序_, 输出结果
23、是_ 目标程序_。 5产生式是用于定义_语法成分_的一种书写规则。 6语法分析最常用的两类方法是_自上而下_和_自下而上_ 分析法7设 G 是一个给定的文法,S 是文法的开始符号,如果 S-x( 其中 xVT*), 则称 x 是文 法的一个_句子_。8递归下降法不允许任一非终极符是直接_左_递归的。 9自顶向下的语法分析方法的基本思想是:从文法的_开始符号 _开始,根据给定的输 入串并按照文法的产生式一步一步的向下进行_直接推导 _,试图推导出文法的_句子_,使之与给定的输入串_ 匹配_。 10自底向上的语法分析方法的基本思想是:从输入串入手 ,利用文法的产生式一步一步地 向上进行_直接归约_
24、 ,力求归约到文法的 _开始符号_。 11常用的参数传递方式有_传地址_, 传值和传名。 12在使用高级语言编程时, 首先可通过编译程序发现源程序的全部_语法_错误和语义的部分错误。13一个句型中的最左简单短语称为该句型的 _句柄_。14对于文法的每个产生式都配备了一组属性的计算规则,称为 _语义规则_ 。 15一个典型的编译程序中,不仅包括_词法分析_ 、_语法分析_、_中间代码生成_、 代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。16 从功能上说,程序语言的语句大体可分为_执行性_语句和_ 说明性_ 语句两大类。 17 产生式是用于定义_语法范畴_ 的一种书写规则。18语
25、法分析是依据语言的_语法_ _规则进行的, 中间代码产生是依据语言的_ 语义_规 进行的。19语法分析器的输入是_单词符号串_ ,其输出是_语法单位_。20产生式是用于定义_语法成分 _的一种书写规则。21逆波兰式 ab+c+ d*e- 所表达的表达式为_(a+b+c)*d-e_ 。 22语法分析最常用的两类方法是 _自上而下_和_ 自下而上_ 分析法。23计算机执行用高级语言编写的程序主要有两种途径 :_解释_ 和_编译_。24扫描器是_词法分析器_, 它接受输入的_源程序_,对源程序进行_词法分析_ 并识别出一个个单词符号, 其输出结果是单词符号,供语法分析器使用。 25自上而下分析法采用
26、_移进_、归约、错误处理、_接受_ 等四种操作。26一个 LR 分析器包括两部分:一个总控程序和_一张分析表 _。27后缀式 abc-/所代表的表达式是_ a/(b-c)_。 28局部优化是在_基本块_范围内进行的一种优化。29词法分析基于_正则_ _文法进行, 即识别的单词是该类文法的句子。 30语法分析基于_上下文无关_ 文法进行, 即识别的是该类文法的句子。语法分析的有效 工具是_语法树_。 31分析句型时,应用算符优先分析技术时,每步被直接归约的是 _最左素短语_ ,而应用 LR 分析技术时,每步被直接归约的是 _句柄_。 32语义分析阶段所生成的与源程序等价的中间表示形式可以有_逆波
27、兰_、_ 三元式表示_与_ 四元式表示_等。33按 Chomsky 分类法,文法按照_规则定义的形式_进行分类。34一个文法能用有穷多个规则描述无穷的符号串集合 (语言 )是因为文法中存在有_ 递归 _定义的规则。35一个名字的属性包括_类型_ 和_作用域_。四、综合题1. 已知文法 G(E)E T|ETTF|T *FF (E)|i(1)给出句型(T *Fi)的最右推导;(2)给出句型(T *Fi)的短语、简单短语、句柄、素短语、最左素短语。解: (1) 最右推导:E -T-F-(E)-(E T)-(E F)-(E i)-(Ti)-(T*Fi)(2) 短语:(T*Fi) ,T*Fi ,T*F,
28、i简单短语:T*F,i句柄:T*F素短语:T*F,i最左素短语:T*F2. 构造正规式 1(0|1)*101 相应的 DFA 。解:先构造 NFA :确定化:重新命名,令 AB 为 B、AC 为 C、ABY 为 D 得:所以,可得 DFA 为:3. 文法:S-MH|aH -LSo| K -dML| L -eHfM-K|bLM判断 G 是否为 LL(1) 文法,如果是,构造 LL(1) 分析表。 解:各符号的 FIRST 集和 FOLLOW集为:各产生式SELECT集为:SELECTS-MH d,b,e,#,oS-a aH -LSo eH - #,f,oK -dML dK - e,#,oL -e
29、Hf eM-K d,e,#,oM- bLM b预测分析表第 9 页共 6 页由于预测分析表中无多重入口,所以可判定文法是 LL(1)的。4. 对下面的文法 G :E -TEE-+E| T -FTT -T| F- PFF- *F| P-(E)|a|b|(1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW 集。 (4 分)(2) 证明这个方法是 LL(1) 的。(4 分) (3) 构造它的预测分析表。(2 分) 解:(1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW 集。FIRST 集合有:FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)=(,a
30、,b,;FIRST(E)=+, FIRST(T)=FIRST(F)=FIRST(P)=(,a,b,;FIRST(T)=FIRST(T)U=(,a,b, ;FIRST(F)=FIRST(P)=(,a,b,;FIRST(F)=FIRST(P)=*, ;FIRST(P)=(,a,b,;FOLLOW 集合有:FOLLOW(E)=),#;FOLLOW(E)=FOLLOW(E)=),#; FOLLOW(T)=FIRST(E)UFOLLOW(E)=+,),#;/不包含 FOLLOW(T)=FOLLOW(T)=FIRST(E)UFOLLOW(E)=+,),#; FOLLOW(F)=FIRST(T)UFOLLO
31、W(T)=(,a,b,+,),#;/不包含 FOLLOW(F)=FOLLOW(F)=FIRST(T)UFOLLOW(T)=(,a,b,+,),#; FOLLOW(P)=FIRST(F)UFOLLOW(F)=*,(,a,b,+,),#;/不包含 (2)证明这个方法是 LL(1)的。各产生式的 SELECT 集合有:SELECT(E-TE)=FIRST(T)=(,a,b,;SELECT(E-+E)=+;SELECT(E-)=FOLLOW(E/)=),#SELECT(T-FT)=FIRST(F)=(,a,b,;SELECT(T-T)=FIRST(T)=(,a,b,;SELECT(T-)=FOLLOW
32、(T/)=+,),#;SELECT(F-PF)=FIRST(P)=(,a,b,;SELECT(F-*F)=*;SELECT(F- )=FOLLOW(F)=(,a,b,+,),#;SELECT(P-(E)=(SELECT(P-a)=aSELECT(P-b)=bSELECT(P-)=第 10 页共 6 页可见,相同左部产生式的 SELECT 集的交集均为空,所以文法 GE是 LL(1)文法。(3)构造它的预测分析表。 文法 GE的预测分析表如下:5.已知文法 GS 为:S-a|(T)T- T,S|S(1) 计算 GS 的 FIRSTVT 和 LASTVT 。 (2) 构造 GS 的算符优先关系表并说明 GS 是否未算符优先文法。 (3) 给出输入串 (a,a)# 的算符优先分析过程。解:(1)各符号的 FIRSTVT 和 LASTVT:(2)算符优先关系表:(3)句子(a,a)#分析过程如下: