编译原理习题含解答.docx

上传人:b****8 文档编号:11123177 上传时间:2023-02-25 格式:DOCX 页数:40 大小:211.09KB
下载 相关 举报
编译原理习题含解答.docx_第1页
第1页 / 共40页
编译原理习题含解答.docx_第2页
第2页 / 共40页
编译原理习题含解答.docx_第3页
第3页 / 共40页
编译原理习题含解答.docx_第4页
第4页 / 共40页
编译原理习题含解答.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

编译原理习题含解答.docx

《编译原理习题含解答.docx》由会员分享,可在线阅读,更多相关《编译原理习题含解答.docx(40页珍藏版)》请在冰豆网上搜索。

编译原理习题含解答.docx

编译原理习题含解答

2-3习题(含解答)

综合练习一

一、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)

1.一个编译程序中,不仅包含词法分析,A,中间代码生成,代码优化,目标代码生成等五个部分。

 A.语法分析  B.文法分析  C.语言分析  D.解释分析

2.词法分析器用于识别C。

 

 A.字符串   B.语句 C.单词     D.标识符

3.语法分析器则可以发现源程序中的D。

 A.语义错误  B.语法和语义错误 C.错误并校正  D.语法错误

4.下面关于解释程序的描述正确的是B。

 

(1)解释程序的特点是处理程序时不产生目标代码

 

(2)解释程序适用于COBOL和FORTRAN语言

 (3)解释程序是为打开编译程序技术的僵局而开发的 

 A.

(1)

(2)  B.

(1)  C.

(1)

(2)(3)   D.

(2)(3)

5.解释程序处理语言时,大多数采用的是B方法。

 A.源程序命令被逐个直接解释执行   

B.先将源程序转化为中间代码,再解释执行

 C.先将源程序解释转化为目标程序,再执行  

  D.以上方法都可以

6.编译过程中,语法分析器的任务就是B。

 

(1)分析单词是怎样构成的           

(2) 分析单词串是如何构成语句和说明的

 (3)分析语句和说明是如何构成程序的 (4)分析程序的结构

 A.

(2)(3)    B.

(2)(3)(4) C.

(1)

(2)(3)   D.

(1)

(2)(3)(4)

7.编译程序是一种C。

 A.汇编程序   B.翻译程序     C.解释程序       D.目标程序

8.文法G所描述的语言是C的集合。

 A.文法G的字母表V中所有符号组成的符号串

 B.文法G的字母表V的闭包V*中的所有符号串

 C.由文法的开始符号推出的所有终极符串

 D.由文法的开始符号推出的所有符号串

9.文法分为四种类型,即0型、1型、2型、3型。

其中3型文法是B。

 A.短语文法    B.正则文法    C.上下文有关文法  D.上下文无关文法

10.一个上下文无关文法G包括四个组成部分,它们是:

一组非终结符号,一组终结符号,一个开始符号,以及一组D。

 A.句子   B.句型 C.单词   D.产生式

二、填空题(每空1分,共10分)

1.编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,仲间代码生成,代码优化等几个基本阶段,同时还会伴有表格处理和出错处理。

2.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序_。

3.编译方式与解释方式的根本区别在于_是否生成目标代码_。

4.对编译程序而言,输入数据是_源程序,输出结果是_目标程序_。

5.产生式是用于定义_语法成分_的一种书写规则。

6.语法分析最常用的两类方法是_自上而下和_自下而上_分析法。

三、是非题(请在括号内,正确的划√,错误的划)(每个2分,共20分)

1.计算机高级语言翻译成低级语言只有解释一种方式。

(×)

2.在编译中进行语法检查的目的是为了发现程序中所有错误。

(×)

3.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。

(×)

4.正则文法其产生式为A->a,A->Bb,A,B∈VN,a、b∈VT。

(×)

5.每个文法都能改写为LL

(1)文法。

(×)

6.递归下降法允许任一非终结符是直接左递归的。

(×)

7.算符优先关系表不一定存在对应的优先函数。

(×)

8.自底而上语法分析方法的主要问题是候选式的选择。

(√)

9.LR法是自顶向下语法分析方法。

(×)

10.简单优先文法允许任意两个产生式具有相同右部。

(×)

四、简答题(20分)

1.什么是句子?

什么是语言?

答:

(1)设G是一个给定的文法,S是文法的开始符号,如果S

x(其中x∈VT*),则称x是文法的一个句子。

(2)设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为:

