广工编译原理复习

广工编译原理复习
广工编译原理复习

编译原理复习

——Always麦

第一章引论

●什么是编译程序:

翻译程序:将一种语言(源语言)翻译成另一种逻辑上等价的语言(目标语言)的程序。

编译程序:源语言为高级语言,目标语言是低级语言(汇编或机器语言)的翻译程序。

●图

●图1.10 编译程序结构框图 P6

●前端、后端的概念:

前端:与源语言有关,而与目标机无关的编译程序

后端:与目标机有关,而与源语言无关的编译程序

●遍、趟的概念:是对源程序或源程序的中间结果从头到尾扫描并完成规定任

务的过程

第二章PL/0 编译程序的实现

●P18 三个变量

通过三个全程量 SYM 、ID和NUM 将识别出的单词信息传递给语法分析程序。

SYM:存放单词的类别,用内部编码形式表示。

ID:存放用户所定义的标识符的值。即标识符字符串的机内表示。

NUM:存放用户定义的数。

●P22 符号表【画】

TX: table表的下标指针,是以值参数形式使用的。

DX:计算每个变量在运行栈中相对本过程基地址的偏移量,每次都会初始化为3

●P29 运行栈【画】

RA返回地址:记录调用该过程时目标程序的断点,即调用过程指令的下一条

指令的地址

DL动态链:指向调用该过程前正在运行过程的数据段基地址。

SL静态链:指向定义该过程的直接外过程(或主程序)运行时最新数据段的

基地址

●P28 I P T 寄存器

I:指令寄存器。存放当前正在解释的一条目标指令

P:程序地址寄存器。指向下一条要执行的目标程序的地址

T:栈顶寄存器。指向当前栈中最新分配的单元

B: 总是指向当前执行过程活动记录的起始地址

●CX 、 CODE

CX为目标代码CODE数组的下标指针

第三章文法和语言

3.1文法的直观概念

?语法:每个程序的构成规律。判断“句子”是否为语言的合法程序的规则。

包括:词法规则→字符组成的单词;语法规则→单词组成语法单元?语义:每个程序的含义。赋予程序意义的规则

?语用:每个程序和使用者之间的关系

3.2符号和符号串→→基本不考

3.3文法和语言的形式定义

●文法的定义:文法是描述语法的形式化工具

文法G是一个四元组( V

N , V

T

, P, S )

V

N

为非终结符的有穷集合 VN∩VT = Ф

V

T

为终结符的有穷集合

P为产生式(或规则式)有穷集合形如 x→y

S为文法的开始符号 S∈VN ,至少要在一条产生式的左部出现

●推导:【按要求推导】★ A→Ay 直接推导 A => Ay 间接推导

直接推导:每条产生式只能用一次

最左推导:

对于直接推导v=xAy=>xuy=w,若x∈VT*,即A是v中最左非终结符,则称此直接推导为最左直接推导,记作v=>w。

若推导v=>w中的每个直接推导都是最左的,则称为最左推导最右推导(规范推导):每次都扩展最右的非终结符

@最右推导的逆过程是最左归约

@最左推导的逆过程是最右归约

●句型:从识别符号推导出来的符号串

●句子:仅含有终结符的句型

●语言L(G):文法描述的语言是该文法一切句子的集合

●等价:若L(G1) = L(G2),则称G1和G2等价,记作G1∽G2

●递归:递归规则是指在规则的左部和右部具有相同的非终结符的规则。

形如A→Ay 的规则称为左递归规则;

形如A→xA 的规则称为右递归规则;

形如A→xAy且x,y<>ε的规则称为内递归规则,或自嵌入规则

3.4文法的类型【构造文法】

●0型/短语结构文法:最一般的文法,无限制

●1型/上下文有关:

u→w的限制:除了u→ε,|u|≤|w| ,意为串的长度不可压缩

aAb → aQb 只有A出现在 ab 的上下文中,才允许用 Q代替A

●2型/上下文无关:

u∈VN,w∈V* u → w == 用w取代非终结符u时,与上下文无关

● 3型/正规文法

右线性文法:形式都是A →aB

和A →a ,A,B ∈VN a ∈VT 左线性文法:形式都是A →Ba 和A →a ,A,B ∈VN a ∈VT

3.5 上下文无关文法及其语法树

● 语法树 【画】 推导树 4个条件 P40 。。。简单不多说

叶子结点从左至右组成的符号串对应文法中的一个句型 ? 叶子结点:没有孩子的结点

? 分支:非叶子结点连同其全部孩子(直接孩子)。 ? 子树:非叶子结点连同其全部后裔(直接孩子和间接

孩子)。

? 简单子树:如果子树只有2层。

? 短语:每个子树的叶子串是相对于该子树的根的短语 :i1 i2 i3 i1*i2

i1*i2+i3

? 简单短语(直接短语):每个简单子树的叶子串是简单短语 :i1 i2 i3 ? 句柄:最左的简单子树的叶子串是句柄 : i1 ● 二义性文法 【判断】

定义:存在某个句子对应着两棵不同的语法树的文法。 注意:二义性是指文法,不是指语言。 ? 转换为无二义的:

文法G[E]变换为文法G’[E] G[E]: E →E+E|E*E|(E)|i

G’[E]: E→E+T|T T →T*F|F F →(E)|i

? 附加去掉二义性的信息:例如规定 先做 * / 再做 + - 等 3.6 句型的分析 ● 自上而下(推导)

关键是确定当前推导的规则 ● 自下而上(归约)

关键是确定当前归约的句柄 3.7 文法的实用限制和变换 【老师木有圈概

念】

● 有害规则:文法G 中形如U —>U 的规则 ● 多余规则:

? 左部非终结符号U 不出现在任何其他

规则的右部(开始符除外),即该非终结符是不可到达的

? 若在推导中使用该规则,则再也不能

推出终结符号串,即该非终结符是不可终止的

● 其它:

? 不含有左递归规则A —>Aa ? 不允许有空规则 A —>ε

本章有大题:

1)语言与文法的转换

2)写出推导过程、构造语法树

3)短语、简单短语、句柄

4)判断二义性,给出反例

第四章词法分析

词法分析是编译中的第一个阶段,它的主要任务是从左到右逐个字符地对源程序进行扫描,产生一个个单词序列,用以语法分析。

4.1词法分析程序的设计【木有概念】

●单词类别:保留字、标识符、常量、运算符、界限符

●输出的单词符号:通常用二元式表示:(单词种别,单词自身的值)

