编译原理考试知识点复习

编译原理考试知识点复习
编译原理考试知识点复习

第一章:

编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成,

代码优化,目标代码生成

解释程序:把某种语言的源程序转换成等价的另一种语言程序——目标语言程序,然后再执

行目标程序。解释方式是接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执行结果,然后再接受下一句。

编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑

上等价的低级语言形式的目标程序(机器语言程序或汇编语言程序)。

解释程序和编译程序的根本区别:是否生成目标代码 第三章:

Chomsky 对文法中的规则施加不同限制,将文法和语言分为四大类: )

0型文法(PSG ) 0型语言或短语结构语言

文法 G的每个产生式α→β中:若α∈V*VN V*, β∈(VN ∪VT)* , 则 G是0型文法,即短语结构文法。

1型文法(CSG ) 1型语言或上下文有关语言

在0型文法的基础上:若产生式集合中所有|α|≤|β|,除S→ε(空串)外, 则G是1型文法,即:上下文有关文法 另一种定义:

文法G 的每一个产生式具有下列形式:αA δ→αβδ,其中α、δ∈V*,A ∈VN ,β∈V+; (

2型文法(CFG ) 2型语言或上下文无关语言

文法G的每个产生式A →α,若A ∈VN ,α∈(VN ∪VT)*,则G是2型法,即:上下文无关文法。

3型文法(RG ) 3型语言或正则(正规)语言

若A、B∈VN ,a∈VT 或 ,

'

右线性文法:若产生式为A→aB或A→a

左线性文法:若产生式为 A→Ba或A→a 都是3型文法(即:正规文法) 最左(最右)推导

在推导的任何一步α β,其中α、β是句型,都是对α中的最左(右)非终结符 进行替换

规范推导:即最右推导。

规范句型:由规范推导所得的句型。 }

句子的二义性(这里的二义性是指语法结构上的。)

文法G[S]的一个句子如果能找到两种不同的最左推导(或最右推导),或者存在两棵不同的语法树,则称这个句子是二义性的。 文法的二义性

一个文法如果包含二义性的句子,则这个文法是二义文法,否则是无二义文法。 短语

若S * αA δ且 A +β,则称β是句型αβδ相对于非终结符A 的短语。 简单短语(直接短语)

2型文法

1型文法 0型文法

3型文

若S * αAδ且Aβ,则称β是句型αβδ相对于非终结符A 的简单短语。

*

句柄

一个句型的最左简单短语。(产生式的右部)

子树与短语的关系

(1) 短语:子树的末端结点(即树叶)组成的符号串;

(2) 直接短语:简单子树的末端结点组成的符号串;

(3) 句柄:最左简单子树的末端结点组成的符号串;

左图所示的关于句型E+E*i的语法树来说:#

它有3棵子树,即3个短语

分别为i、E*i和E+E*i;

直接短语、句柄均为i。

从语法树中可以看出,

所有树叶的组合就是其相对应的父结点的短语。

句型i+i*i的语法树

有8棵子树,短语和直接短语如下:

直接短语:i1,i2 ,i3

短语:i1,i2,i3,i1*i2,i1*i2+i3

句柄:i1

注意:i2+i3不是短语不是某棵子树的结果

第四章:

单词符号的输出形式二元组:(单词种别,单词自身的值)

单词符号的分类

关键字,标识符,常数,运算符,界符等(这种分类不是唯一的)

【例】令={a,b},上的正规式和相应的正规集的例子有:

正规式正规集

a {a}

a b {a, b}

ab {ab}

~

(a b)(a b) {aa, ab, ba, bb}

a {, a, aa, …任意个a的串}

(a b){,a,b,aa,ab …所有由a和b组成的串}

(a b)(aa bb)(a b){*上所有至少含有两个相继的a或两个相继的b组成的串} DFA定义:一个确定的有穷自动机M d是一个五元组:M d=

(1) K:有穷状态集;(2) Σ:有穷输入字母表;a b

S U V

3

4

251X 6εεa b

a b

a b

εεa

b

2