L(G)={x│S

x,x∈VT*}。

2.写一文法,使其语言是偶正整数的集合,要求:

   

(1)允许0打头;

   

(2)不允许0打头。

解:

(1)G[S]=({S,P,D,N},{0,1,2,…,9},P,S)

P:

S->PD|D

P->NP|N

D->0|2|4|6|8

N->0|1|2|3|4|5|6|7|8|9

(2)G[S]=({S,P,R,D,N,Q},{0,1,2,…,9},P,S)

P:

S->PD|P0|D

P->NR|N

R->QR|Q

D->2|4|6|8

N->1|2|3|4|5|6|7|8|9

Q->0|1|2|3|4|5|6|7|8|9

3.已知文法G[E]为:

   E→T|E+T|E-T

    T→F|T*F|T/F

    F→(E)|i

①该文法的开始符号(识别符号)是什么?

②请给出该文法的终结符号集合VT和非终结符号集合VN。

③找出句型T+T*F+i的所有短语、简单短语和句柄。

解:

①该文法的开始符号(识别符号)是E。

②该文法的终结符号集合VT={+、-、*、/、(、)、i}。

非终结符号集合VN={E、T、F}。

③句型T+T*F+I的短语为i、T*F、第一个T、T+T*F+i;简单短语为i、T*F、第一个T;句柄为第一个T。

4.构造正规式相应的NFA:

1(0|1)*101。

解:

1(0|1)*101对应的NFA为

5.写出表达式(a+b*c)/(a+b)-d的逆波兰表示和三元式序列。

解:

逆波兰表示:

     abc*+ab+/d-         

三元式序列:

     ①(*,b,c)

     ②(+,a,①)   

  ③(+,a,b)    

 ④(/,②,③)    

 ⑤(-,④,d)

五、计算题(10分)

1.构造下述文法G[S]的自动机:

S->A0

A->A0|S1|0

该自动机是确定的吗?

若不确定,则对它确定化。

解:

由于该文法的产生式S->A0,A->A0|S1中没有字符集VT的输入,所以不是确定的自动机。

要将其他确定化,必须先用代入法得到它对应的正规式。

把S->A0代入产生式A->S1有:

A=A0|A01|0=A(0|01)|0=0(0|01)*。

代入S->A0有该文法的正规式:

0(0|01)*0,所以,改写该文法为确定的自动机为:

由于状态A有3次输入0的重复输入,所以上图只是NFA,下面将它确定化:

DFA:

1

0

0

0

由上表可知DFA为:

 

综合练习二

一、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)

1.通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括_C___。

 A.模拟执行器        B.解释器     C.表格处理和出错处理  D.符号执行器

2.文法G[N]=({b},{N,B},N,{N→b│bB,B→bN}),该文法所描述的语言是_C___。

 A.L(G[N])={bi│i≥0}   B.L(G[N])={b2i│i≥0}

 C.L(G[N])={b2i+1│i≥0}      D.L(G[N])={b2i+1│i≥1}

3.一个句型中的最左__B___称为该句型的句柄。

 A.短语     B.简单短语     C.素短语       D.终结符号

4.设G是一个给定的文法,S是文法的开始符号,如果S->x(其中x∈V*),则称x是文法G的一个__B___。

 A.候选式      B.句型       C.单词       D.产生式

5.文法G[E]:

      E→T∣E+T

      T→F∣T﹡F

      F→a∣(E)

该文法句型E+F﹡(E+T)的简单短语是下列符号串中的__B___。

①(E+T) ②E+T     ③F   ④F﹡(E+T)

 A.①和③   B.②和③   C.③和④     D.()③

6.若一个文法是递归的,则它所产生的语言的句子__A___。

 A.是无穷多个   B.是有穷多个   C.是可枚举的      D.个数是常量

7.词法分析器用于识别_C____。

 A.句子     B.句型       C.单词       D.产生式

8.在语法分析处理中,FIRST集合、FOLLOW集合、SELECT集合均是__B___。

 A.非终结符集     B.终结符集      C.字母表     D.状态集

9.在自底向上的语法分析方法中,分析的关键是__D___。

 A.寻找句柄       B.寻找句型     C.消除递归     D.选择候选式

10.在LR分析法中,分析栈中存放的状态是识别规范句型__C___的DFA状态。

A.句柄           B.前缀         C.活前缀      D.LR(0)项目

二、填空题(每空1分,共10分)