4.2单词的描述工具【将语言用正规式写出】

●正规式、正规集

?Φ是正则式,表示空集

?2)ε是正则式,表示{ε}

?每个a∈V是正则式,表示{a}

?若P和Q是正则式,分别表示正则集L(P)和L(Q),则

①P|Q是正则式,表示L(P)∪L(Q) “或”

②PQ是正则式,表示L(P)L(Q) “联结”

③P*是正则式,表示L(P)* “星闭包”

④(P)是正则式,表示L(P)

?仅由有限次使用上述步骤得到的正则式,才是V上的正则式。运算优先次序为 * .|

●例子:

以ab结尾的所有串: (a|b)*ab

只包含一个a的所有串: b*ab*

包含偶数个b但不含a的所有串: (bb)*

每个a之前必须都有一个b的所有串: (ba|b)*

不包含ab子串的所有串: b*a*

●正规文法构造正规式

设X是正则变量,a和b是正则式,且X=aX+b 则 X=a*b

证明:正则式方程X=aX+b等价于以下正则规则:X→aX|b

4.3有穷自动机FA

4.3.1确定的有穷自动机DFA “确定”即f是单值函数 - 初态 + 终态

可识别的

●是一个五元组: M =(K,V T,f,S,Z)

K:有穷状态集;

VT:有穷的输入字母表;

f:K×VT→K是状态转换函数,即f(W,a)=U表示当前状态W下,输入a,

转到状态U。

S:唯一的开始状态,S∈K;

Z:终止状态集,是K的非空子集

●可识别的定义:有一条从初态到终态的路径产生x,则x为DFA所能识别的

符号串。

●不可识别的两种情况:读完状态不停在终态;出现不存在的映射,使自动机

无法继续。

●所有DFA所能识别的字符串集合称为DFA所接受的语言,记为L(DFA)

4.3.2不确定的有穷自动机NFA

●与DFA的区别:“非确定”即f是多值函数,且输入可允许为ε;初态不

唯一

4.3.3NFA转换为等价的DFA

●Ia即从I中任一状态出发,经a弧(可跳过a弧之后的任意条ε弧)可达

到的状态集

●move(I,a)表示I中状态经过一条a边可到达的状态的集合

初态S : I =ε-CLOSURE({S})={S,3,1}

Ia={3,1,5} 记为 315

Ib={3,1,6} 记为 316

将新状态添入I,开一新行,求其Ia和Ib。如此反复,直至不再产生新的

4.3.4确定有穷自动机的化简【最小化】

●最小DFA: 1、没有多余状态(不能到达,不能终止) 2、没有两个状态

是互相等价

●化简方法:

a)将S划分为终态集和非终态集,得S’={Z,S-Z}

b)递归地分割S’中的子集,使得任何两个不同子集的状态都是可区分的,

而同一个子集中的状态都是等价的

c)S’中的每个子集合并为一个状态

d)含原初态的状态为初态;含原终态的状态为终态

4.4正规式和有穷自动机的等价性

4.5正规文法和有穷自动机的等价性

本章大题:1、自动机的确定化 2、最小化 3、已知文法构造自动机

第五章自顶而下语法分析方法

语法分析是编译程序的核心部分。作用是识别由词法分析给出的单词符号序列是否是给定文法的正确句子。分为自顶向下分析(确定分析、不确定分析)、自底向上分析(算法优先分析、LR分析)。

5.1确定的自顶向下分析思想

●First集:β∈ (VT ? VN )*

First(β)={ a∈VT | ?βa...}?(if β?ε then {ε})

●Follow集:Follow(A)={ a∈VT | S?...Aa... } ?(if S?...A then {#} )

●Select集:Select(A→β)

= First(β) ,当ε?First(β)

=(First(β)-{ε}) ? Follow(A), 当ε∈First(β)

●LL(1)文法:对于每个非终结符U有多个不同的产生式 U→α U→β

Select(U→α) ∩ Select(U→β) = Φ【充要条件】

第1个L表示从左向右扫描输入串,第2个L表示将用最左推导,1表示向右看一个符号便可决定选择哪个产生式进行推导

5.2 LL(1)文法的判别【建议:只写出select即可,免得first、follow出错扣分】

举例:

5.3等价变换

●消除左公因子

1)产生式形如:Aβα→1|βα2|…|βαn| γγ表示不以α开头的字符串

2)提取左公共因子: A→α(β1|β2|…|βn)| γ

3)引进非终极符A’,使产生式替换为:

A →α A' | γ

A'→β1|β2 |…| βn

●消除左递归

直接左递归:A→Aβ A∈VN, β∈V*

间接左递归:A→Bβ B→Aα A,B∈VN, α ,β∈V*

对直接左递归形如:

A→ Aα1|Aα2|…|Aαm|β1|β2|…|βn

消除直接左递归,引入新的非终结符A':

A →β1A'|β2A'|…|βnA'

A'→α1A'|α2A'|…|αmA'| ε

注意:1、不一定每个文法的左

公共因子都能在有限步内替换

成无公共因子的文法;

2、没左公共因子、没左递归只

是LL(1)的必要条件,但并非充

分条件

5.4不确定的自顶向下分析思想【无】

5.5确定的自顶向下分析方法【预测分析方法 == LL(1)方法】

●分析程序

●符号栈

●预测分析表【构造预测分析表】

LL(1)分析步骤:

1、判断是否为LL(1)文法,求出select集

2、根据select集构造预测分析表

3、写出分析过程→分析栈、剩余输入串、推导所用产生式或匹配【3列】大题:1、判断是否为LL(1)文法 2、文法的等价变换 3、写分析过程 P95 表5.4

第六章自底而上优先分析【也称移进-归约分析】

? > 就归约; < 、= 则移进

?归约顺序:等同:a=b 同时;先于:ab a先b后

?b=c ++ c=b 不能推出 b=b。→优先关系必须相邻

●归约中的动作有4类

移入:读入一个符号并把它归约入栈。

归约:当栈中的部分形成一个句柄(栈顶的符号序列)时,对句柄进行归约。

接受:当栈中的符号仅有#和识别符号时,输入符号也到达结尾时,执行接受动作。

当识别程序觉察出错误的时候,表明输入符号串不是句子。进行错误处理

●简单优先分析法

?优先关系的冲突

当优先矩阵中出现值不唯一的元素时,文法不适合使用优先识别技术来识别句型

?简单优先分析法是按照文法符号(终结符和非终结符)的优先关系确定句柄的