Y (3) f :转换函数,K×Σ K 的单值映射; 即 f (k i , a)=k j ,其中 k i 、k j ∈K ,a ∈Σ; (

(4) S : S ∈K ,惟一初态;

(5) Z :Z K ,是一个终态集,也称可接受状态或结束状态。

【例】DFA M=({S,U,V,Q},{a,b},f ,S ,{Q}), 其中f 定义为:f (S ,a )=U ,f (V ,a )=U f (S ,b )=V ,f (V ,b )=Q f (U ,a )=Q ,f (Q ,a )=Q f (U ,b )=V ,f (Q ,b )=Q DFA 的表示(1)用转换函数;(2)状态转换矩阵;(3)状态转换图 *

转换函数 :DFA M=({0, 1, 2, 3}, {a, b }, f, 0, { 3 } ) f: f(0,a)=1 f(0,b)=2 f(1,a)=3 f(1,b)=2

f(2,a)=1 f(2,b)=3 f(3,a)=3 f(3,b)=3 转换矩阵 状态转换图

#

NFA M 的定义:一个非确定有穷自动机M n 是一个五元组M n =(K, Σ, f, S, Z ),其中: (1) K 、Σ、Z 的意义与DFA 相同; (2) f :从K×Σ* K 的子集映射; (3) S K ,是一个非空初态集。 与DFA 的主要区别 允许有多个初始状态。 ;

允许状态在其输出边上有相同的符号(多值映射)。 允许输出边上有空串符号 。

特点:在给定状态和符号的情况下,不能唯一的确定下一个状态。

NFA 的确定化基本方法 基本方法:边合并 ,符号合并 (NFA 转化成的DFA 不是唯一的) 【 例 】 NFA M 如右图所示,试将其确定化为DFA M'。 【解答】 (1)用子集法将图所示的NFA M 确定化为表1。

(2)对表1中的所有子集重新命名 [

得到表2的状态转换矩阵

ε_closure(S 0

~

确定有穷自动机的化简:

第五章:

语法分析是编译程序的核心部分:在词法分析的基础上,识别单词符号序列是否是给定文法的正确句子(程序)。

自上而下分析的前提:

~

消除左递规和

消除回溯。

自顶向下分析法就是

从文法的开始符号

出发,试图推导出与

输入的单词串完全

匹配的句子。

如果能够推导出,则该输入串是给定文法的句子。

)

如果不能推导出,则该输入串不是给定文法的句子。

自顶向下分析法分两种

不确定性分析法:是带有回溯的分析方法,效率低,代价高,极少使用。

确定性分析法:对文法有一定的限制,但实现简单直观,便于手工或自动构造。

LL(1)文法的定义

一个上下文无关文法是LL(1)文法的充分必要条件是:对每个非终结符A的任两个不同产生式A,Aβ,满足:Select(A)∩Select(Aβ)=,其中:、β不同时推导出

注:对LL(1)文法进行语法分析时不会产生回溯。

LL(1)的含义:(LL(1)文法是无二义的;LL(1)文法不含左递归)

·

第1个L:从左到右扫描输入串第2个L:生成的是最左推导

1 :向右看1个输入符号便可决定选择哪个产生式

某些非LL(1)文法到LL(1)文法的等价变换: 1. 提取公因子 2. 消除左递归

1. 提取左公因子

形如: A →a β1|a β2|...|a βn |γ 提取左公因子: A →a(β1|β2|...|βn )|γ 改写为: A →a A'|γ A'→β1|β2|...|βn

2. 消除左递归 (如果一个 文法是左递归时,则不能采用自顶向下分析法。) (1)左递归的定义 (含有左递归的文法绝对不是LL (1)文法) $

一个文法含有下列形式的产生式时, A A A V N , V * 直接左递归 ② A B B A A, B V N , , V * 间接左递归 (2)直接左递归的消除 (改为右递归)

形如: A → A a|β(a 非,β不以A

打头) 改写为: A →βA¢ A¢ → aA¢ | 形如: A →A a 1 | A a 2 | . . . | A a n | b 1 | b 2 | . . . | b m

其中,每个a 都不等于 ,b1 , . . . , b m 均不以A 开头。

改写为: A →b 1 A ¢ | b 2 A ¢ | . . . | b m A ¢ A ¢ →a 1 A ¢ | a 2 A ¢ | . . . | a n A ¢ |

预测分析法(又称LL(1)分析法,属于确定的自顶向下分析方法) 基本思想 :从左到右扫描源程序,直接根据:

(1) 当前(需推导)的语法变量; (2) 输入串的当前输入符号; }

确定进行分析所需的候选式:使其第一个符号与当前输入符号相同,或该候选式可推导出的第一个符号与当前符号相同。

预测分析器构成:预测分析程序,先进后出栈,预测分析表——与文法有关 第七章

对输入串的分析过程(已知文法的分析表)

LR 分析法:是一种规范规约过程

¥ S Sa S bS’ S’aS ’|ε E → E + T |T

· T → T * F |F

~

E → T E' E' → + T E'|ε T →

F T' T' → * F T'|ε

LR(k)含义

L :从左到右扫描输入符号

R :最右推导对应的最左归约(反序完成最右推导)

k :超前读入k个符号,以便确定归约用的产生式

LR(0)项目分类

移进项目,形如A→? a,a是终结符, ,V*以下同【例】S→ ? bBB

待约项目,形如 A →? B【例】S→b ? BB S→bB ? B

归约项目,形如 A →? 【例】S→bBB ?

接受项目,形如S’ →S ?

第八章:

(

一个属性文法包含一个上下文无关文法和一系列语义规则,

这些语义规则附在每个产生式上。

文法符号的属性:单词的含义,即与文法符号相关的一些信息。如,类型、值、存储地址等。一个属性文法(attribute grammar)是一个三元组A=(G, V, F)

G:上下文无关文法。

V:属性的有穷集。每个属性与文法的一个终结符或非终结符相连。属性与变量一样,可以进行计算和传递。

F:关于属性的断言或谓词(一组属性的计算规则)的有穷集。断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相联的属性。

*

综合属性:若产生式左部的单非终结符A的属性值由右部各非终结符的属性值决定, 则A 的属性称为综合属性。

继承属性:若产生式右部符号B的属性值是根据左部非终结符的属性值或者右部其它符号的属性值决定的,则B的属性为继承属性。

在两种情况下,都说属性b依赖于属性c1,c2,…,c k

(1)非终结符既可有综合属性也可有继承属性,但文法开始符

号没有继承属性。

(2) 终结符只有综合属性,没有继承属性,它们由词法程序提供。

在计算时:综合属性沿属性语法树向上传递;继承属性沿属性语法树向下传递。

语法制导翻译:是指在语法分析过程中,完成附加在所使用的产生式上的语义规则描述的动作。

语法制导翻译实现:对单词符号串进行语法分析,构造语法分析树,然后根据需要构造属性依赖图,遍历语法树并在语法树的各结点处按语义规则进行计算。

$

中间代码(中间语言)

1、是复杂性介于源程序语言和机器语言的一种表示形式。/

2、一般,快速编译程序直接生成目标代码。

3、为了使编译程序结构在逻辑上更为简单明确,常采用中间代码,这样可以将与机器相关的某些实现细节置于代码生成阶段仔细处理,并且可以在中间代码一级进行优化工作,使得代码优化比较容易实现。

何谓中间代码:源程序的一种内部表示,不依赖目标机的结构,易于代码的机械生成。

为何要转换成中间代码

逻辑结构清楚;利于不同目标机上实现同一种语言。

便于移植,便于修改,便于进行与机器无关的优化。

中间代码的几种形式:逆波兰记号,三元式和树形表示,四元式

逆波兰记号:把运算分量(操作数)写在前面,把运算符写在后面的表示法,又称后缀表示法。中缀表达式向逆波兰表达式转换

postfix(x)=x postfix(c)=c

postfix(E1 op E2)= postfix(E1) postfix(E2) op

postfix((E))= postfix(E)

第九章:

符号表的一般形式:一张符号表的的组成包括两项,即名字栏和信息栏。

信息栏包含许多子栏和标志位,用来记录相应名字和种种不同属性,名字栏也称主栏。主栏的内容称为关键字(key word)。

符号表的功能:

(1)收集符号属性

在分析语言程序中标识符说明部分时,编译程序根据说明信息收集有关标识符的属性,并在符号表中建立符号的相应属性信息。

(2) 上下文语义的合法性检查的依据:检查标识符属性在上下文中的一致性和合法性。

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

符号的主要属性及作用:

1. 符号名

.

2. 符号的类型(整型、实型、字符串型等))

3. 符号的存储类别(公共、私有)

4. 符号的作用域及可视性(全局、局部)

5. 符号变量的存储分配信息(静态存储区、动态存储区)

6. 符号的其它属性

数组内情向量(类型、维数、各维的上下界、首地址等)

记录结构型的成员信息

函数及过程的形参

第十章:

运行时的存储区

为了使目标程序能够运行,编译程序要从操作系统中得到一块存储区,以使目标程序能够在其上运行。

运行时的存储区划分

目标区:存放目标代码。

静态数据区:编译时能确定所占用空间的数据。

栈区和堆区:可变数据及管理过程活动的控制信息。

存储分配方案策略:静态存储分配;动态存储分配:栈式、堆式。

!

静态存储分配

1、基本策略

在编译时就安排好目标程序运行时的全部数据空间,并能确定每个数据项的单元地址。

2、适用的分配对象:子程序的目标代码段;全局数据目标(全局变量)

3、静态存储分配的要求:不允许递归调用,不含有可变数组。

FORTRAN程序是段结构,不允许递归,数据名大小、性质固定。是典型的静态分配

动态存储分配

1、如果一个程序设计语言允许递归过程、可变数组或允许用户自由申请和释放空间,那么,

就需要采用动态存储管理技术。

&

2、两种动态存储分配方式:栈式,堆式

栈式动态存储分配

分配策略:将整个程序的数据空间设计为一个栈。

【例】在具有递归结构的语言程序中,每当调用一个过程时,它所需的数据空间就分配在栈顶,每当过程工作结束时就释放这部分空间。

过程所需的数据空间包括两部分

一部分是生存期在本过程这次活动中的数据对象。如局部变量、参数单元、临时变量等;另一部分则是用以管理过程活动的记录信息(连接数据)。

活动记录(AR)

?

一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区(块)叫做一个活动记录。

构成

1、临时工作单元;

2、局部变量;

3、机器状态信息;

4、存取链;

5、控制链;

6、实参;

7、返回地址

第十一章:

什么是代码优化

所谓优化,就是对代码进行等价变换,使得变换后的代码运行结果与变换前代码运行结果相同,而运行速度加快或占用存储空间减少。

优化原则:等价原则:经过优化后不应改变程序运行的结果。

有效原则:使优化后所产生的目标代码运行时间较短,占用的存储空间较小。

合算原则:以尽可能低的代价取得较好的优化效果。

常见的优化技术

(1) 删除多余运算(删除公共子表达式)(2) 代码外提:是针对循环的

(3)强度削弱;把执行时间较长的运算替换为执行时间较短的运算

(4)变换循环控制条件(5)合并已知量与复写传播(6)删除无用赋值

基本块定义

程序中只有一个入口和一个出口的一段顺序执行的语句序列,称为程序的一个基本块。对四元式序列,各个基本块的入口语句是:

(1)代码序列的第一个语句。(2)转移语句的目标语句。(3)转移语句的下一条语句。

例子:

(1) read (C)

(2) A:= 0

(3) B:= 1

(4) L1: A:=A + B

(5) if B>= C goto L2

(6) B:=B+1

(7) goto L1

(8) L2: write (A)

(9) halt

必经结点

在程序流图中,对任意结点m和n,如果从流图的首结点出发,到达n的任一通路都要经过m,则称m是n的必经结点,记为m DOM n。

必经结点集:流图中结点n的所有必经结点的集合称为结点n的必经结点集,记为D(n)。回边:假设a→ b是流图中一条有向边,如果b DOM a,则称a→b是流图中的一条回边。循环(依据回边判断)

1、给出一个回边n d,定义这个边的(自然)循环是d加上所有不经过d能到达n的结点;

2、d是这个循环的首结点。

【例】求出左图的所有回边。

【解答】(1) 6→6,因为D(6)={1,2,4,6},

所以6 DOM 6,故6→6是回边;

(2) 7→4,因为D(7)={1,2,4,7},

所以4 DOM 7,故7→4是回边;

(3) 4→2,因为D(4)={1,2,4},

所以2 DOM 4,故4→2是回边。

容易看出,其它有向边都不是回边。

例二:求回边和循环

回边4 → 3(3 DOM 4)

循环:{3,4,5,6,7,8,10}

回边7 → 4( 4 DOM 7 )

循环:{4,5,6,7,8,10}

回边10→7 (7 DOM 10 )

循环:{7,8,10}

回边8 → 3 (3 DOM 8)

循环:{3,4,5,6,7,8,10}

1

2

4

3

5

7

6

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

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

《编译原理》考试试题及答案(汇总) 一、是非题(请在括号内,正确的划√,错误的划×)(每个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.下列______优化方法不是针对循环优化进行的。

编译原理试题

中间语言与语法制导翻译 重点与难点 重点:语法制导翻译的基本思想,属性文法,翻译模式,说明语句的翻译方案。 三地址码,各种语句的目标代码结构、属性文法与翻译模式。 难点:属性的意义,对综合属性,继承属性,固有属性的理解,属性计算,怎么通过属性来表达翻译。布尔表达式的翻译,对各种语句的目标代码结构、属性文法与翻译模式的理解。 基本要求 掌握语法制导翻译的基本思想,属性文法,综合属性,继承属性,固有属性,属性计算,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( num, num.val ) } (1) 指出文法中的各非终结符具有哪些综合属性和哪些继承属性 ⑵画出按本翻译模式处理表达式 a + 20 + ( b - 10 ) 时所生成的语法树 【解】 (1)E的综合属性 p,R的继承属性i,综合属性s;T的综合属性p (2) 处理表达式 a + 20 + ( b - 10 ) 时所生成的语法树如下 + (NUM, 20) - ( ID, b) (NUM, 10) 例2 定义一个计算器的属性文法,完成一个输入表达式值的计算和显示, 【解】计算器的文法 L → E

编译原理知识点

1.解释程序:不生成目标代码 编译程序:生成目标代码 2.编译程序组成:8个 分析< 前端>:(词法分析程序、语法分析程序、语义分析程序、中间代码生成程序) 综合< 后端>:(代码优化程序、目标代码生成程序) 贯穿始末:表格管理程序、出错处理程序 3.文法四元组: 终结符号集合Vt 、非终结符号集合Vn、产生式集合P、识别符号(开始符号)S V T∩V N=Φ 文法-> 语言(推导、规约)唯一;语言-> 文法(凑规则)不唯一。 4.文法分类: 0型文法(短语结构文法):左侧至少含有一个非终结符 1型文法(上下文有关文法):左侧长度<= 右侧长度S->ε除外,S不能出现在右侧2型文法(上下文无关文法):左侧只能有一个非终结符( 语法分析) 3型文法(正规文法):A-> aB A->a 右线性;( 词法分析) A->Ba 或A->a 左线性(看非终结符位置) 5.A*=A0 ∪A+ A0 ={ε} !={ } =Φ空集 A+ =AA* =A*A 6.句型:符号串x是从识别符号S推导出来的,x称为一个句型 句子:x仅由终结符号组成,仅含终结符号的句型是一个句子 短语:子树的末端(叶子)从左至右连成的串(包括整棵语法树) 简单子树:只含有单层分枝的子树 直接短语( 简单短语):由简单子树的叶子组成 句柄:最左边的直接短语(不一定含终结符) 素短语:至少含有一个终结符的短语,并且除它自身之外不再含任何更小的素短语最左素短语:最左边的素短语 短语:P(相对于T、E)、P+T(相对于E)、i(相对于P、F)、P+T+i(相对于E)直接短语:P、i 句柄:P (最左边的直接短语) 素短语:P+T 、i (至少含有一个终结符的短语)最左素短语:P+T 7.二义性文法:有两个不同的最左推导或有两个不同的最右推导或能产生两棵语法树 8.文法产生式正规式 规则1 A→xB B→y A = xy

编译原理复习题及答案

编译原理复习题及答案 一、选择题 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

编译原理考试试卷

一、填空题(每空 2 分,共 30 分) 1、编译程序的整个过程可以从逻辑上划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等几个阶段,另外还有两个重要的工 作是表格管理和出错处理 2、规范规约中的可归约串是句柄,算符优先分析中的可归约串是最左素短语。 3、语法分析方法主要可分为自顶向下和自底向上两大类。 4、 LR ( 0)文法的项目集中不会出现移进 -归约冲突和归约 -归约冲突。 5、数据空间的动存态储分配方式可分为栈式和堆式两种。 6、编译程序是指能将源语言程序翻译成目标语言程序的程序。 7、确定有穷自动机DFA 是NFA的一个特例。 8、表达式 (a+b)*c的逆波兰表示为ab+c*。 二、选择题(每题 2 分,共 20 分) 1、 L R 语法分析栈中存放的状态是识别B的 DFA 状态。 A 、前缀B、可归前缀C、项目 D 、句柄 2、D不可能是目标代码。 A 、汇编指令代码 B 、可重定位指令代码 C、绝对机器指令代码 D 、中间代码 3、一个控制流程图就是具有C的有向图 A 、唯一入口结点B、唯一出口结点C、唯一首结点 D 、唯一尾结点 4、设有文法G[S] : S→ b|bB B → bS ,则该文法所描述的语言是C。 A 、 L ( G)={b i|i≥ 0}B、 L (G) ={b 2i |i≥0} C、 L ( G)={b 2i+1|i≥ 0} D 、 L ( G)={b 2i+1|i ≥1} 5、把汇编语言程序翻译成机器可执行的目标程序的工作是由 B完成的。 A 、编译器 B 、汇编器C、解释器D、预处理器6、在目标代码生成阶段,符号表用于D。 A 、目标代码生成 B 、语义检查C、语法检查D、预处理器地址分配0 7、规范归约是指B。 A 、最左推导的逆过程 B 、最右推导的逆过程C、规范推导D、最左归约逆过程 8、使用A可以定义一个程序的意义。 A 、语义规则B、词法规则C、语法规则D、左结合规则 9、经过编译所得到的目标程序是D。 A 、三元式序列B、四元式序列C、间接三元式 D 、机器语言程序或汇编语言程序 10、在一个基本块内进行的代码优化是B。 A 、全局优化B、局部优化C、循环优化D、代码外提 三、简答题( 3 小题,共 30 分) 1、已知文法G[S]:S→Ac|aB A→ ab B→ bc 证明该文法具有二义性(本题 6 分) 证明:因为该文法的句型abc 存在如下两棵语法树: 所以,该文法具有二义性 一、填空题(每空 1分,共 20分) 1.编译过程一般分为、、中间代码生成、 和目标代码生成五个阶段。 2.语法分析最常用的两类方法是和分析法。 3.确定的有穷自动机是一个,通常表示为。

编译原理知识点汇总

编译原理的复习提纲 1.编译原理=形式语言+编译技术 2.汇编程序: 把汇编语言程序翻译成等价的机器语言程序 3.编译程序: 把高级语言程序翻译成等价的低级语言程序 4.解释执行方式: 解释程序,逐个语句地模拟执行 翻译执行方式: 翻译程序,把程序设计语言程序翻译成等价的目标程序 5.计算机程序的编译过程类似,一般分为五个阶段: 词法分析、语法分析、语义分析及中间代码生成、代码优化、目标代码生成 词法分析的任务: 扫描源程序的字符串,识别出的最小的语法单位(标识符或无正负号数等) 语法分析是: 在词法分析的基础上的,语法分析不考虑语义。语法分析读入词法分析程序识别出的符号,根据给定的语法规则,识别出各个语法结构。 语义分析的任务是检查程序语义的正确性,解释程序结构的含义,语义分析包括检查变量是否有定义,变量在使用前是否具有值,数值是否溢出等。

语法分析完成之后,编译程序通常就依据语言的语义规则,利用语法制导技术把源程序翻译成某种中间代码。所谓中间代码是一种定义明确、便于处理、独立于计算机硬件的记号系统,可以认为是一种抽象机的程序 代码优化的主要任务是对前一阶段产生的中间代码进行等价变换,以便产生速度快、空间小的目标代码 编译的最后一个阶段是目标代码生成,其主要任务是把中间代码翻译成特定的机器指令或汇编程序 编译程序结构包括五个基本功能模块和两个辅助模块 6.编译划分成前端和后端。 编译前端的工作包括词法分析、语法分析、语义分析。编译前端只依赖于源程序,独立于目标计算机。前端进行分析 编译后端的工作主要是目标代码的生成和优化后端进行综合。独立于源程序,完全依赖于目标机器和中间代码。 把编译程序分为前端和后端的优点是: 可以优化配置不同的编译程序组合,实现编译重用,保持语言与机器的独立性。 7.汇编器把汇编语言代码翻译成一个特定的机器指令序列 第二章 1.符号,字母表,符号串,符号串的长度计算P18,子符号串的含义,符号串的简单运算XY,Xn, 2.符号串集合的概念,符号串集合的乘积运算,方幂运算,闭包与正闭包的概念P19,P20A0 ={ε} 3.重写规则,简称规则。非xx(V

编译原理考试重点题

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}。 请画出状态转换距阵和状态转换图。 状态转换距阵为: 状态转换图为:

编译原理试题

1997年编译原理试题 1.(10分)某操作系统下合法的文件名为 device:name.extension 其中第一部分(device:)和第三部分(.extension)可缺省,若device, name和extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限自动机。 2.(20分) a. 下面的二义文法描述命题演算公式,为它写一个等价的非二义文法。 S—> S and S | S or S | not S | p | q | (S) b. 下面文法是否为LL(1)文法?说明理由。 S—> A B | P Q x A—> x y B—> b c P—> d P | εQ—> a Q | ε 3.(10分)某些语言允许给出名字表的一个属性表,也允许声明嵌在另一个声明里面,下面文法抽象这个问题。 D —> attrlist namelist | attrlist (D) namelist —> id, namelist | id attrlist —> A attrlist | A A —> decimal | fixed | float | real D —> attrlist namelist的含义是:在namelist中的任何名字有attrlist 中给出的所有属性。D—> attrlist (D) 的含义是:在括号中的声明提到的所有名字有attrlist 中给出的所有属性,而不管声明嵌套多少层。写一个翻译方案,它将每个名字的属性个数填入符号表。为简单起见,若属性重复出现,则重复计数。4.(10分)把表达式 -(a+b)*(c+d)+(a+b+c) 翻译成四元式。 5.(10分)由于文法二义引起的LR(1)分析动作冲突,可以依据消除二义的规则而得到LR(1)分析表,根据此表可以正确识别输入串是否为相应语言的句子。对于非二义非LR(1)文法引起的LR(1)分析动作的冲突,是否也可以依据什么规则来消除LR(1)分析动作的冲突而得到LR(1)分析表,并且根据此表识别相应语言的句子?若可以,你是否可以给出这样的规则? 6.(5分)UNIX 下的C编译命令cc的选择项g和O的解释如下,其中dbx 的解释是“dbx is an utility for source-level debugging and execution of programs written in C”。试说明为什么用了选择项g后,选择项O便被忽略。 -g Produce additional symbol table information for dbx(1) and dbxtool(1) and pass -lg option to ld(1) (so as to include the g library, that is:

编译原理复习题--有答案版

1、给出下面语言的相应文法。L1={a n b n c i|n≥1,i≥0} 答案:S→AB|B A→a|aA B→bBc|bc 2.给出下面语言的相应文法 L1={a n b n c m d m| m,n≥1,n为奇数,m为偶数}。 答案:文法G(S):S→AC A→aaAbb/ab C→ccCcc/cc 3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。 (要求:先将正规式转化为NFA,再将NFA确定化,最小化) (一)相应的正规式为(a|b)*ab(a|b)* (二)①与此正规式对应的NFA为 答案;在自己写的纸上 4、对下面的文法G: E→TE’E’→+E|εT→FT’T’→T|ε F→PF’F’→*F’|εP→(E)|a|b|∧ (1)证明这个文法是LL(1)的。 考虑下列产生式: 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,^,+,),#}=φ FIRST((E))∩FIRST(a) ∩FIRST(b) ∩FIRST(^)=φ 所以,该文法式LL(1)文法.

计算这个文法的每个非终结符的FIRST和FOLLOW。(8分) 答案: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,^,+,),#} (3)构造它的预测分析表。(6分) 答案;在手机上 写出表达式a+b*(c-d)对应的逆波兰式和三元式序列。 答案:逆波兰式:(abcd-*+) 三元式序列: OP ARG1 ARG2 (1) - c d (2) * b (1) (3) + a (2) 给出下面语言的相应文法 L1={a n b n a m b m|n,m≥0} 给出下面语言的相应文法 答案:S→AB|A|B|∑ A→aAb|ab B→aBb|ab

