1、编译原理期末考试复习题编译原理参考题目第一套一、判断题1用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行 ”这种说法。( N)2若一个句型中出现了某产生式的右部,则此右部一定是该句型的句柄。( N)3一个句型的句柄一定是文法某产生式的右部。 (Y )4在程序中标识符的出现仅为使用性的。 ( N)5仅考虑一个基本块,不能确定一个赋值是否真是无用的。 (Y )6削减运算强度破坏了临时变量在一基本块内仅被定义一次的特性。 (Y )7在中间代码优化中循环上的优化主要有不变表达式外提和削减运算强度。 (N )8算符优先关系表不一定存在对应的优先函数。 ( N)9数组元素的地址计算与数组的
2、存储方式有关。 (N )10编译程序与具体的机器有关,与具体的语言无关。 (N )参考答案:1、 2、 3、 4、 5、6、 7、 8、 9、 10、二、选择题1 通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括_。A模拟执行器 B解释器 C表格处理和出错处理 D符号执行器2 文法 GN= ( b , N , B , N , NbbB , BbN ),该文法所描述的语言是 A L(GN)=bii0 B L(GN)=b2ii0 C L(GN)=b2i+1i0 D L(GN)=b2i+1i13 一个句型中的最左_称为该句型的句柄。 A短语 B
3、简单短语 C素短语 D终结符号 4 设 G 是一个给定的文法, S 是文法的开始符号,如果 S-x( 其中 xV*), 则称 x 是文法 G 的一个_。 A候选式 B句型 C单词 D产生式 5 文法 GE : ETE T TFT F Fa ( E ) 该文法句型 E F (E T) 的简单短语是下列符号串中的_。 ( E T ) E T F F (E T) A 和 B 和 C 和 D 6 若一个文法是递归的,则它所产生的语言的句子_。A( ) 是无穷多个 B( ) 是有穷多个 C( ) 是可枚举的 D( ) 个数是常量 7 词法分析器用于识别_。 A( ) 句子 B( ) 句型 C( ) 单词
4、 D( ) 产生式 8 在语法分析处理中, FIRST 集合、 FOLLOW 集合、 SELECT 集合均是_。 A. ( ) 非终极符集 B( ) 终极符集 C( ) 字母表 D. ( ) 状态集 9 在自底向上的语法分析方法中,分析的关键是_。 A.( ) 寻找句柄 B.( ) 寻找句型 C.( ) 消除递归 D.( ) 选择候选式 10 在 LR 分析法中,分析栈中存放的状态是识别规范句型_的 DFA 状态。 A.( )句柄 B.( ) 前缀 C.( )活前缀 D.( ) LR(0) 项目参考答案:1、C 2、C 3、B 4、B 5、B6、A 7、C 8、B 9、D 10、C三、填空题1
5、设G是一个给定的文法,S是文法的开始符号,如果S-x( 其中 xVT*), 则称 x是文法的一个_句子_。 2递归下降法不允许任一非终极符是直接 左 递归的。3自顶向下的语法分析方法的基本思想是:从文法的_开始符号_开始,根据给定的输入串并按照文法的产生式一步一步的向下进行_直接推导_,试图推导出文法的_句子_,使之与给定的输入串_匹配_。 4自底向上的语法分析方法的基本思想是:从输入串入手,利用文法的产生式一步一步地向上进行_直接规约_ ,力求 归约到文法的_开始符号_。 5常用的参数传递方式有_传地址_,传值和传名。 6在使用高级语言编程时,首先可通过编译程序发现源程序的全部_语法_错误和
6、语义部分错误。参考答案:1句子2左3开始符号 直接推导 句子 匹配4直接归约 开始符号5传地址6语法四、简答题1. 已知文法 GS 为: SdAB AaA|a BBb| GS 产生的语言是什么? 参考答案:答:GS产生的语言是L(GS)=danbmn1,m0。 2. 简述 DFA 与 NFA 有何区别 ? 参考答案:答:DFA与NFA的区别表现为两个方面:一是NFA可以若干个开始状态,而DFA仅只一个开始状态。 另一方面,DFA的映象M是从K到K,而NFA的映象M是从K到K的子集, 即映象M将产生一个状态集合(可能为空集),而不是单个状态。 5. 何谓优化?按所涉及的程序范围可分为哪几级优化?
7、参考答案:(1)优化:对程序进行各种等价变换,使得从变换后的程序出发,能产生更有效的目标代码。 (2) 三种级别:局部优化、循环优化、全局优化。五.计算题(10分) 对下面的文法 G : E-TE E-+E| T-FT T -T| F- PF F- *F| P-(E)|a|b| (1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW 集。参考答案:解:(1)计算这个文法的每个非终结符的FIRST集和FOLLOW集。FIRST集合有:FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)=(,a,b,;FIRST(E)=+,FIRST(T)=FIRST(F)=FIRS
8、T(P)=(,a,b,;FIRST(T)=FIRST(T)=(,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)FOLLOW(E)=+,),#;/不包含FOLLOW(T)=FOLLOW(T)=FIRST(E)FOLLOW(E)=+,),#;FOLLOW(F)=FIRST(T)FOLLOW(T)=(,a,b,+,),#;/不包含FOLLOW(F)=FOLLOW(F)=FIRST(T
9、)FOLLOW(T)=(,a,b,+,),#;FOLLOW(P)=FIRST(F)FOLLOW(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(T/)=+,),#;SELECT(F-PF)=FIRST(P)=(,a,b,; SELECT(F-*F)=*
10、;SELECT(F-)=FOLLOW(F)=(,a,b,+,),#; SELECT(P-(E)=(SELECT(P-a)=aSELECT(P-b)=bSELECT(P-)=可见,相同左部产生式的SELECT集的交集均为空,所以文法GE是LL(1)文法。(3)构造它的预测分析表。文法GE的预测分析表如下:第二套一、判断题1对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。( N)2甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。( N)3递归下降分析法是自顶向上分析方法。( Y)4产生式是用于定义词法成分 的一种书写规则。 (N )5LR 法是自顶向下
11、语法分析方法。 (Y )6在 SLR ( 1 )分析法的名称中,S的含义是简单的。(Y )7综合属性是用于 “ 自上而下 ” 传递信息。(N )8符号表中的信息栏中登记了每个名字的 属性和特征等有关信息 ,如类型、种属、所占单元大小、地址等等。 (N )9程序语言的语言处理程序是一种应用软件。 ( N)10解释程序适用于 COBOL 和 FORTRAN 语言。 ( N)二、选择题1 文法 G 产生的_的全体是该文法描述的语言。 A( ) 句型 B( ) 终结符集 C( ) 非终结符集 D( ) 句子2 若文法 G 定义的语言是无限集,则文法必然是 _。 A( ) 递归的 B( ) 前后文无关的
12、C( ) 二义性的 D( ) 无二义性的3 四种形式语言文法中,1型文法又称为 _文法。 A( ) 短语结构文法 B( ) 前后文无关文法 C( ) 前后文有关文法 D( ) 正规文法 4 一个文法所描述的语言是_。 A( ) 唯一的 B( ) 不唯一的 C( ) 可能唯一,好可能不唯一 D( ) 都不对5 _和代码优化部分不是每个编译程序都必需的。 A( ) 语法分析 B( ) 中间代码生成 C( ) 词法分析 D( ) 目标代码生成 6_是两类程序语言处理程序。 A( ) 高级语言程序和低级语言程序 B( ) 解释程序和编译程序 C( ) 编译程序和操作系统 D( ) 系统程序和应用程序
13、7 数组的内情向量中肯定不含有数组的_的信息。 A. ( ) 维数 B( ) 类型 C( ) 维上下界 D( ) 各维的界差 8. 一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 _。 A( ) 句子 B( ) 句型 C( ) 单词 D( ) 产生式9 文法分为四种类型,即0型、1型、2型、3型。其中2型文法是_。 A. ( ) 短语文法 B( ) 正则文法 C( ) 上下文有关文法D( ) 上下文无关文法10文法 G 所描述的语言是_的集合。 A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串 B( ) 文法 G 的字母表 V
14、 的闭包 V* 中的所有符号串 C( ) 由文法的开始符号推出的所有终极符串 D. ( ) 由文法的开始符号推出的所有符号串参考答案:1、D 2、A 3、C 4、A 5、B6、B 7、A 8、D 9、D 10、C三、填空题1一个句型中的最左简单短语称为该句型的_句柄_。 2对于文法的每个产生式都配备了一组属性的计算规则,称为 _语义规则_ 。3一个典型的编译程序中,不仅包括_词法分析_、_语法分析_、_中间代码生成_、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。4 从功能上说,程序语言的语句大体可分为_执行性_语句和_说明性_语句两大类。5 扫描器的任务是从_源程序_中识别出
15、一个个_单词符号_。 6 产生式是用于定义_语法范畴_的一种书写规则。参考答案:1句柄2语义规则3词法分析 语法分析 中间代码生成4执行性 说明性5源程序 单词符号6语法范畴四、简答题1. 写一个文法,使其语言是奇数集,且每个奇数不以0开头。 参考答案:解:文法G(N): NAB|B AAC|D B1|3|5|7|9 DB|2|4|6|8 C0|D五、计算题已知 NFA= ( x,y,z,0,1,M,x,z ),其中:M(x,0)=z,M(y,0)=x,y,M(z,0)=x,z,M(x,1)=x, M(y,1)= ,M(z,1)=y, 构造相应的DFA并最小化。 参考答案:解:根据题意有NFA
16、图: 下表由子集法将NFA转换为DFA:下面将该DFA最小化: (1) 首先将它的状态集分成两个子集:P1=A,D,E,P2=B,C,F (2) 区分P2:由于F(F,1)=F(C,1)=E,F(F,0)=F并且F(C,0)=C,所以F,C等价。由于F(B,0)=F(C,0)=C, F(B,1)=D,F(C,1)=E,而D,E不等价(见下步),从而B与C,F可以区分。有P21=C,F,P22=B。 (3) 区分P1:由于A,E输入0到终态,而D输入0不到终态,所以D与A,E可以区分,有P11=A,E,P12=D。 (4) 由于F(A,0)=B,F(E,0)=F,而B,F不等价,所以A,E可以区
17、分。 (5) 综上所述,DFA可以区分为P=A,B,D,E,C,F。所以最小化的DFA如下:第三套一、判断题1一个 LL(l)文法一定是无二义的。 ( N)2正规文法产生的语言都可以用上下文无关文法来描述。 ( N)3一张转换图只包含有限个状态,其中有一个被认为是初态,最多只有一个终态。 ( Y)4目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。 ( N)5逆波兰法表示的表达式亦称前缀式 。 (Y )6如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。 (Y )7LR 法是自顶向下语法分析方法。 ( N)8数组元素的地址计算与数组的存储方式有关。( N)9算符优先关系
18、表不一定存在对应的优先函数。 (N )10对于数据空间的存贮分配, FORTRAN 采用动态贮存分配策略。 (N )参考答案:1、 2、 3、 4、 5、6、 7、 8、 9、 10、二、选择题1词法分析器用于识别_。 A( ) 字符串 B( )语句 C( )单词 D( )标识符2文法分为四种类型,即0型、1型、2型、3型。其中0型文法是_。 A. ( ) 短语文法 B( ) 正则文法 C( ) 上下文有关文法D( ) 上下文无关文法3一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 _。 A( ) 句子 B( ) 句型 C( ) 单词 D
19、( ) 产生式4_是一种典型的解释型语言。 A( ) BASIC B( ) C C( ) FORTRAN D( ) PASCAL5与编译系统相比,解释系统_。 A( ) 比较简单 , 可移植性好 , 执行速度快 B( ) 比较复杂 , 可移植性好 , 执行速度快 C( ) 比较简单 , 可移植性差 , 执行速度慢 D( ) 比较简单 , 可移植性好 , 执行速度慢 6用高级语言编写的程序经编译后产生的程序叫_。 A( ) 源程序 B( ) 目标程序 C( ) 连接程序 D( ) 解释程序7词法分析器用于识别_。 A. ( ) 字符串 B( ) 语句 C( ) 单词 D( ) 标识符 8编写一个
20、计算机高级语言的源程序后 , 到正式上机运行之前,一般要经过_这几步: (1) 编辑 (2) 编译 (3) 连接 (4) 运行 A. ( ) (1)(2)(3)(4) B( ) (1)(2)(3) C( ) (1)(3) D( ) (1)(4)9把汇编语言程序翻译成机器可执行的目标程序的工作是由_完成的。 A( ) 编译器 B( ) 汇编器 C( ) 解释器 D( ) 预处理器10文法 G 所描述的语言是_的集合。 A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串 B( ) 文法 G 的字母表 V 的闭包 V* 中的所有符号串 C( ) 由文法的开始符号推出的所有终极符串 D. (
21、 ) 由文法的开始符号推出的所有符号串参考答案:1、C 2、A 3、D 4、A 5、D6、B 7、C 8、B 9、B 10、C三、填空题1语法分析是依据语言的_语法_规则进行的,中间代码产生是依据语言的_语义_规进行的。2语法分析器的输入是单词符号串_,其输出是_语法单位_。3一个名字的属性包括_类型_和_作用域_。4产生式是用于定义_语法成分_的一种书写规则。5逆波兰式 ab+c+ d*e- 所表达的表达式为 (a+b+c)*d-e _ 。 6语法分析最常用的两类方法是_自上而下_和_自下而上_分析法。 参考答案:1语法 语义 2单词符号串 语法单位 3类型 作用域4语法成分5(a+b+c)
22、*d-e6自上而下 自下而上四、简答题1. 写出下列表达式的三地址形式的中间表示。(1) 5+6 *(a + b); (2)for j:=1 to 10 do aj + j:=0。参考答案:答: (1)100: t1:=a+b 101: t2:=6*t1 102: t3:=5+t2 (2)100: j:=1 101: if j10 goto NEXT 102: i:=j+j 103: ai:=0 3. 写出表达式(a+b)/(a-b)-(a+b*c)的三元序列及四元序列。参考答案:解:(1)三元式: (,a,b) (,a,b) (/,) (*,b,c) (,a,) (,) (2)四元式: (,
23、a,b,T1) (,a,b,T2) (/,T1,T2,T3) (*,b,c,T4) (,a,T4,T5) (,T3,T5,T6) 4. 写一个文法使其语言为偶数集,且每个偶数不以0开头。 参考答案:解:文法G(S): SAB|B|A0 AAD|C B2|4|6|8 C1|3|5|7|9|B D0|C 5. 设文法 G ( S ): SS aF|aF| aF F*aF|*a (1)消除左递归和回溯;(2)构造相应的 FIRST 和 Follow 集合。参考答案:(1) S-aFS|aFS S-aFS| F-*aF F-F| (2) FIRST(S)a,+ FOLLOW(S) FIRST(S)+,
24、 FOLLOW(S) FIRST(F)* FOLLoW(F)(+, FIRST(F)*, FOLLOW(+,第四套一、判断题1编译程序是对高级语言程序的解释执行。( N)2一个有限状态自动机中,有且仅有一个唯一的终态。( N)3一个算符优先文法可能不存在算符优先函数与之对应。 ( Y)4语法分析时必须先消除文法中的左递归 。 (N )5LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。 (Y )6逆波兰表示法表示表达式时无须使用括号。 (Y )7静态数组的存储空间可以在编译时确定。 (X )8进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。 (
25、X )9两个正规集相等的必要条件是他们对应的正规式等价。 ( Y)10一个语义子程序描述了一个文法所对应的翻译工作。 ( X)参考答案:1、 2、 3、 4、 5、6、 7、 8、 9、 10、二、选择题1词法分析器的输出结果是_。 A( ) 单词的种别编码 B( ) 单词在符号表中的位置 C( ) 单词的种别编码和自身值 D( ) 单词自身值2 正规式 M 1 和 M 2 等价是指_。 A( ) M1和M2的状态数相等 B( ) M1和M2的有向边条数相等 C( ) M1和M2所识别的语言集相等 D( ) M1和M2状态数和有向边条数相等 3 文法G:SxSx|y所识别的语言是_。 A( )
26、 xyx B( ) (xyx)* C( ) xnyxn(n0) D( ) x*yx* 4如果文法G是无二义的,则它的任何句子_。 A( )最左推导和最右推导对应的语法树必定相同 B( ) 最左推导和最右推导对应的语法树可能不同 C( ) 最左推导和最右推导必定相同 D( )可能存在两个不同的最左推导,但它们对应的语法树相同 5构造编译程序应掌握_。 A( )源程序 B( ) 目标语言 C( ) 编译方法 D( ) 以上三项都是 6四元式之间的联系是通过_实现的。 A( ) 指示器 B( ) 临时变量 C( ) 符号表 D( ) 程序变量 7表达式(AB)(CD)的逆波兰表示为_。 A. ( ) ABCD B( ) ABCD C( ) ABCD D( ) ABCD 8. 优化可生成_的目标代码。 A( ) 运行时间较短 B( ) 占用存储空间较小 C( ) 运行时间短但占用内存空间大 D( ) 运行时间短且占用存储空间小9下列_优化方法不是针对循环优化进行的。A. ( ) 强度削弱 B( ) 删除归纳变量 C( ) 删除多余运算 D( ) 代码外提10编译程序使用_区别标识符的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1