●算符优先分析法

?与简单优先的区别:简单优先技术对符号表中的所有符号之间建立优先关系。算符优先分析技术只在终结符号之间建立优先关系

?木有包含相邻两个非终结符的句型的文法称为算符文法。

?人为确定:

(0)i的优先级最高

(1) 优先级仅次于i,右结合

(2)*和/优先级次之,左结合

(3)+和-优先级最低,左结合

(4)括号‘(’,‘)’的优先级大于括号外的运算符,小于括号内的运算符,左括号的优先性大于右括号

(5)#的优先性低于与其相邻的运算符

大题:判断文法是否为简单优先关系

第七章LR分析

7.1 LR分析概述

●LR分析方法是无回溯的“移进-归约”方法

●LR分析器的组成:

?总控程序。也称为驱动程序

?分析表或分析函数。可分为:动作(ACTION)、状态转换(GOTO)

?分析栈。包括文法符号栈和相应的状态栈

●四种技术:如下 LR(0) SLR(1) LR(1) LALR(1)

7.2 LR(0)分析

●能力最弱,理论上最重要

●活前缀:不包含句柄之后的符号的前缀

●可归前缀:包含句柄的活前缀

●LR(0)的项目分类:

1)移进项目:圆点后面为终结符,对应移进状态。分析时把a移进符号栈。

2)待约项目:圆点后为非终结符,表明等待B所能退出的串归约为B后,才

可继续分析A的右部。

3)归约项目:圆点在最右端。表明已分析完,句柄已形成,可被归约。

4)接受项目:表明已分析成功

●冲突分类:移进和归约同时存在;归约和规约项目同时存在。

●构造识别活前缀的DFA

●构造LR(0)分析表

●如果每个入口不含多重定义,则称它为文法G的一张LR(0)表。具有LR(0)表

的文法G称为LR(0)文法。LR(0)文法是无二义的。

●当出现移进规约冲突时,文法不是LR(0)文法,为解决,引进SLR(1)法

7.3 SLR(1)分析

●如果一个LR(0)项目集规范族中含有如下的项目集I

I={ X →α?bβ, A →α? }存在移进-规约冲突

但是若【条件】FOLLOW(A) ? { b } = φ,冲突便可以解决

●解决办法:当在状态I面临符号a时:

1、对 a=b 则action [ I , b ] = closure({ X →αb.β })移进

2、对 a∈FOLLOW (A) 则 action [ I , a ] =用 A →b?归约

●就以上解决方法,称为SLR(1)分析。数字1的意思是,在分析过程中顶多只

要向前看一个符号。

●LR(0)与SLR(1)的区别:前者有归约项时,下一步马上可以归约。后者只有下

一符号是归约到的符号的follow集才可以归约。

●SLR(1)的局限:有可能移进一个符号可以构造出两条路径,因上述的【条件】

可能不成立。此时,既不是 LR(0),也不是SLR(1)。为解决,引进LR(1)。

7.4 LR(1)分析

●基本思想:如果存在规范推导 S ?δAw ?δβαw

当且仅当当前输入的符号为a∈First(w#)时,才能用产生式A–>βα进行归约。

因此,在LR(1)方法中重新定义项目,使每个项目附带一个向前搜索符。

●[ A→α.β,a ] A→α.β:核,为LR(0)项目; a:向前搜索符,要么是一

个终结符,要么是输入结束标记#。。。 a只对规约项目起作用。多个时,可

用a/b/c

●LR(1)文法满足下面两个条件

1)如果一个项目集里有项目[A –> u?xv, a],x是终结符,那就不会有项

目[B –> u?,x]

2)项目集里所有归约项目的向前搜索符不相交,即不能同时含有项目[A –>

u?,a] 和[B –> v?,a]

●每个SLR(1)文法都是 LR(1)文法

7.5 LALR(1)分析【不考大题?但要知道同心集的概念】

●同心集【概念】???状态内部的项目,除去各向前搜索符不一样外,其它

都一样。合并后心仍相同,向前搜索符合并在一起,转换函数也合并在一起。

●基本思想:合并同心集

(1)合并同心集后,对某些错误发现的时间会产生

推迟,但是错误出现的位置仍是准确的。LR(1)分析法强

于LALR(1)分析法,如果文法是LALR(1)文法,则也是

LR(1)文法,反之不然。

(2)LR(1)项目集不存在动作冲突,合并同心集后

会不会产生新的冲突?

1)不会产生新的移进-归约冲突(P148)

2)会产生新的归约-归约冲突(P152)

大题:1、判断文法是否为LR(0)、SLR(1)、LR(1) 2、分析过程:符号栈、分析表

第八章语法制导翻译和中间代码生成【难点】

【概念】

●属性文法:接近形式化的语义描述方法,是一组属性和属性等式(断言或谓词)

组成。是一个三元组:A=(G,V,F)

G:是一个上下文无关文法。

V:有穷的属性集,每个属性与文法的一个终结符或非终结符相连。

F:关于属性的属性断言或谓词集。每个断言与一个产生式相联。

●值:val;类型:type; id.entry:id在符号表的位置

●综合属性:从其子结点的属性值计算出来的

●继承属性:从其兄弟结点和父结点的属性值计算出来的

●→非终结符既有综合属性也有继承属性,开始符没有继承属性,终结符只有

综合属性。

●L-属性:既包括综合属性,又包括继承属性,其属性用深度优先的顺序从左

至右计算。

●S-属性:是L-属性的一个特例,仅含有综合属性的属性文法。属性的计算,

采用自底向上的分析。

●→归约句柄相当于执行动作。

●逆波兰式(后缀式):

a+b → ab+ ; a*b → ab* ;

a:=b*c+b*d → abc*bd*+:=

GOTO L → L jump

if E then s1 else s2 →

ES1S2¥

●三地址代码(四元式):显示引用

●语法结构树(三元式):临时变量

E.true 真出口、 E.false 假出口、拉链、回填【以下示例】 P181 → P185

大题:1、构造属性文法→一般构造S属性 2、翻译给定的语句

第九章符号表

●符号表每一项由:名字栏和属性两个栏目组成

●符号表的作用

1)收集符号属性

2)上下文语义的合法性检查的依据

3)作为目标代码生成阶段内存地址分配的依据

●主要属性:

符号名、类型、存储类别、作用域及可见性、存储分配信息、数组、记录、形参第十章目标程序运行时的存储组织

●静态存储分配:如果在编译时能确定目标程序运行中所需的全部数据空间的

