编译原理复习习题

选填题

1.欲按编译方式在计算机上执行用高级语言编写的程序,一般需要经过两个阶段,第一个阶段编译阶段,第二个阶段运行阶段
2.编译方式和解释方式的根本区别在于编译阶段产生目标程序,解释方式不产生目标程序
3.两个文法G1和G2等价,当且仅当L(G1)=L(G2)
4.假若G是一文法,S是文法的开始符号,如果S→*β,则称β是G的一个句型
5.最右又被称为规范推导,规范规约是最规约
6.左线性文法和右线性文法统称为3型文法(正规文法)
7.一文法能够进行自顶向下的语法分析的前提是不含左递归
8.判断一文法是否为简单优先文法有两个条件,这两个条件分别为文法当中任何两个符号之间至多存在一种优先关系任意两个不同产生式均无相同的右部
9.语法制导的编译程序能够同时进行语法分析语义分析
10.无符号数的识别和计算该常数值的工作,通常都在编译阶段完成
11.文法符号的语义属性有综合属性继承属性
12.动态分配内存的方法有栈式堆式两类,前者适合于可递归调用,具有分程序结构的语言,而后者适合于允许为变量动态申请内存空间的语言
13.语法及语言的乔姆斯基分类中,前后文无关语言的产生式限制为A→a
14.在编译过程中,符号表的主要作用是1.辅助语法错误的检查2.辅助语义的正确性检查3.辅助代码的生成辅助对目标代码的优化
15.编译过程中,语法分析器的任务是1.分析单词串如何构成语言2.分析语句是如何构成程序3.分析程序结构
16.若文法G定义的语言是无限集,则文法必然是递归的
17.Chomsky把文法及语言分为四类,其中1型文法也称为 == 前后文有关文法 == ,3型语言可由某一正规式表示
18.词法分析程序又称为扫描器
19.LL(1)分析方法是一种自顶向下的分析方法
20.

简答题

1.编译程序包括那几个阶段?简述各个阶段的主要任务。

答:编译程序的工作过程是指从输入源代码到输出目标程序为止的整个过程,一般分为:
词法分析,语法分析,语义分析与中间代码生成、优化,目标代码生成。
①词法分析:输入源程序,对构成源程序的字符串进行扫描和分解,识别一个个单词。
②语法分析:根据语言的语法规则,把单词符号串分解成各类语法单元。
③语义分析与中间代码生成:对语法分析所识别的出来的各类语法范畴分析其含义,在进行初步翻译。
⑤优化:对中间代码进行优化产生更高效的目标代码。
目标代码的生成:把中间代码变换成特定机器上的低级代码语言。

2.给出产生语言L(G3)={a的n次方b的n次方|N>=1}的文法G1

答:S→asb|ab
在这里插入图片描述

3.已知文法G(E):

E→T|E+T
T→F|TF
F→i|(E)
求句型E+T
F+i的短语,直接短语,句柄
答:短语:E+TF+i,E+TF,i
直接短语:TF,i
句柄:T
F

4.把下面文法改为无二义的:S→SS|(S)|()

答:
S→TS|T
T→(S)|()

5.写出下列文法的每个非终结符的FIRST和FOLLOW的集合

G:E→E+T|T
T→T*F|F
F→(E)|i
答:

6.什么是局部优化?有哪些技术?

答:局限于基本块范围内的优化称为局部优化
①删除公共子表达式②删除无用赋值③合并已知量④临时变量改名⑤交换语句位置⑥代数变换

7.什么是属性文法?它分为哪两类?

答:属性文法是在上下文无关文法的基础上,为每个文法符号(终结符或者非终结符)配备若干相关的值称之为属性。
分为综合属性和继承属性
综合属性用于自下而上传递信息,继承属性用于“自下而上”传递信息
S-属性文法只有综合属性

8.简述算符优先分析法的特点及过程

答:特点:算符有限分析方法是一种简单直观便于使用的自下而上语法分析方法,也运用于对一般的高级语言程序的四则运算过程而设立的一种方法,也运用于对一般的高级语言程序的分析,但它的可规归约串不一定是句柄,也就是说,算符优先分析过程不是规范规约。
过程:首先确定运算符之间的优先关系和结合性质,然后借助这种关系比较相邻运算符之间的优先级来确定句型的可归约串,并进行归约。

9.给出产生语言L(G)={a的m次方和b的n次方|m,n>1}的文法G

答:S→AB
A→aA|a
B→bB|b

10.给出文法G(S):S→aSa|bbSbb|c所定义的语言

规范句型abbaSabba的短语,直接短语,句柄和素短语
答:
短语:aSa,bbaSabb,abbaSabba
直接短语:aSa
句柄:aSa
素短语:aSa

11.证明下面文法的二义性S→iSeS|iS|i