1.设G是一个给定的文法,S是文法的开始符号,如果S->x(其中x∈VT*),则称x是文法的一个_句子_。

2.递归下降法不允许任一非终极符是直接_左_递归的。

3.自顶向下的语法分析方法的基本思想是:

从文法的_开始符号_开始,根据给定的输入串并按照文法的产生式一步一步的向下进行_直接推导_,试图推导出文法的_句子_,使之与给定的输入串_匹配_。

4.自底向上的语法分析方法的基本思想是:

从输入串入手,利用文法的产生式一步一步地向上进行_直接归约,力求归约到文法的_开始符号_。

5.常用的参数传递方式有_传地址_,传值和传名。

6.在使用高级语言编程时,首先可通过编译程序发现源程序的全部_语法_错误和语义部分错误。

三、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)

1.“用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行”这种说法。

(×)

2.若一个句型中出现了某产生式的右部,则此右部一定是该句型的句柄。

(×)

3.一个句型的句柄一定是文法某产生式的右部。

(√)

4.在程序中标识符的出现仅为使用性的。

(×)

5.仅考虑一个基本块,不能确定一个赋值是否真是无用的。

(√)

6.削减运算强度破坏了临时变量在一基本块内仅被定义一次的特性。

(√)

7.在中间代码优化中循环上的优化主要有不变表达式外提和削减运算强度。

(×)

8.算符优先关系表不一定存在对应的优先函数。

(√)

9.数组元素的地址计算与数组的存储方式有关。

(×)

10.编译程序与具体的机器有关,与具体的语言无关。

(×)

四、简答题(20分)

1.已知文法G[S]为:

   S→dAB

   A→aA|a

   B→Bb|ε

   G[S]产生的语言是什么?

答:

G[S]产生的语言是L(G[S])={danbm│n≥1,m≥0}。

2.简述DFA与NFA有何区别?

答:

DFA与NFA的区别表现为两个方面:

一是NFA可以若干个开始状态,而DFA仅只一个开始状态。

另一方面,DFA的映象M是从K×∑到K,而NFA的映象M是从K×∑到K的子集,即映象M将产生一个状态集合(可能为空集),而不是单个状态。

3.构造正规式相应的NFA:

1(1010*|1(010)*1)*0。

解:

1(1010*|1(010)*1)*0对应的NFA为:

4.已知文法G(S)

  S→a|∧|(T)

  T→T,S|S

  写出句子((a,a),a)的规范归约过程及每一步的句柄。

解:

句型     归约规则     句柄      

((a,a),a)  S→a       a     

((S,a),a)  T→S       S     

((T,a),a)  S→a       a      

((T,S),a)  T→T,S     T,S     

((S),a)   T→S       S      

((T),a)   S→S(T)     (T)     

(S,a)    T→S       S      

(T,a)    S→a       a      

(T,S)    T→T,S     T,S    

 (T)     S→(T)      (T)    

 S 

5.何谓优化?

按所涉及的程序范围可分为哪几级优化?

解:

(1)优化:

对程序进行各种等价变换,使得从变换后的程序出发,能产生更有效的目标代码。

        

(2)三种级别:

局部优化、循环优化、全局优化。

五、计算题(10分)

1.对下面的文法G:

  E->TE'

  E'->+E|ε

  T->FT'

  T'->T|ε

  F->PF'

  F'->*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,b,^};