大小,编译时安排好目标程序运行时的全部数据空间,确定每个数据对象的

存储位置。

●栈式动态存储分配:将整个程序的数据空间设计为一个栈。运行时每当进入

一个过程,就在栈顶为该过程分配所需的数据空间,当一个过程工作完毕

之后,它在栈顶的数据空间也将被释放。

●堆式动态存储分配:可自由地申请数据空

间和退还数据空间。

●RA:返回地址

●DL:动态链,控制链

●SL:静态链,存取链

●传值、传地址、传名

传值→简单的赋值,调用过程不改变本身的值

传地址→相对于指针,调用过程也是指向同一块内存,表达式则是先算出值,再传递给调用过程(值传递)

传名→直接给地址,全部视为指针,表达式直接传整个表达式中的各个地址第十一章代码优化

两种优化,中间代码优化、目标代码优化

●必经结点:如果流图中,从初始节点出发,每一条到达节点n的路径都必须

经过m,那么称m是节点n的必经节点。任何节点都是自己的必经节点记为m dom n。

●回边:如果存在从节点N到M的有向边N—>M,那么这条边称为回边。

●优化技术:

1)消除公共子表达式

2)循环不变表达式外提

3)削减计算强度

4)变换循环控制条件

5)合并已知量与复写传播

6)删除无用代码

●基本块:是指程序中一顺序执行的语句序

列,其中只有一个入口语句和一个出口语

句。

●入口语句:程序的第一个语句;或者,

条件转移语句或无条件转移语句的转移

目标语句;或者紧跟在条件转移语句后

面的语句

大题:1、问采用**优化技术,求优化结果。2、基本快的划分+流图

《编译原理》考试试题及答案(汇总)讲课稿

《编译原理》考试试题及答案(汇总)

《编译原理》考试试题及答案(汇总) 一、是非题(请在括号内,正确的划√,错误的划×)(每个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.构造编译程序应掌握______。 A.( )源程序B.( ) 目标语言 C.( ) 编译方法 D.( ) 以上三项都是 6.四元式之间的联系是通过_____实现的。 A.( ) 指示器B.( ) 临时变量 C.( ) 符号表 D.( ) 程序变量 7.表达式(┐A∨B)∧(C∨D)的逆波兰表示为_____。 A. ( ) ┐AB∨∧CD∨B.( ) A┐B∨CD∨∧ C.( ) AB∨┐CD∨∧ D.( ) A┐B∨∧CD∨ 8. 优化可生成_____的目标代码。 A.( ) 运行时间较短 B.( ) 占用存储空间较小 C.( ) 运行时间短但占用内存空间大D.( ) 运行时间短且占用存储空间小9.下列______优化方法不是针对循环优化进行的。

编译原理复习题2017(含试卷)

* 编译原理复习题 一.简答题: 1) 什么是句子? 什么是语言? 解答:句子——设G 是一个给定的文法,S 是文法的开始符号,如果S x (其中x ∈V T * ),则称x 是文法的一个句子。 语言——语言是句子的集合。 或——设G[S]是给定文法,则由文法G 所定义的语言L(G)可描述为:L(G)={x │ S x,x ∈V T * } 。 2) DFA 与NFA 有何区别 ? 解答:DFA 与NFA 的区别表现为两个方面:一是NFA 可以有若干个开始状态,而DFA 仅只有一个 开始状态。另一方面,DFA 的映象M 是从K ×∑到K ,而NFA 的映象M 是从K ×∑到K 的子集,即映象M 将产生一个状态集合(可能为空集),而不是单个状态。 3) 自顶向下的语法分析方法的基本思想是什么? 解答:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接 推导,试图推导出文法的句子,使之与给定的输入串匹配。 4) 自底向上的语法分析方法的基本思想是什么? 解答:从给定的输入串(终结符串)开始,根据文法的规则一步一步的向上进行直接归约,试图 归约到文法的开始符号。 5) 一个上下文无关文法G 包括哪四个组成部分? 解答:一组非终结符号,一组终结符号,一个开始符号,以及一组产生式。 6) 在自底向上的语法分析方法中,分析的关键是什么?

解答:关键是寻找句柄。 7)在自顶向下的语法分析方法中,分析的关键是什么? 解答:关键是选择候选式。 8)什么是属性文法? 答:是在上下文无关文法的基础上,为每个文法符号(含终结符和非终结符)配备若干个属 性值,对文法的每个产生式都配备了一组属性计算规则(称为语义规则)。在语法分析过 程中,完成语义规则所描述的动作,从而实现语义处理。 一个属性文法形式的定义为一个三元组AG,AG=(G,V,E)。 其中G为一个上下文无关文法;V为属性的有穷集;E为一组语义规则。 9)语法制导翻译 语法制导翻译:定义翻译所必须的语义属性和语义规则,一般不涉及计算顺序。 语法制导翻译(Syntax-Directed Translations): –一个句子的语义翻译过程与语法分析过程同时进行。 在文法中,文法符号有明确的意义,文法符号之间有确定的语义关系。属性描述语义信息, 语义规则描述属性间的的关系,将语义规则与语法规则相结合,在语法分析的过程中计算语义 属性值。 10)词法分析的主要任务是什么? 解答:词法分析器的任务是对构成源程序的字符串从左到右逐个字符逐个字符地进行扫 描,依次把它们识别为一个一个具有独立意义的单词,并确定其属性,再转换为长度统一的属 11)图示运行时存储空间的划分(分为哪几个区)。 解答: 一般分为静态区和动态区: 程序代码区、静态数据区、栈区和堆区 12)常用的中间语言种类有哪几种? 解答: 常用的中间语言种类有逆波兰表示、三元式、四元式和树形表示。 13)文法G所描述的语言是什么的集合? 解答:是由文法的开始符号推出的所有终结符串的集合。或说是句子的集合。 14)乔姆斯基把文法分为四种类型,即0型、1型、2型、3型。其中2型文法叫什么? 解答: 2型文法叫上下文无关文法。 15)常见的动态存贮分配策略有哪两种? 解答:常见的两种动态存贮分配策略是栈式动态分配策略和堆式动态分配策略。 16)语法分析的任务是什么?

编译原理复习题及答案