答:
句子中有两个语法相等
S→iSeS→iSei→iiSei→iiiei
S→iS→iiSeS→iiSei→iiiei

12. 常见的存储分配策略有哪几种?他们都适合与什么性质的语言

答:有三种分配存储空间的方式:
①静态分配:若在编译阶段就能确定源程序中各个数据实体的存储空间大小,则可以采用较简单的静态存储管理。适合静态存储管理的语言应具备:数组上下界实常数,过程调用不允许递,不允许动态建立实体
②栈式分配:使用允许递归调用的程序设计语言
③堆式分配:允许程序运行时变量动态申请和释放存储空间的语言,采用堆式分配是最有效的解决方法

13.什么是语法制导翻译模式

答:这种模式实际上是对前后文无关文法的一种扩充。概括的来说,就是对文法中的每一产生式都附加一个语义或者语义子程序,且在语法分析中,每当需要使用一产生式进行推导或规约时,语法分析程序除执行相应的语法分析动作外,还要执行相应的语义动作或调用相应的语义子程序。每一个相应的语义子程序都指明了相应产生式中个符号的具体含义,并规定使用该产生式进行分析时所采用的语义动作

14.语法树是什么

答:是指若干个节点所组成的有限集合,在两个节点之间,用一条有向边加以连接(如①→②)通常我们把节点一称为节点二的前驱或者父节点;而将节点二称为节点1的直接后继或者子节点,具有如下性质:
①在这些节点中,有一个且仅有一个没有任何前驱节点称为根
②除根之外,每一个1节点都恰好有一个直接前驱
③对于每一个节点,都有唯一一条从根到此节点的通路
④若一个节点有多个直接后继,则按照自左至右的顺序进行排列

15.目标程序有几种形式?

答:目标程序可以有如下三种形式:
1.具有绝对地址的机器语言程序
2.可浮动的机器语言程序
3.汇编语言形式的程序

16.一文法可用四元式表示,请写出文法四元定义式及各元的含义

答:一文法G(S)的四元定义式为:(Vn,Vt,P,S)其中Vn表示非终结符号集,Vt表示终结符号集、P表示产生式集、S表示文法的开始符号且S∈Vn

17.什么是句柄

答:一个句型的最左直接短语,即规范分析中,最先被规约的子串称为该局的句柄

18.LL(1)分析法对文法有哪些要求

答:对于G中每个产生式A→γ1|γ2|γ3|γ4|…|γm,其个候选式均满足:

①γi和γj不能推导出以同一终结符号开始的符号串,即FIRST(γi)∩FIRST(γj)=∅

②若有γj→e,则其余候选式子γi所能推导出来的符号串不能以FOLLOW(A)中的终结符号开始即FIRST(γi)∩FOLLOW(A)=∅

19.什么是活动记录?它主要由哪些内容组成

答:一个过程的一次执行所需要的信息的管理,是通过称为活动记录的连续存储块来实现的。活动记录的主要目标有

1.临时变量域:存放目标程序临时变量的值

2.局部变量域:存放过程本次执行时的局部变量,简单变量及数组内请向量等

3.机器状态域:保存调用过程前有关机器状态的信息,包括各寄存器的当前值及返回地址等

4.存取链:为访问其他活动记录中所存放的非局部数据所提供的链地址

5.控制链:指向主调工程的活动记录

6.实参:存放主调过程提供的实参信息

7.返回值:为主调过程存放被调过程的返回值

20.简述三种存储分配策略适用的语言的特点,并说明活动记录的用途和包含内容

答:①静态分配策略:编译时所有数据对象分配固定的存储单元且在运行时始终保持不变
②栈式动态分配策略:在运行时把存储器作为一个栈进行管理,运行时每当调用一个过程,他所需要的存储空间就动态的分配于栈顶,一旦退出它所占的空间就予以释放
③堆式动态分配策略:在运行时把存储器组织成堆结构,以便用户关于存储空间的申请与归还(回收),凡申请者从堆中分给块,凡释放者退回给堆

计算大题

1.已知右线性正则文法G(M):

M→aM|bN|a|b
N→aN|bN|ε
①写出等价的正则表达式
②构造识别其所定义语言的NFA
③构造识别l的DFA
④构造识别L的最小DFA

答:在这里插入图片描述

2.构造下列正规式相应的DFA,用状态转换图表示

①1(1|0)*1
②0 * 10 * 10 * 10 *1
③letter(letter|digit) *
在这里插入图片描述

3.写出L2={a的n次方b的n+m次方a的m次方|n>=1,m>=0}的的相应文法:

答:
在这里插入图片描述

4.参考文法S→AS|b A→SA|a

①列出这个文法的所有LR(0)的项目
②构造这个文法的LR(0)项目集规范族及识别活前缀的DFA
③这个文法是SLR吗?若是构造出它的SLR分析表
答:

  • 17
    点赞
  • 147
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值