2021年编译原理知识点

1.解释程序:不生成目的代码 编译程序:生成目的代码 2.编译程序构成:8个 分析< 前端>:(词法分析程序、语法分析程序、语义分析程序、中间代码生成程序) 综合< 后端>:(代码优化程序、目的代码生成程序) 贯穿始末:表格管理程序、出错解决程序 3.文法四元组: 终结符号集合Vt 、非终结符号集合Vn、产生式集合P、辨认符号(开始符号)S V T∩V N=Φ 文法-> 语言(推导、规约)唯一;语言-> 文法(凑规则)不唯一。 4.文法分类: 0型文法(短语构造文法):左侧至少具有一种非终结符 1型文法(上下文关于文法):左侧长度<= 右侧长度S->ε除外,S不能出当前右侧2型文法(上下文无关文法):左侧只能有一种非终结符( 语法分析) 3型文法(正规文法):A-> aB A->a 右线性;( 词法分析) A->Ba 或A->a 左线性(看非终结符位置) 5.A*=A0 ∪A+ A0 ={ε} !={ } =Φ空集 A+ =AA* =A*A 6.句型:符号串x是从辨认符号S推导出来,x称为一种句型 句子:x仅由终结符号构成,仅含终结符号句型是一种句子 短语:子树末端(叶子)从左至右连成串(涉及整棵语法树) 简朴子树:只具有单层分枝子树 直接短语( 简朴短语):由简朴子树叶子构成 句柄:最左边直接短语(不一定含终结符) 素短语:至少具有一种终结符短语,并且除它自身之外不再含任何更小素短语