编译原理复习题及答案 一、选择题 1.一个正规语言只能对应(B) A 一个正规文法 B 一个最小有限状态自动机 2.文法G[A]:A→εA→aB B→Ab B→a是(A) A 正规文法 B 二型文法 3.下面说法正确的是(A) A 一个SLR(1)文法一定也是LALR(1)文法 B 一个LR(1)文法一定也是LALR(1)文法 4.一个上下文无关文法消除了左递归,提取了左公共因子后是满足LL(1)文法的(A) A 必要条件 B 充分必要条件 5.下面说法正确的是(B) A 一个正规式只能对应一个确定的有限状态自动机 B 一个正规语言可能对应多个正规文法 6.算符优先分析与规范归约相比的优点是(A) A 归约速度快 B 对文法限制少 7.一个LR(1)文法合并同心集后若不是LALR(1)文法(B) A 则可能存在移进/归约冲突 B 则可能存在归约/归约冲突 C 则可能存在移进/归约冲突和归约/归约冲突 8.下面说法正确的是(A) A Lex是一个词法分析器的生成器 B Yacc是一个语法分析器 9.下面说法正确的是(A) A 一个正规文法也一定是二型文法 B 一个二型文法也一定能有一个等价的正规文法 10.编译原理是对(C)。 A、机器语言的执行 B、汇编语言的翻译 C、高级语言的翻译 D、高级语言程序的解释执行 11.(A)是一种典型的解释型语言。

A.BASIC B.C C.FORTRAN D.PASCAL 12.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。 A. 编译器 B. 汇编器 C. 解释器 D. 预处理器 13.用高级语言编写的程序经编译后产生的程序叫(B) A.源程序 B.目标程序C.连接程序D.解释程序 14.(C)不是编译程序的组成部分。 A.词法分析程序 B.代码生成程序 C.设备管理程序 D.语法分析程序 15.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。 A.模拟执行器B.解释器 C.表格处理和出错处理D.符号执行器16.编译程序绝大多数时间花在(D)上。 A.出错处理B.词法分析C.目标代码生成D.表格管理 17.源程序是句子的集合,(B)可以较好地反映句子的结构。 A. 线性表 B. 树 C. 完全图 D. 堆栈 18.词法分析器的输出结果是(D)。 A、单词自身值 B、单词在符号表中的位置 C、单词的种别编码 D、单词的种别编码和自身值 19.词法分析器不能(D) A. 识别出数值常量 B. 过滤源程序中的注释 C. 扫描源程序并识别记号 D. 发现括号不匹配 20.文法:G:S→xSx | y所识别的语言是(D)。 A、xyx B、(xyx)* C、x*yx* D、x n yx n (n≥0) 21.如果文法G是无二义的,则它的任何句子α(A) A.最左推导和最右推导对应的语法树必定相同 B.最左推导和最右推导对应的语法树可能不同 C.最左推导和最右推导必定相同 D.可能存在两个不同的最左推导,但它们对应的语法树相同 22.正则文法(A)二义性的。 A. 可以是 B. 一定不是 C. 一定是 23.(B)这样一些语言,它们能被确定的有穷自动机识别,但不能用正则表达式表示。 A. 存在 B. 不存在 C. 无法判定是否存在 24.给定文法A→bA | ca,为该文法句子的是(C) A. bba B. cab C. bca D. cba

编译原理复习整理(重点含答案)

1、给出下面语言的相应文法。L1={a n b n c i|n≥1,i≥0} 从n,i的不同取值来把L1分成两部分:前半部分是anbn:A→aAb|ab后半部分是ci:B→Bc|ε所以整个文法G1[S]可以写为:G1(S):S→AB;A→aAb|ab;B→cB|ε 3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。 (要求:先将正规式转化为NFA,再将NFA确定化,最小化)