FIRST(E')={+,ε}

FIRST(T)=FIRST(F)=FIRST(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')∪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')={*};

SELECT(F'->ε)=FOLLOW(F')={(,a,b,^,+,),#};

SELECT(P->(E))={(}

SELECT(P->a)={a}

SELECT(P->b)={b}

SELECT(P->^)={^}

可见,相同左部产生式的SELECT集的交集均为空,所以文法G[E]是LL

(1)文法。

(3)构造它的预测分析表。

文法G[E]的预测分析表如下:

 

 

综合练习三

一、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)

1.文法G产生的__D___的全体是该文法描述的语言。

 A.句型  B.终结符集  C.非终结符集  D.句子

2.若文法G定义的语言是无限集,则文法必然是_A____。

 

 A.递归的   B.前后文无关的  C.二义性的  D.无二义性的

3.四种形式语言文法中,1型文法又称为__C___文法。

 A.短语结构文法    B.前后文无关文法  C.前后文有关文法   D.正规文法

4.一个文法所描述的语言是__A__。

 A.唯一的          B.不唯一的 

  C.可能唯一,好可能不唯一   D.都不对

5.__B___和代码优化部分不是每个编译程序都必需的。

 A.语法分析      B.中间代码生成     C.词法分析     D.目标代码生成

6.__B___是两类程序语言处理程序。

 A.高级语言程序和低级语言程序         B.解释程序和编译程序

 C.编译程序和操作系统                 D.系统程序和应用程序

7.数组的内情向量中肯定不含有数组的__A___的信息。

 A.维数    B.类型      C.维上下界       D.各维的界差

8.一个上下文无关文法G包括四个组成部分,它们是:

一组非终结符号,一组终结符号,一个开始符号,以及一组__D___。

 A.句子  B.句型 C.单词  D.产生式

9.文法分为四种类型,即0型、1型、2型、3型。

其中2型文法是__D___。

 A.短语文法      B.正则文法    C.上下文有关文法 D.上下文无关文法

10.文法G所描述的语言是__C___的集合。

 A.文法G的字母表V中所有符号组成的符号串

 B.文法G的字母表V的闭包V*中的所有符号串

 C.由文法的开始符号推出的所有终极符串

 D.由文法的开始符号推出的所有符号串

二、填空题(每空1分,共10分)

1.一个句型中的最左简单短语称为该句型的_句柄_。

2.对于文法的每个产生式都配备了一组属性的计算规则,称为语义规则_。

3.一个典型的编译程序中,不仅包括_词法分析_、_语法分析_、_中间代码生成_、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。

4.从功能上说,程序语言的语句大体可分为_执行性语句和_说明性_语句两大类。

5.扫描器的任务是从_源程序中识别出一个个_单词符号_。

6.产生式是用于定义_语法范畴_的一种书写规则。

三、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)

1.对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。

(×)

2.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。

(×)

3.递归下降分析法是自顶向下分析方法。

(√)

4.产生式是用于定义词法成分的一种书写规则。

(×)

5.LR法是自底向上语法分析方法。

(√)

6.在SLR

(1)分析法的名称中,S的含义是简单的。

(√)

7.综合属性是用于“自上而下”传递信息。

(×)

8.符号表中的信息栏中登记了每个名字的属性和特征等有关信息,如类型、种属、所占单元大小、地址等等。

(×)

9.程序语言的语言处理程序是一种应用软件。

(×)

10.解释程序适用于COBOL和FORTRAN语言。

(×)

四、简答题(20分)

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

解:

文法G(N):

       

N→AB|B        

A→AC|D        

B→1|3|5|7|9        

D→B|2|4|6|8       

C→0|D 

2.设文法G(S):

    S→(L)|aS|a

    L→L,S|S

   

(1)消除左递归和回溯;

   

(2)计算每个非终结符的FIRST和FOLLOW。

解:

(1)         

S→(L)|aS'        

 S'→S|ε       

 L→SL'       

 L'→SL'|ε    

  

(2)     

   FIRST)S)={(,a}    FOLLOW(S)={#,,,)}      

   FIRST(S')={,a,ε}  FOLLOW(S')={#,,,)}      

  FIRST(L)={(,a}    FOLLOW(L)={)}      

   FIRST(L')={,,ε}  FOLLOW(L'〕={)}

3.已知文法G(E)

  E→T|E+T

  T→F|T*F

  F→(E)|i

  

(1)给出句型(T*F+i)的最右推导;

  

(2)给出句型(T*F+i)的短语、素短语。

解:

(1)最右推导:

 E=>T=>F=>(E)=>(E+T)=>(E+F)=>(E+i)

      =>(T+i)=>(T*F+i)

(2)短语:

(T*F+i),T*F+i,T*F,i    

素短语:

T*F,i

4.While a>0∨b<0 do

    Begin

      X:

=X+1;

      ifa>0thena:

=a-1

          elseb:

=b+1

    End;

    翻译成四元式序列。

解:

(1)(j>,a,0,5)  

  

(2)(j,-,-,3)   

  (3)(j<,b,0,5)  

  (4)(j,-,-,15)   

  (5)(+,×,1,T1)   

  (6)(:

=,T1,-,×)  

  (7)(j≥,a,0,9)   

  (8)(j,-,-,12)   

  (9)(-,a,1,T2)   

  (10)(:

=,T2,-,a)  

  (11)(j,-,-,1)  

  (12)(+,b,1,T3) 

  (13)(:

=,T3,-,b)  

  (14)(j,-,-,1) 

五、计算题(10分)

已知

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1