最左素短语:最左边素短语 短语:P(相对于T、E)、P+T(相对于E)、i(相对于P、F)、P+T+i(相对于E)直接短语:P、i 句柄:P (最左边直接短语) 素短语:P+T 、i (至少具有一种终结符短语)最左素短语:P+T 7.二义性文法:有两个不同最左推导或有两个不同最右推导或能产生两棵语法树 8.文法产生式正规式 规则1 A→xB B→y A = xy 规则2 A→xA|y A = x*y 右线性 A→Ax|y A = yx* 左线性 规则3 A→x A→y A = x|y 9.DFA 初态唯一,转换函数为单值映射 表达方式:转移矩阵、状态转换图 状态转换图上若存在一条从初态到某一终态道路,且这条路上所有弧标记符连成字符串为t,则称t被DFA接受。 10.NFA初态可为各种,转换函数为多值映射 拟定化:与某一NFA等价DFA不唯一 1.状态集合Iε-闭包 2.move函数 最小化:消除多余状态和合并等价状态 多余状态:从自动机开始状态出发,任何输入串也不能到达那个状态;或者从这个状态没有通路到达终态。

编译原理考试

编译原理考试

————————————————————————————————作者:————————————————————————————————日期:

一、判断对错:(对√;错 ;每小问2分共24分) <1>算符优先分析法是一种规范归约分析法。( ) <2>若文法Gs中不含形如T→…BD…的产生式,T、B、D∈V N,则称Gs为算符文法。(√) <3>若一个语言是有穷集合,则定义该语言的文法一定是递归的。( ) <4>若两个正规式所表示的正规集相同,则认为二者是等价的。(√) <5>LR分析法是一种规范归约分析法。(√) <6>一个LR(0)项目集I={B →α.bβ, P →aA.},则说I中含有“移进—归约”冲突。(√) <7>SLR(1)文法是无二义性文法。(√) <8>消除左递归后的文法一定是LL(1)文法。( ) <9>对任何编译程序而言,代码优化是必不可少的。( ) <10>编译程序与具体的机器无关。( ) <11>在自动机的概念中,终态与非终态是可区别的。(√) <12>逆波兰式ab+cd+*所代表的中缀表达式是:(a+b)*(c+d)(√) 1. 一个语言有文法是不惟一的。(√) 2. 若一个语言是无穷集合,则定义该语言的文法一定是递归的。(√) 3. 紧跟在条件转移语句后面的语句是基本块的入口语句。(√) 4. 算符优先分析法是一种规范归约分析法。( ) 5. 自下而上语法自导翻译的特点:当栈顶形成句柄时,在归约的同时执行其语义动作。(√) 6. LR(0)文法、SLR(1)文法都是无二义性文法。(√) 7.K、∑分别表示有限状态集和有穷字母表, DFA M的转换函数f是一个从K ?∑到K的单值映射。(√) 8. 对任何编译程序而言,代码优化是必不可少的。( ) 9. 直接短语是某规则的右部,它对应简单子树叶结点从左到右排列形成的符号串。(√) 10. 两个有穷自动机等价是指它们的状态数和有向弧数相等。( ) 11. 一个LR(0)项目集为:I={A→α.bβ, D→β.},则说I中含有“移进--归约”冲突。 (√) 12. 若两个正规式所表示的正规集相同,则认为二者是等价的。(√) 13. 无左递归的文法是LL(1)文法。( ) 14. 逆波兰式abcde/+*+所代表的中缀表达式是:a+b*(c+d/e)(√) 15. 编译程序结构中,中间代码优化及目标代码生成两个阶段与具体的机器有关。( ) 16. LALR分析法中,同心集的合并不会产生“移进--归约”冲突。(√)

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