4、对下面的文法G: E →TE ’ E ’→+E|ε T →FT ’ T ’→T|ε F →PF ’ F ’ →*F ’|ε P →(E)|a|b|∧ (1)证明这个文法是LL(1)的。 (2)构造它的预测分析表。 (1)FIRST(E)={(,a,b,^}FIRST(E')={+, ε}FIRST(T)={(,a,b,^}FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^}FIRST(F')={*,ε}FIRST(P)={(,a,b,^}FOLLOW(E)={#,)} FOLLOW(E')={#,)}FOLLOW(T)={+,),#}FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#}FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式: '→+'→'→'→E E T T F F P E a b ||*|()|^||εεε FIRST(+E)∩FIRST(ε)={+}∩{ε}=φ FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φ FIRST(*F')∩FIRST(ε)={*}∩{ε}=φ FIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φ

编译原理考试重点题

1、设正规式r= a(a|b)*, 将r转换为相应的正规文法。 令S为文法开始符,首先形成S →a(a|b)*,然后形成S →aA和A →(a|b)*,再变换成: S→aA A→ε A→(a|b)A, 进而变换成正规文法形式: S→aA A→ε A→aA A→bA 2、令文法G[S] S→cC,S→c,C→cC,C→dC,C→c,C→d, 将该文法转换为相应的正规式。 首先有S=cC|c, C=(cC|dC)|(c|d) =(c|d)C|(c|d) =(c|d)*|(c|d) =(c|d)+ 进一步有

S=c(c|d)+|c =c(c|d)* c(c|d)*即为该文法所对应的正规式 令文法G[S]为: S->S+A|A A->A*B|B B->(S)|a|b (1)分析说明a*a+b是该文法的一个句型; (2)指出该句型的所有短语、直接短语和句柄。(1)该字符串对应的语法树为: 所以a*a+b为该文法的句型。 (2)短语为:a,a,a*a,b,a*a+b; 直接短语为:a,a,b; 句柄为:最左边的a 令文法G[S]为: S->aCcDe C->b|Cb D->d

(1)分析说明aCbcde是它的一个句型; (2)指出该句型的所有短语、直接短语和句柄。 (1)此句型对应语法树如下,故aCbcde为此文法的一个句型。 (2)短语为:aCbcde,Cb,d; 直接短语:Cb,d; 句柄: Cb。 构造正规式(a|b)*相应的最小化DFA。 1、首先构造对应的NFA: 2、将NFA确定化: 3、对其最小化:

设有非确定的有自限动机NFA M=({A,B,C},{0,1},δ,{A},{C}),其中: δ(A,0)={C}, δ(A,1)={A,B}, δ(B,1)={C}, δ(C,1)={C}。 请画出状态转换距阵和状态转换图。 状态转换距阵为: 状态转换图为:

广工编译原理(精选题集+必考大题

《编译原理》期末试题(二) 1、描述由正规式b*(abb*)*(a| ε)定义的语言,并画出接受该语言的最简DFA。 2、证明文法E → E + id | id是SLR(1)文法。 3、下面是表达式和赋值语句的文法,其中and的类型是bool ? bool → bool,+的类型是int ? int → int,=的类型是int ? int → bool,:= 要求id和E的类型都是int或者都是bool。为该文法写一个语法制导定义或翻译方案,它完成类型检查。 S →id := E E → E and E | E + E | E = E |id 6、描述由正规式b*a(bb*a)*b*定义的语言,并画出接受该语言的最简DFA。 7、下面的文法产生代表正二进制数的0和1的串集: B → B 0 | B 1 | 1 下面的翻译方案计算这种正二进制数的十进制值: B →B1 0 {B.va l := B1.val? 2 } | B1 1 {B.val := B1.val? 2 +1} | 1 {B.val := 1 } 请消除该基础文法的左递归,再重写一个翻译方案,它仍然计算这种正二进制数的十进制值。 编译原理试卷二答案 1、由正规式b*(abb*)*(a| ε)定义的语言是字母表{a, b}上不含子串aa的所有串的集合。最简DFA如下: 2、先给出接受该文法活前缀的DFA如下:

I0和I3都只有移进项目,肯定不会引起冲突;I2和I4都无移进项目并仅含一个归约项目,也肯定不会引起冲突;在I1中,E'的后继符号只有$,同第2个项目的展望符号“+”不一样,因此I1也肯定不会引起冲突。由此可以断定该文法是SLR(1)的。 3、语法制导定义如下。 S →id := E { S.type := if (id.type = bool and E.type = bool) or (id.type = int and E.type = int)then type_ok else type_error } E → E1and E2 { E.type := if E1.type = bool and E2.type = bool then bool else type_error } E → E1 + E2 { E.type := if E1.type = int and E2.type = int then int else type_error } E → E1 = E2{ E.type := if E1.type = int and E2.type = int then bool else type_error } E →id { E.type := lookup(id.entry) } 6、正规式b*a(bb*a)*b*体现的特点是,每个a的左边都有若干b,除非a是第一个字母。该正规式定义的语言是:至少含一个a,但不含子串aa的所有a和b的串集。最简DFA如下: 7、消除左递归后的文法: B → 1 B' B'→ 0 B' | 1 B' | ε 相应的翻译方案如下: B → 1 {B'.i := 1 }B'{B.val := B'.val} B'→ 0 {B'1.i := B'.i? 2 } B'1 {B'.val := B'1.val} | 1 {B'1.i := B'.i? 2 +1} B'1 {B'.val := B'1.val} | ε {B'.val := B'.i} 《编译原理》期末试题(三) 1、从优化的范围的角度,优化可以分哪两类?对循环的优化可以有哪三种?答:从优化的范围的角度,优化可以分为局部优化和全局优化两类; 对循环的优化有三种:循环不变表达式外提、归纳变量删除与计算强度削减。

《编译原理》模拟期末试题汇总 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.简单优先文法允许任意两个产生式具有相同右部。 (×) 二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.一个编译程序中,不仅包含词法分析,_____,中间代码生成,代码优化,目标代码生成等五个部分。 A.( ) 语法分析B.( )文法分析C.( )语言分析D.( )解释分析 2.词法分析器用于识别_____。 A.( ) 字符串B.( )语句 C.( )单词 D.( )标识符 3.语法分析器则可以发现源程序中的_____。 A.( ) 语义错误 B.( ) 语法和语义错误 C.( ) 错误并校正D.( ) 语法错误 4.下面关于解释程序的描述正确的是_____。

(1) 解释程序的特点是处理程序时不产生目标代码 (2) 解释程序适用于 COBOL 和 FORTRAN 语言 (3) 解释程序是为打开编译程序技术的僵局而开发的 A.( ) (1)(2) B.( ) (1)C.( ) (1)(2)(3) D.( ) (2)(3) 5.解释程序处理语言时 , 大多数采用的是_____方法。 A.( ) 源程序命令被逐个直接解释执行 B.( ) 先将源程序转化为中间代码 , 再解释执行 C.( ) 先将源程序解释转化为目标程序 , 再执行 D.( ) 以上方法都可以 6.编译过程中 , 语法分析器的任务就是_____。 (1) 分析单词是怎样构成的 (2) 分析单词串是如何构成语句和说明的 (3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构 A.( ) (2)(3) B.( ) (2)(3)(4) C.( ) (1)(2)(3) D.( ) (1)(2)(3)(4) 7.编译程序是一种_____。 A. ( ) 汇编程序B.( ) 翻译程序 C.( ) 解释程序 D.( ) 目标程序 8.文法 G 所描述的语言是_____的集合。 A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串 B.( ) 文法 G 的字母表 V 的闭包 V* 中的所有符号串 C.( ) 由文法的开始符号推出的所有终极符串 D. ( ) 由文法的开始符号推出的所有符号串 9.文法分为四种类型,即0型、1型、2型、3型。其中3型文法是_____。 A. ( ) 短语文法 B.( ) 正则文法 C.( ) 上下文有关文法 D.( ) 上下文无关文法 10.一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 _____。 A.( ) 句子B.( ) 句型 C.( ) 单词 D.( ) 产生式 三、填空题(每空1分,共10分)

编译原理试题

中间语言与语法制导翻译重点与难点 重点:语法制导翻译的基本思想,属性文法,翻译模式,说明语句的翻译方案。 三地址码,各种语句的目标代码结构、属性文法与翻译模式。 难点:属性的意义,对综合属性,继承属性,固有属性的理解,属性计算,怎么通过属性来表达翻译。布尔 表达式的翻译,对各种语句的目标代码结构、属性文法与翻译模式的理解。 基本要求 掌握语法制导翻译的基本思想,属性文法,综合属性,继承属性,固有属性,属性计算,s_属性文法, L_属性文法,说明语句的翻译方案,翻译模式、属性文法的实现 掌握中间语言与语义分析的基本概念;熟练掌握语法(结构)树、三地址代码、赋值与控制语句的翻译、 说明语句的翻译;掌握组合数据说明的翻译、过程调用翻译。 例题解析 例1 给定文法E --> T { R.i := T.p } R { E.p := R.s } R --> addop T { R1.i := mknode( addop.val, R.i, T.p ) } R { R.s := R1.s } R --> : { R.s := R1.s } T --> ( E ) { T.p := E.p } T --> id { T.p := mkleaf( id, id.entry) } T --> num { T.p := mkleaf( n um, n um.val ) } (1) 指岀文法中的各非终结符具有哪些综合属性和哪些继承属性 ⑵ 画岀按本翻译模式处理表达式 a + 20 + ( b - 10 ) 时所生成的语法树 【解】 (1)E的综合属性p,R的继承属性i,综合属性s ; T的综合属性p ⑵处理表达式a + 20 + ( b - 10 ) 时所生成的语法树如下 例2定义一个计算器的属性文法,完成一个输入表达式值的计算和显示 【解】计算器的文法 L T E E T E1 + T | T T T T1 * F | F F T ( E ) | digit

最新编译原理试题汇总+编译原理期末试题(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/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) 解释程序是为打开编译程序技术的僵局而开发的 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)(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.一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 __D___。 A.( ) 句子 B.( ) 句型 C.( ) 单词 D.( ) 产生式

《编译原理》期末考试复习题

《编译原理》期末考试复习题 一、是非题(请在括号内,正确的划√,错误的划×)(每个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.简单优先文法允许任意两个产生式具有相同右部。 () 三、填空题(每空1分,共10分) 1.编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,中间代码生成,代码优化等几个基本阶段,同时还会伴有__ ___和 ___ _。 表格管理出错处理_ 2.若源程序是用高级语言编写的,__ __是机器语言程序或汇编程序,则其翻译程序称为 __ __ 。 _目标程序_编译程序 3.编译方式与解释方式的根本区别在于__ __。 是否生成目标代码_ 4.对编译程序而言,输入数据是__ __, 输出结果是__ ___。 _源程序目标程序

5.产生式是用于定义__ __的一种书写规则。 _语法成分 6.语法分析最常用的两类方法是___ __和__ __分析法。 自上而下_自下而上 四、简答题(20分) 1. 什么是句子?什么是语言 ? 答:(1)设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈VT*),则称x是文法的一个句子。 (2)设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为:L(G)={x│S x,x∈VT*} 。 一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分) ×1.对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。() ×2.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。() √3.递归下降分析法是自顶向上分析方法。() ×4.产生式是用于定义词法成分的一种书写规则。() √5.LR 法是自顶向下语法分析方法。() √6.在SLR (1 )分析法的名称中,S的含义是简单的。() ×7.综合属性是用于“ 自上而下” 传递信息。() ×8.符号表中的信息栏中登记了每个名字的属性和特征等有关信息,如类型、种属、所占单元大小、地址等等。() ×9.程序语言的语言处理程序是一种应用软件。() ×10.解释程序适用于COBOL 和FORTRAN 语言。() 三、填空题(每空1分,共10分) 1.一个句型中的最左简单短语称为该句型的___句柄__。

编译原理模拟试卷及答案

模拟试题二 发表日期:2009年6月5日编辑:admin 阅读数:240 一、是非题(下列各题,你认为正确的,请在题干的括号内打“√”,错的打“×”。每题1分,共5分) 1、算符优先关系表不一定存在对应的优先函数。 2、数组元素的地址计算与数组的存储方式有关。 3、仅考虑一个基本块,不能确定一个赋值是否真是无用的。 4、每个文法都能改写为LL(1)文法。 5、对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。 二、填空题(每题2分,共20分) 1、从功能上说,程序语言的语句大体可分为_______语句和______语句两大类。 2、扫描器的任务是从________中识别出一个个_______。 3、所谓最右推导是指:_______。 4、语法分析最常用的两类方法是________和_________分析法。 5、一个上下文无关文法所含四个组成部分是_______________。 6、所谓语法制导翻译方法是_____________________。 7、符号表中的信息栏中登记了每个名字的有关的性质,如_________等等。 8、一个过程相应的DISPLAY表的内容为________。 9、常用的两种动态存贮分配办法是_____动态分配和_____动态分配。 10、产生式是用于定义_____的一种书写规则。 三、名词解释(每题2分,共10分) 1、遍 2、无环路有向图(DAG) 3、语法分析

4、短语 5、后缀式 四、简述题(每题4分,共24分) 1、考虑下面程序 ………… Var a:integer; Procedure S(X); Var X:integer; Begin a:=a+1; X:=a+X End; Begin a:=5; S(a); Print(a) End. 试问:若参数传递方式分别采取传名和传值时,程序执行后输出a的值是什么? 2、画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。 3、写出表达式(a+b*c)/(a+b)-d的逆波兰表示及三元式序列。 4、已知文法G(S) S→a|∧|(T)

编译原理复习要点

考试安排:7月13日(20周周三),15:00-17:00,20208 填空10X1分、选择10X2分、简答4X5分、大题5X10分 考试大题:循环优化 LL(1).定义之类的 算符优先算法 … 自下而上分析法(20分,选择、填空、大题) 第一章引论 一.编译程序(compiler): 把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序 二.编译程序的工作的五个阶段: 词法分析、语法分析、中间代码产生、优化、目标代码产生 1.词法分析 任务: 输入源程序, 符号。 依循的原则:构词规则 描述工具:有限自动机 保留字标识符等符整常数保留字整常数保留字 2.语法分析 任务:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。 依循的原则:语法规则 述工具:上下文无关文法 3.语义分析与中间代码产生 任务:对各类不同语法范畴按语言的语义进行初步翻译。(变量是否定义、类型是否正确等) 依循的原则:语义规则 中间代码:三元式,四元式,逆波兰记号,树形结构等。是一种独立于具体硬件的记号系统。 例:将Z:=X + 0.618 * Y 翻译成四元式为 (1) * 0.618 Y T1 (2) + X T1 T2 (3) := T2 _ Z 4. 优化 任务:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效 的目标代码。 依循的原则:程序的等价变换规则 FOR K:=1 TO 100 DO BEGIN M := I + 10 * K;

N := J + 10 * K; END 4.目标代码产生 任务: 把中间代码变换成特定机器上的目标代码。 依赖于硬件系统结构和机器指令的含义 目标代码三种形式: a)绝对指令代码: 可直接运行 b)可重新定位指令代码: 需要连接装配 c)汇编指令代码: 需要进行汇编 三. 编译程序结构 编译程序总框 (简答题5分) 第二章高级语言及其语法描述 2.1.1语法 词法规则:单词符号的形成规则。 a)单词符号是语言中具有独立意义的最基本结构。一般包括:常数、标识符、基 本字、算符、界符等。 b)描述工具:正规式和有限自动机 语法规则:语法单位的形成规则。 a) 语法单位通常包括:表达式、语句、分程序、过程、函数、程序等; c)描述工具:上下文无关文法 2.1.2语义 语义:一组规则,用它可以定义一个程序的意义。 描述方法: a)自然语言描述:隐藏错误、二义性和不完整性 b)形式描述: ?无二义性 ?完整性

编译原理试题(卷)汇总-编译原理期末试题(卷)(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/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) 解释程序是为打开编译程序技术的僵局而开发的 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)(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.一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 __D___。 A.( ) 句子 B.( ) 句型 C.( ) 单词 D.( ) 产生式 16.通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括_C____。

编译原理复习题 (1)

编译原理复习题 1.确定有限自动机的组成 2.编译程序按功能分为哪几个阶段?各个阶段的主要功能? 3.词法分析器的任务 4.举例说明符号串的正闭包 5.什么是可规约活前缀?举一例说明。 6.词法错误校正 7.实现高级语言程序的途径有哪几种?它们之间的区别? 8.举例说明符号串的星闭包。 9.通过合并LR(1)文法中的同心状态得到的LALR(1)文法可能会产生哪些冲突?一定不会产生哪些冲突? 10.给出活动记录空间结构?并给出各部分的存储对象? 11.文法可分为几类;各举一例。 12.Display表的作用? 13.当实参为变量,形参分别为变参和值参时,传参的区别。 14.语法错误类别 15.上下文无关文法CFG(Context Free Grammar)组成 16.语言 17.语法分析树(简称分析树) 18.LL(1)文法 19.归约规范活前缀 20.符号表的局部化处理 21.二叉式局部符号表的组织结构和具体实现 22.散列式全局符号表的组织结构和具体实现 23.标号部分的语义错误 24.类型等价有按名等价和按结构的等价,试同其实现有什么主要区别? 25.属性文法的定义 26.中间代码基本块的划分 27.中间代码优化的种类 28.给出描述非0数字作为开始符的奇数字符串的正则表达式或正则式。 29.判断字符串a n b n(n >0)是否可用确定自动机识别?如果能,则画出自动机,否则说明原因。 30.对如下文法: G[S]:S → a b S | a a B | a d B → b b B | b 分别给出句子abaabbb和ad的句柄 31.有如下文法,给出每个产生式的Predict集。 P → begin S end S→ id := E ; S | E→ n | id 32.设对偶表(L,N)分别表示程序在当前位置的层数和偏移量,确定下面程序段中括号部分的内容。假设系统规定整型(int)变量占1个单元,实型(real)变量占2个单元。

广东工业大学编译原理实验报告

实验报告 课程名称____ 编译原理__________ 题目名称_ PL/0编译程序的修改扩充_ 学生学院______计算机学院__ 专业班级_______ ________ 学号 学生姓名______ ________ 指导教师____ _________ __ 20 年月日

一、课内实验要求 对PL/0作以下修改扩充: 增加单词:保留字ELSE,FOR,TO,DOWNTO,RETURN 运算符*=,/=,++,--,&,||,! 修改单词:不等号# 改为<> 增加条件语句的ELSE子句,要求:写出相关文法,语法图,语义规则。 二、实验环境与工具 计算机及操作系统:PC机,Windows2000,WindowsXP 程序设计语言:C 教学型编译程序:PL/0 设计方案 概述:源、目标语言,实现工具(平台),运行平台 源语言:PASCAL 目标语言:假想栈式计算机的汇编语言,可称为类PCODE指令代码 实现工具:Visual C++ 6.0 运行平台:Windows 7 三、设计方案 1.结构设计说明 (1)PL/0 语言编译器 PL/0语言可看成是PASCAL语言的子集,它的编译程序是一个编译解释执行系统。PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。

(2)PL/0编译程序的语法分析过程BLOCK是整个编译过程的核心。这里根据编译程序的总体流程图,来弄清BLOCK过程在整个编译程序中的作用。总流程图如下图所示: PL/0语法调用关系图

PL/0 的编译程序采用一趟扫描方式,以语法分析程序为核心,词法分析程序和代码生 成程序都作为一个独立的过程,当语法分析需要读单词时就用词法分析程序,而当语法分析正确需生成相应的目标代码时,则调用代码生成程序。此外,用表格管理程序建立变量,常量和过程标识符的说明与引用之间的信息联系。用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错误性质。 (3)各功能模块描述

《编译原理》总复习-07级

《编译原理》总复习-07级 第一章编译程序的概述 (一)内容 本章介绍编译程序在计算机科学中的地位和作用,介绍编译技术的发展历史,讲解编译程序、解释程序的基本概念,概述编译过程,介绍编译程序的逻辑结构和编译程序的组织形式等。 (二)本章重点 编译(程序),解释(程序),编译程序的逻辑结构。 (三)本章难点 编译程序的生成。 (四)本章考点 全部基本概念。 编译程序的逻辑结构。 (五)学习指导 引论部分主要是解释什么是编译程序以及编译的总体过程。因此学习时要对以下几个点进行重点学习:翻译、编译、目标语言和源语言这几个概念的理解;编译的总体过程:词法分析,语法分析、语义分析与中间代码的生成、代码优化、目标代码的生成,以及伴随着整个过程的表格管理与出错处理。 第三章文法和语言课外训练 (一)内容 本章是编译原理课程的理论基础,主要介绍与课程相关的形式语言的基本概念,包括符号串的基本概念和术语、文法和语言的形式定义、推导与归约、句子和句型、语法分析树和二义性文法等定义、文法和语言的Chomsky分类。 (二)本章重点 上下文无关文法,推导,句子和句型,文法生成的语言,语法分析树和二义性文法。(三)本章难点 上下文无关文法,语法分析树,文法的分类。 (四)本章考点 上下文无关文法的定义。 符号串的推导。 语法分析树的构造。 (五)学习指导 要构造编译程序,就要把源语言用某种方式进行定义和描述。学习高级语言的语法描述是学习编译原理的基础。上下文无关文法及语法树是本章学习的重点。语法与语义的概念;程序的在逻辑上的层次结构;文法的定义,文法是一个四元组:终结符号集,非终结符号集,开始符号、产生式集;与文法相关的概念,字符,正则闭包,积(连接),或,空集,产生式,推导,直接推导,句子,句型,语言,最左推导,最右推导(规范推导);学会用文法来描述语言及通过文法能分析该文法所描述的语言;语法树及二义性的概念、能通过画语法树来分析一个文法描述的语言是否具有二义性;上下文无关文法的定义和正规文法的定义,能判断一个语言的文法是哪一类文法。 附训练试题:

相关文档
最新文档