《编译原理》期末考试复习题 一、是非题(请在括号内,正确的划√,错误的划×)(每个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.一个句型中的最左简单短语称为该句型的___句柄__。

编译原理考试试卷

南京工业大学继续教育学院编译原理期末考试试卷 (2012-2013学年) A卷 一、选择题(每题2分,共20分) 得分 1. 一个上下文无关文法G包括四个组成部分:一组终结符,一组非终结符,一个_____,以及一组产生式。 A.字符串 B.运算符号 C.开始符号 D.文法 2.程序的基本块是指_____。 A.一个子程序 B.一个仅有一个入口和一个出口的语句 C.一个没有嵌套的程序段 D.一组顺序执行的程序段,仅有一个入口和一 个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于_____分析方法。 A.自左向右 B.自顶向下 C.自底向上 D.自右向左 4.经过编译所得到的目标程序是_____。 A.四元式序列 B.间接三元式序列 C.二元式序列 D.机器语言程序或汇编语言程序 5.运行阶段的存储组织与管理的目的是_____。 ①提高编译程序的运行速度②节省编译程序的存储空间 ③提高目标程序的运行速度④为运行阶段的存储分配做准备 A. ①② B. ②③ C. ③④ D. ④②6.词法分析器的输出结果是_____。 A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值 7.正规式M 1 和M 2 等价是指_____。

A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等 C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等 8.文法G:S→xSx|y所识别的语言是_____。 A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx* 9.语言是_____。 A.句子的集合B.产生式的集合 C.符号串的集合D.句型的集合 10.编译程序前三个阶段完成的工作是 A.词法分析、语法分析和代码优化 B.代码生成、代码优化和词法分析 C.词法分析、语法分析、语义分析和中间代码生成 D.词法分析、语法分析和代码优化 二、名词解释(每题2分,共20分) 得分 1.最左推导: 2.语法: 3.文法: 4.基本块: 5.语法制导翻译: 6.短语: 7.规范句型:

编译原理知识点

编译原理: 编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。编译原理是计算机专业设置的一门重要的专业课程。编译原理课程是计算机相关专业学生的必修课程和高等学校培养计算机专业人才的基础及核心课程,同时也是计算机专业课程中最难及最挑战学习能力的课程之一。编译原理课程内容主要是原理性质,高度抽象。 基本概念: 编译原理即是对高级程序语言进行翻译的一门科学技术, 我们都知道计算机程序由程序语言编写而成, 在早期计算机程序语言发展较为缓慢, 因为计算机存储的数据和执行的程序都是由0、1代码组合而成的, 那么在早期程序员编写计算机程序时必须十分了解计算机的底层指令代码通过将这些微程序指令组合排列从而完成一个特定功能的程序, 这就对程序员的要求非常高了。人们一直在研究如何如何高效的开发计算机程序, 使编程的门槛降低。 编译器: C语言编译器是一种现代化的设备, 其需要借助计算机编译程序, C语言编译器的设计是一项专业性比较强的工作, 设计人员需要考虑计算机程序繁琐的设计流程, 还要考虑计算机用户的需求。计算机的种类在不断增加, 所以, 在对C语言编译器进行设计时, 一定要增加其适用性。C语言具有较强的处理能力, 其属于结构化语言, 而且在

计算机系统维护中应用比较多, C语言具有高效率的优点, 在其不同类型的计算机中应用比较多。 C语言编译器前端设计 编译过程一般是在计算机系统中实现的, 是将源代码转化为计算机通用语言的过程。编译器中包含入口点的地址、名称以及机器代码。编译器是计算机程序中应用比较多的工具, 在对编译器进行前端设计时, 一定要充分考虑影响因素, 还要对词法、语法、语义进行分析。 1 词法分析 词法分析是编译器前端设计的基础阶段, 在这一阶段, 编译器会根据设定的语法规则, 对源程序进行标记, 在标记的过程中, 每一处记号都代表着一类单词, 在做记号的过程中, 主要有标识符、关键字、特殊符号等类型, 编译器中包含词法分析器、输入源程序、输出识别记号符, 利用这些功能可以将字号转化为熟悉的单词。 2 语法分析 语法分析是指利用设定的语法规则, 对记号中的结构进行标识, 这包括句子、短语等方式, 在标识的过程中, 可以形成特殊的结构语法树。语法分析对编译器功能的发挥有着重要影响, 在设计的过程中, 一定要保证标识的准确性。 3 语义分析 语义分析也需要借助语法规则, 在对语法单元的静态语义进行检查时, 要保证语法规则设定的准确性。在对词法或者语法进行转化

编译原理复习题 (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个单元。

编译原理知识点总结 哈工程

第一章概论 1.什么是编译器?输入输出? 编译器是将一种语言翻译为另一种语言的计算机程序。 输入:源语言( source language) 编写的程序 输出:目标语言( target language ) 编写的程序。 2.汇编语言的优缺点 优点:汇编语言大大提高了编程的速度和准确度 缺点:编写起来也不容易,阅读和理解很难;而且汇编语言的编写严格依赖于特定的机器,所以为一台计算机编写的代码在应用于另一台计算机时必须完全重写。 3.什么是解释器?与编译器的区别? 解释程序是如同编译器的一种语言翻译程序。 与编译器的区别:它立即执行源程序而不是生成在翻译完成之后才执行的目标代码。 4.乔姆斯基分类结构有几种文法?名称?相互关系? 4种 名称: 0型无限制文法 1型上下文相关文法 2型上下文无关文法 3型正则文法 相互关系:其中的每一个都是其前者的专门化。 5.什么是扫描器?扫描器的功能是什么? 扫描器就是语法分析程序。 功能:依据词法规则,分析由字符组成的源程序,把它分割为一个一个具有独立意义的最小语法单位,即单词。 6.什么是编辑器?IDE中编辑器的新功能 编译器通常接受由任何生成标准文件(例如ASCII 文件)的编辑器编写的源程序。 IDE 中编辑器的新功能:尽管编辑器仍然生成标准文件,但会转向正被讨论的程序设计语言的格式或结构。这样的编辑器称为基于结构的,且它早已包括了编译器的某些操作;因此,程序员就会在程序的编写时而不是在编译时就得知错误了。从编辑器中也可调用编译器以及与它共用的程序,这样程序员无需离开编辑器就可执行程序。

7.什么是调试器,与编译器的关系 调试程序是可在被编译了的程序中判定执行错误的程序。 运行一个带有调试程序的程序与直接执行不同,这是因为调试程序保存着所有的或大多数源代码信息(诸如行数、变量名和过程)。它还可以在预先指定的位置(称为断点)暂停执行,并提供有关已调用的函数以及变量的当前值的信息。为了执行这些函数,编译器必须为调试程序提供恰当的符号信息。 8.编译器有哪几个功能模块?各模块的功能及输入输出 目标代码

编译原理试卷

一、填空题(每题3分,共15分) 1.编译原理是一种翻译程序,它将高级语言编写的源程序翻译成等价的机器语言或汇编 语言的目标程序 2.整个编译过程可以分为五个阶段,分别是:词法分析、语法分析、语义分析及中 间代码生成、代码优化和目标代码的生成。 3.设X是符号串,符号串的幂运算X0= ε 4.乔姆斯基把文法分为四种类型,即0型、1型、2型、3型文法。2型文法也称为 上下文无关文法 5.采用递归下降分析法进行语法分析,要求文法是文法。 二、选择题(每题3分,共15分) 1.若文法G定义的语言是无限集,则文法必然是(D)。 A.上下文无关文法 B.正规文法 C.二义性文法 D.递归文法 2.文法G产生的()的集合是该文法的描述语言。 A.句型 B.终结符集 C.非终结符集 D.句子 3.通常程序设计语言的词法规则可用正规式描述,词法分析器可用(B)来实现。 A.语法树 B.有穷自动机 C.栈 D.数组 4.设有文法G[S]:S→Bb│b,B→bS,该文法所描述的语言是(C) A. b n,n≥0 B.b2n,n≥0 C.b2n+1,n≥0 D.b2n+1,n≥1 5.用1代表字母,d代表数字,则定义标识符单词的正规式是(C) A.1d* B.11* C.1(1│d)* D.11*│d* 三、判断题(每小题2分,共10分) ()给定一个文法,就能从结构上唯一地确定其语言,给定一种语言,就能唯一地确定其文法。 ()用二义性文法定义的语言也是二义性的。 ()正规式、正规文法、有穷自动机都是描述正规集的工具,它们的描述能力是等价的,它们之间是可以相互转换的。 ()采用自下而上分析法进行语法分析需要消除文法的递归性。 ()算符优先文法中,任何两个终结符对(a,b)在·>,<·和=·这三种关系中只有一种关系成立。

编译原理复习题答案

二、概念题 1、设有文法:P→P+Q|Q Q→Q*R|R R→(P)|i (1)证明Q*R+Q+Q是它的一个句型。(3分) (2)给出Q*R+Q+Q的所有短语,直接短语和句柄。(4分) (3)给出句子i+i*i的最右推导。(4分) (4)给出句子i+i*i的最左推导。(4分) 2、设有文法:E→E+T|T T→T*F|F F→(E)|i (1)证明E+T*F是它的一个句型。(3分) ?+?+* 答案:E E T E T F (2)给出E+T*F的所有短语,直接短语和句柄。(4分) 短语: E+T*F, T*F, 直接短语: T*F 句柄: T*F (3)给出句子i+i*i的最右推导。(4分) 3、写出表达式a+b*(c-d)对应的逆波兰式和三元式序列。答案:逆波兰式:(abcd-*+) 三元式序列: OP ARG1 ARG2

(1) - c d (2) * b (1) (3) + a (2) 三、词法分析题 给出下面语言的相应文法 L1={a n b n a m b m|n,m≥0} 答案:S→AB|A|B|∑ A→aAb|ab B→aBb|ab 给出下面语言的相应文法 L2={a n b n c i|n≥1,i≥0} 答案:S→AB|B A→a|aA B→bBc|bc 给出下面语言的相应文法 L3={a n b n c m| m,n≥1,n为奇数,m为偶数}。 答案:文法G(S):S→AC A→aaAbb/ab C→ccCcc/cc 四、词法分析题 1、构造下面正规式相应的DFA ((0|1)*|(11)*)*

(要求:先将正规式转化为NFA,再将NFA确定化,最小化)2、构造下面正规式相应的DFA 1(0|1)*101 答案: I I0 I1 {X} Ф{A,B,C} {A,B,C} { B,C} { B,C,D} {B,C} { B,C} { B,C,D} {B,C,D} { B,C,E} { B,C,D} {B,C,E} { B,C} {B,C,D,y} {B,C,D,y} {B,C,E} { B,C,D} 3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。(要求:先将正规式转化为NFA,再将NFA确定化,最小化)答案:(一)相应的正规式为(a|b)*ab(a|b)* (二) ①和此正规式对应的NFA为 ②状态转换矩阵为:

相关文档
最新文档