编译原理期末总结复习

编译原理期末总结复习

编译原理期末总结复习

篇一:

一、简答题

1.什么是编译程序?

答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。

将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。

2.请写出文法的形式定义?

答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S)

–其中Vn表示非终结符号

– Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ

– S是开始符号,

–P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*)

3.语法分析阶段的功能是什么?

答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:

程序、语句、表达式)。确定整个输入串是否构成语法上正确的程序。

4.局部优化有哪些常用的技术?

答:优化技术1—删除公共子表达式

优化技术2—复写传播

优化技术3—删除无用代码

优化技术4—对程序进行代数恒等变换(降低运算强度)

优化技术5—代码外提

优化技术6—强度削弱

优化技术7—删除归纳变量

优化技术简介——对程序进行代数恒等变换(代数简化)

优化技术简介——对程序进行代数恒等变换(合并已知量)

5.编译过程分哪几个阶段?

答:逻辑上分五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、目

标代码生成。每个阶段把源程序从一种表示变换成另一种表示。

6. 什么是文法?

答:文法是描述语言的语法结构的形式规则。是一种工具,它可用于严格定义句子的结构;

用有穷的规则刻划无穷的集合;文法是被用来精确而无歧义地描述语言的句子的构成方式;文法描述语言的时候不考虑语言的含义。

7. 语义分析阶段的功能是什么?

答:对语法分析所识别出的各类语法范畴分析其含义,进行初步的翻译(翻译成中间代码);

并对静态语义进行审查。

8.代码优化须遵循哪些原则?

答:等价原则:不改变运行结果

有效原则:优化后时间更短,占用空间更少

合算原则:应用较低的代价取得较好的优化效果

9.词法分析阶段的功能是什么?

答:

逐个读入源程序字符并按照构词规则切分成一系列单词

任务:读入源程序,输出单词符号

—滤掉空格,跳过注释、换行符

—追踪换行标志,指出源程序出错的行列位置

—宏展开,……

10.什么是符号表?

答:符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号

的类型和特征等相关信息。这些信息一般以表格形式存储于系统

中。如常数表、变量名表、数组名表、过程名表、标号表等等,统称为符号表。对于符号表组织、构造和管理方法的好坏会直接影响编译系统的运行效率。

11.什么是属性文法?

答:是在上下文无关文法的基础上,为每个文法符号(含终结符和非终结符)配备若干个属

性值,对文法的每个产生式都配备了一组属性计算规则(称为语义规则)。在语法分析过程中,完成语义规则所描述的动作,从而实现语义处理。

12.什么是基本块

答:是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句,入口

是其第一个语句,出口是其最后一个语句。

13.代码优化阶段的功能是什么?

答:对已产生的中间代码进行加工变换,使生成的目标代码更为高效(时间和空间)。

14.文法分哪几类?

答:文法有四种:设有G=(Vn,Vt,P,S),不同类型的文法只是对产生式的要求不同:

0型文法(短文文法): G的每个产生式αβ满足:α∈V+且α中至少含有一个非终结符,β∈V*

1型文法(上下文有关文法):如果G的每个产生式αβ均满足|β|>=|α|,仅当Sε除外,但S不得出现在任何产生式的右部2型文法(上下文无关文法):G的每个产生式为Aβ, A是一非终结符,β∈V*

3型文法(正规文法):G的每个产生式的形式都是:AαB或Aα,其中A,B是非终结符,α是终结符串。(右线性文法)。

15.循环优化常用的技术有哪些?

答:代码外提;强度削弱;删除归纳变量。

16.什么是算符优先文法?

答:算符文法G的任何终结符a,b之间要么没有优先关系,若有优先关系,

至多有

中的一种成立,则G为一算符优先文法。

二、计算题

(一)推导、最左推导、最右推导和语法树,复习表达式文法及相关例题。

1. 表达式的推导

例: G = ({E}, {i, +, *, (, ) } , P , E)

P: E E+E | E*E | (E) | i

答:表达式(i)和(i+i)*i的推导:

E (E) (i)

E E*E (E)*E (E + E)*E (i + E)*E (i + i)*E (i + i)*i

E E*E E*i (E)* i (E + E)*i (E+ i)*i (i + i)*i

(i+i)*i的最左推导过程:

E E*E (E)*E (E + E)*E (i + E)*E (i + i)*E (i + i)*i

(i+i)*i的最右推导过程:

E E*E E*i (E + E)*i (E+ i)*i (i + i)*i

2.语法树

例:对文法G = ({E}, {i, +, *, (, ) } , P , E)

P: E E + E | E * E | ( E ) | i

答:句子(i+i)*i 的语法树:

例: G = ({E}, {i, +, *, (, ) } , P , E)

P: E E + E | E * E | ( E ) | i

答:句子 ( i * i + i)的语法树:

(1) E (E) (E + E) (E * E + E) (i * E + E) (i *i + i)

(二)给定语言求文法

(三)逆波兰式

篇二:

翻译程序:把一种语言程序转换成另一种语言程序,且在功能上是

相同的这样的程序。编译程序:把高级语言转换成低级语言,且在功能上是相同的这样的程序。

解释程序:边解释边执行源程序的程序。区别:编译程序有中间代码,而解释程序没有。编译过程的五个阶段:

1、词法分析任务:对构成源程序的字符串进行扫描和分解,识别出一个个单词。

2、语法分析任务:在词法分析的基础上,根据语言规则,把单词符号串分解成各类语法

单位。

3、语义分析和中间代码产生任务:对语法分析所识别出的各类语法范畴,分析其含义,

并进行初步翻译。

4、优化任务:对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效

的目标代码。

5、目标代码生成任务:把中间代码变换成特定机器上的低级语言代码。

编译程序的七个部分词法分析器,语法分析器、语义分析与中间代码产生器、优化器、目标代码生成器、表格管理和出错处理。

编译程序生成的五个办法:机器语言、高级语言、移植、自编译方式和使用工具自动生成。词法规则:指单词符号的形成规则。(也就是正规式)

语法规则:规定了如何从单词符号形成更大的结构。就是语法单位的形成规则。空字:不包含任何符号的序列。

闭包:中所有的符号组成的集合。

上下文无关文法是指:所定义的语法范畴是完全独立于这种范畴可能出现的环境的文法。上下文无关文法的四个组成部分:一组终结符号、一组非终结符号、一个开始符号和一组产生式。

终结符号也就是不可再分的基本符号。

非终结符号是用来代表语法范畴,表示一定符号串的集合。

开始符号是语言中我们最感兴趣的语法范畴。

产生式是定义语法范畴的书写规则。

句子:文法中从开始符号推导的终结符号串。

句型:从开始符号推导的符号串。

语言:文法中所有句子的集合。

程序语言的单词符号分为五种:关键字、标识符、常数、运算符和界符。

二元式表示:(种类,属性)

正规式的`运算符有三种:或,连接和闭包。优先顺序是:闭包,连接,或。

DFA怎么识别字:若存在一条从初态结点到某一终态结点的通路,且这条通路上所有弧的标记符连接成的字是a,则称a可为DFA所识别。

DFA怎么识别空字:若DFA的初态结点同时又是终态结点,则空字可为DFA所识别。 NFA怎么识别字:若存在一条从某一初态结点到终态结点的通路,且这条通路上所有弧的标记字依序连接成的字等于a,则称a可为NFA识别。

NFA怎么识别空字:若M的某些结点即是初态又是终态结点,或者存在一条从某个初态结点到某个终态结点的空通路,那么,空字可为M所识别。

语言的语法结构是用上下文无关文法描述的。

语法分析分为两类:自上而下分析法,自下而上分析法。

自上而下分析法面临的问题:1.文法的左递归问题。2.回溯3.成功可能是暂时的,产生虚假匹配。4.难于知道输入串中出错的确切位置。

5.效率低,代价高。

为什么消除左递归?因为含有左递归的文法将自上而下分析的过程陷入无限循环。为什么消除回溯?因为回溯统一做一大堆无效的工作。

自下而上分析法:从输入串开始,逐步进行归约,知道归约到文法的开始符号。短语:符号串推导过程中某非终结符推导的部分。

直接短语:符号串推导过程中某非终结符一步推导的部分。

句柄:一个句型的最左直接短语。

最左归约是最有推导的逆过程。

中间语言形式:后缀式,三元式,四元式,间接三元式。

中间语言的好处:1.便于进行与机器无关的代码优化工作。2.使编译程序改变目标机更容易。

3.使编译程序的结构在逻辑上更为简单,以中间语言为界面,编译前端和后端的借口更清晰。

篇三:

(1)程序设计语言

机器语言: 由0、1代码构成,不需翻译就可直接执行其程序。

汇编语言: 机器指令助记符(伪代码)形式,汇编后才可执行其程序。

高级程序设计语言: 类自然语言和数学公式形式

(2) 基本术语

源程序(Source Program):用源语言写的程序。源语言可以是汇编语言,也可以是高级程

序设计语言。

目标程序(Target Program) :也称为“结果程序”,是源程序经翻译程序加工以后所生成

的程序。目标程序可以用机器语言表示,也可以用汇编语言或其它中间语言表示。

翻译程序(Translating Program):是指把一个源程序翻译成逻辑上等价的目标程序的程序。

源程序为其输入,目标程序为其输出。

汇编程序(Assembler):是指把一个汇编语言写的源程序转换成等价的机器语言表示的目

标程序的翻译程序。

编译程序(Compiler):若源程序是用高级程序设计语言所写,经翻译程序加工生成目标程

序,则该翻译程序就称为“编译程序”,也可称为编译器。

解释程序:是高级语言翻译程序的一种,他将源语言书写的源程序作为输入,解释一句

后就提交计算机执行一句,并不形成目标程序,就像外语翻译中的“口译”一样,不产生全文的翻译文本。

运行系统(Running System):目标程序执行时,需要有一些子程序(如一些连接装配程序

及一些连接库等)配合进行工作,由这些子程序组成的一个子程序库称为运行系统。编译系统(Compiling System):编译程序和运行系统合称编译系统。

(3) 程序的翻译

除机器语言程序外,用其它语言书写的程序都必须经过翻译才能被计算机识别。这一过

程由翻译程序来完成。

编译方式是一种分阶段进行的方式,包括翻译和运行两部分。

前一阶段:翻译

后一阶段:运行,由运行系统配合完成。

(4) 过程

1、词法分析阶段

这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称单词符号或符号TOKEN)。

某源程序片断如下:

begin var sum, first, count: real; sum:=first+count*10 end.

保留字 begin var real end

标识符 sumfirstcountsumfirstcount

界符 .

逗号,逗号,冒号:分号;加号+乘号*赋值号:=整数10 10

2、语法分析阶段

是编译过程的第二个阶段。语法分析的任务是在词法分析的基础

上将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等等。一般这种语法短语,也称语法单位,或语法成分,或语法范畴。

语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。

3、语义分析阶段

依据语言的语义规则,对语法分析得到的语法结构分析其含义以及应进行的运算,审查源程序中有无语义错误,为代码生成阶段收集类型信息。

4、中间代码生成

在进行了上述的语法分析和语义分析阶段的工作之后,有的编译程序将源程序转变成一种内部表示形式,这种内部表示形式叫做中间代码。

所谓“中间代码”是一种结构简单,含义明确的记号系统,这种记号系统可以设计为多种多样的形式。

重要的设计原则:一是容易生成;二是容易将它翻译成目标代码。

5、代码优化

任务:对前阶段产生的中间代码系列进行变换或改造。目的是使生成的目标代码更高效,即省时间省空间。例如上例四个四元式可优化为下面两个四元式。

6、目标代码生成

任务:将中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。它的工作与硬件系统结构和指令含义有关。

7、表格管理

编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及到构造、查找或更新有关的表格,因此需要有表格管理的工作;

8、出错处理

如果编译过程中发现源程序有错误,编译程度应报告错误的性质

和错误发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动校正错误,这些工作称之为出错处理。

(5) 前端与后端

参考上面的图,目的是为了在多种源语言和多种目标语言的开发过程中,可以灵活搭配组合,消除重复开发的工作量,提高编译系统的开发效率。

(6) 遍

所谓遍,是对源程序或源程序的中间形式从头到尾扫视并完成规定任务的过程。

每一遍扫视可完成一个阶段或多个阶段的功能。

一遍的编译程序:以语法分析程序为核心。

多遍扫描的优点:

可以减少内存容量的需求,分遍后,以遍为单位分别调用编译的各个程序,各遍程序可以相互覆盖。

可使各遍的编译程序相互独立,结构清晰。

能够进行充分优化,产生高质量的目标程序。

可将编译程序分为前端和后端,有利于编译程序的移植。

多遍扫描的缺点

每遍都要读符号、送符号,增加了许多重复性的工作,降低编译效率。

(7) 程序设计语言范型(从支持的计算模式)

1. 强制(命令)式语言:是面向动作的,即一个计算过程看做是一系列动作,其动作是命令驱动,以语言形式表示。

也称过程式语言,如C,FORTRAN等;

2. 函数式语言:注重程序表示的功能

也称应用式语言,如ML和LISP等;

3. 基于规则的语言:检查一定的使能条件,满足时执行动作

也称逻辑程序设计语言,如PROLOG。

4. 面向对象语言:提供抽象数据类型,支持封装性、继承性和多

态性。

如C++和Java等。

(1) 符号和符号串

1、字母表:元素的有穷非空集合。

2、符号串:由字母表中的符号组成的任何有穷序列。

3、符号串的头尾,固有头和固有尾:如果z=xy是一符号串,那么x是z的头,y是z

的尾,如果x是非空的,那么y是固有尾;同样如果y非空,那么x是固有头。如:设z=abc,那么z的头是,a, ab, abc, 除abc外,其它都是固有头;z的尾是, c, bc, abc, z的固有尾是, c, bc。

4、符号串的运算

(1)符号串的连接:设x和y是符号串,x和y的连接xy是把y 的符号写在x的符号后得的符号串。

如:x=ST, y=abu, 则xy=STabu显然有x=x=x。

(2)符号串的方幂:设x是符号串,把x自身连接n次得x的几次方幂xn。

如:设x=ab则x0=x1=abx2=ababx3=ababab

(3)符号串集合的乘积:设A和B为符号串集合,则A和B的乘积定义为AB={xy|xA且yB}

如:a={a, b}, B={00, 11} 则AB={a00, a11, b00, b11} 显然:{}A=A{}=A

(4)符号串集合的方幂:设A为符号串集,则A的n次方幂An 定义为:An=AA……A=AAn-1=An-1A

(5)符号串集合的正闭包A+:A+=A1 U A2 U … U An U …

(6)符号串集合的闭包A*:A*=A0 U A+ = {} U A+

如:设有正字母表={0,1} 则*=0 U 1 U 2 U … U n U …={, 0, 1, 00,01, 10, 11, 000, 001,……}

(2) 文法

文法G定义为四元组(VN ,VT,P,S)其中:

(1)VN 为非终结符号集

非终结符号表示一个语言短语(或语法成分、语法单位)。如程序、语句、表达式等。一般用大写字母或用〈〉括起表示非终结符号。

(2)VT 为终结符号集

终结符号:组成语言的基本符号。是文法中不属于非终结符号集合的符号。一般用小写字母或不带〈〉的符号表示。如程序设计语言的单词符号。

设V=VN U VT,称V为文法G的字母表。

(3)P 为产生式(也称规则)的集合。

产生式的形式:→或∷=,其中∈V+,∈V*

(4)S 称作识别符号或开始符号,是一个非终结符号。

一般表示此文法定义的最大语法短语,至少要在一条产生式中作为左部出现。句型、句子的定义

设G[S]是一文法,如果符号串x是从识别符号推导出来的,即有S*x,则称x是文法G[S]的句型。

若x仅由终结符号组成,即S*x, xV T ,则称x为G[S]的句子。

句型:在一棵树生长过程的任何时刻,所有那些端末结点自左至右的排列,就是一个句型。

语言的定义:文法G产生的语言记为L(G),它是文法G产生的全部句子的集合。文法等价定义:若L(G1)=L(G2)则称文法G1和G2是等价的。

(3) 文法的类型 N.Chomsky

0型文法:定义0型语言,对应Turing机;

1型文法:定义1型语言,对应线性限界自动机;箭头后面的要比前面的长或相等2型文法:定义2型语言,对应非确定下推自动机;箭头前面的是非终结符,后面是串3型文法:定义3型语言,对应有限自动机。非终结符可以推出一个终结符或一个终结符和一个非终结符

最右推导也称为规范推导,所得句型称为规范句型。

如果一个文法存在某个句型对应两棵不同的语法树,则说这个文法是二义的。或者说,若一个文法中存在某个句型,它有两个不同的

最左(最右)推导,则这个文法是二义的。

上下文无关文法是否具有二义性是不可判定的。

但有些特殊的2型文法[例如LL(1)、LR(0)、LR(1)等文法]是无二义性的。一个文法兼有左递归和右递归是导致二义性的常见原因。

排除文法二义性通常有两种方法:

(1)在语义上加些限制

(2)重新构造一个无二义性的文法

(4) 句型的分析

句型的分析:就是识别一个符号串是否为某文法的句型。是某个推导的构造过程。分析方法分两大类:自上而下分析法和自下而上分析法推导与归约,最右推导是规范推导,逆过程为规范规约若S*A+(由A+得)则称是句型相对于非终结符A的短语。

若S*A(由A→得)则称是句型相对于A→的直接短语(也称简单短语)。一个句型的最左直接短语称为该句型的句柄。

一棵子树(至少要有父子两代)的所有端末结点自左至右排列起来形成相对于子树根的短语。若子树只有父子两代,则得到直接短语。

(5) 有关文法

(1)有害规则文法中含形如U→U的产生式。

它对描述语言没有必要,且会引起文法的二义性。

(2)多余规则文法中任何一个句子的推导都用不到的规则。

(3)无用规则文法中含形如U→V的产生式,即单产生式。

为保证文法G的任一非终结符A在句子推导中出现,必须满足如下两个条件:

(1)A必须在某句型中出现,A。

(2)必须能够从A推导出终结符号串t。

有关文法的化简和改造,包括以下几项工作:

(1)无用符号和无用产生式的删除。

(2)-产生式的消除。

(3)单产生式的消除。

(4)左递归的消除。

(1) 词法分析输出

单词符号(TOKEN) 是一个程序设计语言的基本语法符号。程序设计语言的单词符号一般可分成下列5种:

1.基本字,也称关键字,如PASCAL语言中的begin,end,if,while和var等。

2.标识符,用来表示各种名字,如常量名、变量名和过程名等。

3.常数,各种类型的常数,如25,3.1415,TRUE和"ABC"等。

4.运算符,如+,*,<= 等。

5.界符,如逗点,分号,括号等。

词法分析程序所输出的单词符号常常采用下二元式表示:(单词种别,单词自身的值)可用整数码或助记符等表示。

(2) 单词的描述工具

程序设计语言中的单词(TOKEN)是基本语法符号。单词符号的语法可以用有效的工具加以描述。

正规式和它所表示的正规集的递归定义如下。设字母表为∑,辅助字母表∑ ={ |, ·, *, (, ) }

定义(正规式和它所表示的正规集):

设字母表为Σ,辅助字母表Σ`={Φ,ε,|,·,*,(, }。

② ε和Φ都是Σ上的正规式,它们所表示的正规集分别为{ε}和{ };

② 任何a∈Σ,a是Σ上的一个正规式,它所表示的正规集为{a};

③ 假定e1和e2都是Σ上的正规式,它们所表示的正规集分别为L(e1)和L(e2),那么,(e1), e1|e2, e1·e2, e1*也都是正规式,它们所表示的正规集分别为L(e1), L(e1)∪L(e2), L(e1)L(e2)和(L(e1))*。

④ 仅由有限次使用上述三步骤而定义的表达式才是Σ上的正规式,仅由这些正规式所表示的字集才是Σ上的正规集。

(3) 有穷自动机

有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规文法所定义的语言和正规式所表示的集合,引入有穷自动机这个理论,正是为词法分析程

编译原理概念期末总结复习

翻译程序:把一种语言程序转换成另一种语言程序,且在功能上是相同的这样的程序。 编译程序:把高级语言转换成低级语言,且在功能上是相同的这样的程序。 解释程序:边解释边执行源程序的程序。区别:编译程序有中间代码,而解释程序没有。编译过程的五个阶段: 1、词法分析任务:对构成源程序的字符串进行扫描和分解,识别出一个个单词。 2、语法分析任务:在词法分析的基础上,根据语言规则,把单词符号串分解成各类语法 单位。 3、语义分析和中间代码产生任务:对语法分析所识别出的各类语法范畴,分析其含义, 并进行初步翻译。 4、优化任务:对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效 的目标代码。 5、目标代码生成任务:把中间代码变换成特定机器上的低级语言代码。 编译程序的七个部分词法分析器,语法分析器、语义分析与中间代码产生器、优化器、目标代码生成器、表格管理和出错处理。 编译程序生成的五个办法:机器语言、高级语言、移植、自编译方式和使用工具自动生成。词法规则:指单词符号的形成规则。(也就是正规式) 语法规则:规定了如何从单词符号形成更大的结构。就是语法单位的形成规则。 空字:不包含任何符号的序列。 闭包: 中所有的符号组成的集合。 上下文无关文法是指:所定义的语法范畴是完全独立于这种范畴可能出现的环境的文法。上下文无关文法的四个组成部分:一组终结符号、一组非终结符号、一个开始符号和一组产生式。 终结符号也就是不可再分的基本符号。 非终结符号是用来代表语法范畴,表示一定符号串的集合。 开始符号是语言中我们最感兴趣的语法范畴。 产生式是定义语法范畴的书写规则。 句子:文法中从开始符号推导的终结符号串。 句型:从开始符号推导的符号串。 语言:文法中所有句子的集合。 程序语言的单词符号分为五种:关键字、标识符、常数、运算符和界符。 二元式表示:(种类,属性) 正规式的运算符有三种:或,连接和闭包。优先顺序是:闭包,连接,或。 DFA怎么识别字:若存在一条从初态结点到某一终态结点的通路,且这条通路上所有弧的标记符连接成的字是a,则称a可为DFA所识别。 DFA怎么识别空字:若DFA的初态结点同时又是终态结点,则空字可为DFA所识别。NFA怎么识别字:若存在一条从某一初态结点到终态结点的通路,且这条通路上所有弧的标记字依序连接成的字等于a,则称a可为NFA识别。 NFA怎么识别空字:若M的某些结点即是初态又是终态结点,或者存在一条从某个初态结点到某个终态结点的空通路,那么,空字可为M所识别。 语言的语法结构是用上下文无关文法描述的。 语法分析分为两类:自上而下分析法,自下而上分析法。 自上而下分析法面临的问题:1.文法的左递归问题。2.回溯3.成功可能是暂时的,产生虚假匹配。4.难于知道输入串中出错的确切位置。5.效率低,代价高。

《编译原理》第三版期末复习

期末复习总结《编译原理》 第一章:绪论 一、填空问题 ①由于计算机只能认识机器语言,所以需要翻译程序将高级语言翻译成计算机可以识别的机器语言。 ②编译程序的工作过程一般主要划分为词法分析,语法分析,中间代码生成,代码优化,目标代码生成等几个基本阶段,同时还会伴有表格管理和出错处理。③如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两个阶段:编译阶段和运行阶段。如果编译程序生成的目标程序是汇编语言的程序,则源程序的执行分为三个阶段:编译阶段,汇编阶段和运行阶段。 1-02.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序 ,则其翻译程序称为编译程序. 1-03.编译方式与解释方式的根本区别在于是否生成目标代码 . 1-05.对编译程序而言,输入数据是源程序,输出结果是目标程序 . 1-10.一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生 成等五个部分,还应包括(1)c.其中, (2)b 和代码优化部分不是每个编译程序都必需的. 词法分析器用于识别 (3)c ,语法分析器则可以发现源程序中的 (4)d . (1) a.模拟执行器 b.解释器 c.表格处理和出错处理 d.符号执行器 (2) a.语法分析 b.中间代码生成 c.词法分析 d.目标代码生成 (3) a.字符串 b.语句 c.单词 d.标识符 (4) a.语义错误 b.语法和语义错误 c.错误并校正 d.语法错误 1-11.程序语言的语言处理程序是一种 (1)a . (2)b 是两类程序语言处理程序,他们的主要区别在于 (3)d . (1) a.系统软件 b.应用软件 c.实时系统 d.分布式系统 (2) a.高级语言程序和低级语言程序 b.解释程序和编译程序 c.编译程序和操作系统 d.系统程序和应用程序 (3) a.单用户与多用户的差别 b.对用户程序的查错能力 c.机器执行效率 d.是否生成目标代码 1-12.汇编程序是将 a 翻译成 b ,编译程序是将 c 翻译成 d . a.汇编语言程序 b.机器语言程序 c.高级语言程序 d. a 或者 b e. a 或者 c f. b 或者 c 1-13.下面关于解释程序的描述正确的是 b .

编译原理期末复习题(包含上一份N多答案)

编译原理复习题 一、填空题: 1、编译方式与解释方式的根本区别在于(是否生成目标代码)。 2、对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。 3、如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:(编译阶段)和(运行阶段)。 4、如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分成三个阶段:(编译阶段)、(汇编阶段)和(运行阶段)。 5、自顶向下语法分析方法会遇到的主要问题有(回溯)和((左递归带来的)无限循环)。 6、LL(k)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“k”的含义是(向输入串中查看K个输入符号)。 7、LL(1)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“1”的含义是(向输入串中查看1个输入符号)。8、自顶向下语法分析方法的基本思想是:从(识别符号)出发,不断建立(直接推导),试图构造一个推导序列,最终由它推导出与输入符号相同的(符号串)。 9、自底向上语法分析方法的基本思想是:从待输入的符号串开始,利用文法的规则步步向上进行(直接归约),试图(归约)到文法的(识别符号|开始符号)。

10、LR(0)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“0”的含义是(向貌似句柄的符号串后查看0个输入符号)。 11、LR(1)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。 12、SLR(1)分析法的名字中,“S”的含义是(简单的),“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。 13、在编译过程中,常见的中间语言形式有(逆波兰表示)、(三元式)、(四元式)和(树形表示)。 14、在编译程序中安排中间代码生成的目的是(便于代码优化)和(便于目标程序的移植)。 15、表达式-a+b*(-c+d)的逆波兰表示为(a-bc-d+*+ )。 16、表达式a+b*(c+d/e)的逆波兰表示为(abcde/+*+ )。 17、表达式a:=a+b*c↑(d/e)/f的逆波兰表示为(aabcde/↑*f/+:= )。 18、文法符号的属性有(继承属性)和(综合属性)两种。 19、一个文法符号的继承属性是通过语法树中它的(兄弟结点与父)结点的相应文法符号的属性来计算的。 20、一个文法符号的综合属性是通过语法树中它的(子)结点的属性来计算的。 21、语法制导的编译程序能同时进行(语法)分析和(语义)分析。 22、编译过程中扫描器所完成的任务是从(源程序)中识别出一个个具有(独

编译原理期末总复习题(含答案)

第八节习题一、单项选择题 1、将编译程序分成若干个“遍”是为了 b 。 a.提高程序的执行效率 b.使程序的结构更加清晰 c.利用有限的机器存并提高机器的执行效率 d.利用有限的机器存但降低了机器的执行效率 2、构造编译程序应掌握 d 。 a.源程序b.目标语言 c.编译方法d.以上三项都是 3、变量应当 c 。 a.持有左值b.持有右值 c.既持有左值又持有右值d.既不持有左值也不持有右值 4、编译程序绝大多数时间花在 b 上。 a.出错处理b.词法分析 c.目标代码生成d.管理表格 5、 d 不可能是目标代码。 a.汇编指令代码b.可重定位指令代码 c.绝对指令代码d.中间代码 6、使用 a 可以定义一个程序的意义。 a.语义规则b.词法规则 c.产生规则d.词法规则 7、词法分析器的输入是 a 。 a.单词符号串b.源程序 c.语法单位d.目标程序 8、中间代码生成时所遵循的是- d 。 a.语法规则b.词法规则 c.语义规则d.等价变换规则 9、编译程序是对 d 。 a.汇编程序的翻译b.高级语言程序的解释执行 c.机器语言的执行d.高级语言的翻译 10、语法分析应遵循 b 。 a.语义规则b.语法规则 c.构词规则d.等价变换规则 解答 1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。 2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。 3、对编译而言,变量既持有左值又持有右值,故选c。 4、编译程序打交道最多的就是各种表格,因此选d。 5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d。 6、词法分析遵循的是构词规则,语法分析遵循的是语法规则,中间代码生成遵循的是语义规则,并且语义规则可以定义一个程序的意义。因此选a。 7、b 8、c 9、d 10、c 二、多项选择题

编译原理期末要点总结

第一章引论 什么叫编译程序 翻译程序:把某一种语言程序转换成另一种语言程序 编译程序:把高级语言程序转换成低级语言程序的翻译程序汇编程序:把汇编语言程序翻译成机器语言程序 编译执行与解释执行 编译执行:源程序编译成目标程序后执行。 解释执行:不产生目标代码边解释边执行。 编译程序阶段 1. 词法分析 2. 语法分析 3. 语义分析与中间代码生成 4. 优化 5. 目标代码生成

遍:对源程序或源程序的中间结果从头到尾扫描一次。 编译前端:由与源语言有关但与目标机无关。词法分析、语法分析、语义分析与中间代码生成。 编译后端:与目标机有关。优化、目标代码生成。 编译工具生成 越来越多的人已使用高级语言作工具来编译程序。 第二章高级语言及其语法描述 程序语言的定义 程序语言由语法和语义两方面定义。

语法 语法是一组规则,分为词法规则(规定了字母表中哪样的字符串是一个单词符号)和语法规则(规定了如何从单词符号形成更大的结构)。 语义 定义一个程序的意义的一组规则。 程序语言的语法描述 ∑(Sigma):有穷字母表。 符号:∑中的每个元素。 符号串:符号所构成的一个有穷序列。 ε(Epsilon):空字,不包含任何符号的序列。 ∑*(∑的闭包):∑上的所有符号串的全体,包括ε。 连接积:UV={αβ|α∈ U&β∈ V } U、V? ∑* ●UV不一定等于 VU ●V n=VV…V(n个V的连接积) ●V0 = {ε} ●V*=V0 ∪ V1 ∪ V2 ∪ V3 ∪ … ●V+(正则闭包)=VV* 形式语言 文法G是一个四元组(VT,VN,S,P) ●VT:终结符号集(一般大写字母) ●VN:非终结符号集(一般小写字母与各种符号) ●S:开始符号 ●P:产生式集合(A→α) 0型文法(短语文法)、1型文法(上下文有关文法)、2型文法(上下文无关文法)、3型文法(正规文法)

编译原理-期末复习

编译原理 一、单选题 1、将编译程序分为若干个“遍”是为了()。B A.提高程序的执行效率 B.使程序的结构更加清晰 C.利用有限的机器内存并提高机器的执行效率 D.利用有限的机器内存但降低了机器的执行效率 2、构造编译程序应掌握()。D A.源程序 B.目标语言 C.编译方法 D.以上三项都是 3、变量应当()。C A.持有左值 B.持有右值 C.既持有左值又持有右值 D.既不持有左值也不持有右值 4、编译程序绝大多数时间花在()上。D A.出错处理 B.词法分析 C.目标代码生成 D.管理表格 5、()不可能是目标代码。D A.汇编指令代码 B.可重定位指令代码 C.绝对指令代码 D.中间代码 6、编译程序是对()。D A.汇编程序的翻译 B.高级语言程序的解释执行 C.机器语言的执行 D.高级语言的翻译

7、正规式M1和M2等价是指()。C A.M1和M2的状态数相等 B.M1和M2的有象弧条数相等 C.M1和M2所识别的语言集相等 D.M1和M2状态数和有象弧条数相等 8、如果文法G是无二义的,则它的任何句子()。A A.最左推导和最右推导对应的语法树必定相同。 B.最左推导和最右推导对应的语法树可能相同。 C.最左推导和最右推导必定相同。 D.可能存在两个不同的最左推导,但它们对应的语法树相同。 9、文法G:S→S+T|T T→T*P|P P→(S)|i 句型P+T+i的短语有()B A.i,P+T B. P,P+T,i,P+T +i B.P+T + i D. P,P+T,i 10、产生正规语言的文法为()。D A.0型 B.1型 C.2型 D.3型 11、文法G:S→b|?|(T) T→T?S|S 则FIRSTVT(T)=() C A.{b,?,(} B.{b,?,)} C.{b,?,(,?} D.{b,?,),?} 12、给定文法:A→bA | cc,下面的符号串中,为该文法句子的是()。 A ①cc ②bcbc ③bcbcc ④bccbcc ⑤bbbcc

编译原理期末复习

编译原理期末复习 鉴于编译原理马上就要期末考试,我将手中集中的一些资料上的题目进行了整理归类,每种类型题目给出了所涉及到的基本知识,然后对每类题目中的第一道例题进行了做法进行了讲解,剩下的例题请给大家作为练习,答案也都给出,希望对大家复习有所帮助,最后由于时间很紧,整理的有些仓促,整理中难免有遗漏或错误,请大家见谅。 注:下面出现的字母中,若无特别说明,小写英文字母为终结符,大写英文字母为非终结符,希腊字母为终结符与非终结符的任意组合。 1、简答题(或者名词解释) 下面涉及到的概念中,加下划线的都是在以往一些试卷中出现的原题,务必掌握。 注:这类题目老师说答案不会超过一百个字,否则写的再多也不给分,有些点到即可,不要重复啰嗦。(1)简述编译程序的概念及其构成 答:1)编译程序:它特指把某种高级程序设计语言翻译成等价的低级程序设计语言的翻译程序。 2)构成: (2)简述词法分析阶段的主要任务(也有可能问语法分析阶段主要任务) 答:词法分析的任务是输入源程序,对源程序进行扫描,识别其中的单词符号,把字符串形式的源程序转换成单词符号形式的源程序。 语法分析的主要任务是对输入的单词符号进行语法分析(根据语法规则进行推导或者归约),识别各类语法单位,判断输入是不是语法上正确的程序 (3) 简述编译程序的构造过程(这个大家看看,是对(1)和(2)的综合) 答:1)构造词法分析器:用于输入源程序进行词法分析,输出单词符号; 2)构造语法分析器:对输入的单词符号进行语法分析,识别各类语法单位,判断输入是不是语法上正确的程序 3)构造语义分析和中间代码产生器:按照语义规则对已归约出的语法单位进行语义分析并把它们翻译成中间代码。 4)构造优化器:对中间代码进行优化。 5) 构造目标代码生成器:把中间的代码翻译成目标程序。 6) 构造表格管理程序:登记源程序的各类信息和编译各阶段的进展情况。 7)构造错误处理程序:对出错进行处理。 (4) 说明编译和解释的区别: 1)编译要程序产生目标程序,解释程序是边解释边执行,不产生目标程序; 2)编译程序运行效率高而解释程序便于人机对话。 (5)文法:描述语言语法结构的形式规则,一般用一个四元式表示: G=(V T,V N,S,P),其中V T:终结符集合(非空) V N:非终结符集合(非空),且V T ?V N=? S:文法的开始符号,S∈V N P:产生式集合(有限)。(6)二义性文法:一个文法中存某个句子,它有两个不同的最左(或者最右推导),则称该文法是二义性的。例子如文法G:S→if expr then S |other S→if expr then S else S 句子if e1 then if e2 then s1 else s2是二义性的。(7)文法的形式(注:文法的形式一定要牢记,特别是2型和3型文法一定要牢记,不仅在概念题中有用,在

计算机编译原理_知识点复习考点归纳总结

三一 文库 (https://www.360docs.net/doc/2a19376520.html, )*电大考试* 编译原理名词解释 1.局部优化:局限于基本块范围的优化称。 2.二义性文法:如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义性文法。 3.DISPLAY 表:过程的嵌套层次显示表,记录该过程的各外层过程的最新活动记录的起始地址。由于过程嵌套允许内层过程引用外层过程定义的数据,因此,当一个过程运行时必须跟踪它的所有外层过程的最新活动记录起始地址, display 表就是用于登记每个外层过程的最新活动记录起始地址。 5.最左推导:任何一步α=>β都是对α中的最右非终结符替换。 6.语法:一组规则,用它可形成和产生一组合式的程序。 7.文法:描述语言的语法结构的形式规则。 8.基本块:指程序中一顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第一个语句,出口就是其中的最后一个语句。 9.语法制导翻译:在语法分析过程中,根据每个产生式所对应的语义子程序进行翻译的办法叫做语法制导翻译。 10.短语:令G 是一个文法,S 划文法的开始符号,假定αβδ是文法G 的一个句型,如果有S αAδ且A β,则称β是句型αβδ相对非终结符A 的短语。 11.待用信息:如果在一个基本块中,四元式i 对A 定值,四元式j 要引用A 值,而从i 到j 之间没有A 的其它定值,则称j 是四元式i 的变量A 的待用信息。 12.规范句型:由规范推导所得到的句型。 13.扫描器:执行词法分析的程序。 14.超前搜索:在词法分析过程中,有时为了确定词性,需超前扫描若干个字符。 15.句柄:一个句型的最左直接短语。 16.语法制导翻译:在语法分析过程中,根据每个产生式所对应的语义程序进行翻译的方法 叫做语法制导翻译。 17.规范句型:由规范推导所得到的句型。 18.素短语:素短语是指这样一个短语,至少含有一个终结符,并且,除它自身外不再含任何更小的素短语。 19.语法:是组规则,用它可形成和产生一个合式的程序。 20.语义:定义程序的意义的一组规则。 21.优化:对程序进行各种等价变换,使得从变换后的程序出发,能产生更有效的目标代码。 三种级别:局部优化、循环优化、全局优化 21.词法分析 词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位,并转换成统一的内部表示(token),送给语法分析程序。 22.LL(1)文法 若文法的任何两个产生式A → α | β都满足下面两个条件:(1)FIRST(α ) ⋂ FIRST(β ) = φ;(2)若β ⇒* ε ,那么FIRST(α ) ⋂ FOLLOW( A ) = φ。我们把满足 这两个条件的文法叫做LL(1)文法,其中 的第一个L 代表从左向右扫描输入,第二个L 表示产生最左推导,1代表在决定分析器的每步动作时向前看一个输入符号。除了没有公共左因子外,LL(1)文法还有一些明显的性质,它不是二义的,也不含左递归。 23.语法树 句子的树结构表示法称为语法树(语法分析树或语法推导树)。给定文法G=(V N ,V T ,P ,S),对于G 的任何句型都能构造与之关联的语法树。这棵树具有下列特征:(1)根节点的标记是开始符号S 。(2)每个节点的标记都是V 中的一个符号。(3)若一棵子树的根节点为A ,且其所有直接子孙的标记从左向右的排列次序为A 1A 2…A R ,那么A →A 1A 2…A R 一定是P 中的一条产生式。(4)若一标记为A 的节点至少有一个除它以外的子孙,则A ∈ V N 。(5)若树的所有叶节点上的标记从左到右排列为字符串w ,则w 是文法G 的句型;若w 中仅含终结符号,则w 为文法G 所产生的句子。 24.LR(0)分析器 所谓LR(0)分析,是指从左至右扫描和自底向上的语法分析,且在分析的每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再向前查看0个输入符号,就能确定相对于某一产生式左部符号的句柄是否已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作 (是移进还是按某一产生式进行归约等)。 25.语言和文法 文法就是语言结构的定义和描述,是有穷非空的产生式集合。文法G 定义为四元组的形式:G=(V N ,V T ,P ,S)其中:V N 是非空有穷集合,称为非终结符号集合;V T 是非空有穷集合,称为终结符号集合;P 是产生式的集合(非空);S 是开始符号(或识别符号)。这里,V N ∩V T =∅,S ∈ V N 。V=V N ∪V T ,称为文法G 的字母表,它是出现文法产生式中的一切符号的集合。文法G 所描述的语言用L(G)表示,它由文法G 所产生的全部句子组成,即L(G)={x| S ⇒*x ,其中S 为文法开始符 号,且+ ∈T V x }简单的说,文法描述的语言是该文法一切句子的集合。 26.词法分析 词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位,并转换成统一的内部表示(token),送给语法分析程序。 27.LL(1)文法 若文法的任何两个产生式A → α | β都满足下面两个条件:(1)FIRST(α ) ⋂ FIRST(β ) = φ;(2)若β ⇒* ε ,那么FIRST(α ) ⋂ FOLLOW( A ) = φ。我们把满足这两个条件的文法叫做LL(1)文法,其中的第一个L 代表从左向右扫描输入,第二个L 表示产生最左推导,1代表在决定分析器的每步动作时向前看一个输入符号。除了没有公共左因子外,LL(1)文法还有一些明显的性质,它不是二义的,也不含左递归。 28.语法树 句子的树结构表示法称为语法树(语法分析树或语法推导树)。给定文法G=(V N ,V T ,P ,S),对于G 的任何句型都能构造与之关联的语法树。这棵树具有下列特征:(1)根节点的标记是开始符号S 。(2)每个节点的标记都是V 中的一个符号。(3)若一棵子树的根节点为A ,且其所有直接子孙的标记从左向右的排列次序为A 1A 2…A R ,那么A →A 1A 2…A R 一定是P 中的一条产生式。(4)若一标记为A 的节点至少有一个除它以外的子孙,则A ∈ V N 。(5)若树的所有叶节点上的标记从左到右排列为字符串w ,则w 是文法G 的句型;若w 中仅含终结符号,则w 为文法G 所产生的句子。 29.LR(0)分析器 所谓LR(0)分析,是指从左至右扫描和自底向上的语法分析,且在分析的每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再向前查看0个输入符号,就能确定相对于某一产生式左部符号的句柄是否已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作 (是移进还是按某一产生式进行归约等)。 30.语言和文法 文法就是语言结构的定义和描述,是有穷非空的产生式集合。文法G 定义为四元组的形式:G=(V N ,V T ,P ,S)其中:V N 是非空有穷集合,称为非终结符号集合;V T 是非空有穷集合,称为终结符号集合;P 是产生式的集合(非空);S 是开始符号(或识别符号)。这里,V N ∩V T =∅,S ∈ V N 。V=V N ∪V T ,称为文法G 的字母表,它是出现文法产生式中的一切符号的集合。文法G 所描述的语言用L(G)表示,它由文法G 所产生的全部句子组成,即L(G)={x| S ⇒*x ,其中S 为文法开始符 号,且+ ∈T V x }简单的说,文法描述的语言是该文法一切句子的集合。 31.编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成 32.解释程序:把某种语言的源程序转换成等价的另一种语言程序——目标语言程序,然后再执行目标程序。解释方式是接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执行结果,然后再接受下一句。 33.编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序(机器语言程序或汇编语言程序)。 34.解释程序和编译程序的根本区别:是否生成目标代码 35.句子的二义性(这里的二义性是指语法结构上的。):文法G[S]的一个句子如果能找到两种不同的最左推导(或最右推导),或者存在两棵不同的语法树,则称这个句子是二义性的。 36文法的二义性:一个文法如果包含二义性的句子,则这个文法是二义文法,否则是无二义文法。 37.LL(1)的含义:(LL(1)文法是无二义的; LL(1)文法不含左递归)第1个L :从左到右扫描输入串。第2个L :生成的是最左推导。1 :向右看1个输入符号便可决定选择哪个产生式 38.某些非LL(1)文法到LL(1)文法的等价变换: 1. 提取公因子 2. 消除左递归 39.文法符号的属性:单词的含义,即与文法符号相关的一些信息。如,类型、值、存储地址等。 40.一个属性文法(attribute grammar)是一个三元组A=(G, V, F) G :上下文无关文法。V :属性的有穷集。每个属性与文法的一个终结符或非终结符相连。属性与变量一样,可以进行计算和传递。F :关于属性的断言或谓词(一组属性的计算规则)的有穷集。断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相联的属性。 41.综合属性:若产生式左部的单非终结符A 的属性值由右部各非终结符的属性值决定,则A 的属性称为综合属。 42.继承属性:若产生式右部符号B 的属性值是根据左部非终结符的属性值或者右部其它符号的属性值决定的,则B 的属性为继承属性。(1)非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性。(2) 终结符只有综合属性,没有继承属性,它们由词法程序提供。在计算时: 综合属性沿属性语法树向上传递(即传递信息的方向是自下而上);继承属性沿属性语法树向下传递(即传递信息的方向是自上而下)。 43.语法制导翻译:是指在语法分析过程 中,完成附加在所使用的产生式上的语义规则描述的动作。 44.语法制导翻译实现:对单词符号串进行语法分析,构造语法分析树,然后根据需要构造属性依赖图,遍历语法树并在语法树的各结点处按语义规则进行计算。 45.中间代码(中间语言):1、是复杂性介于源程序语言和机器语言的一种表示形式。2、一般,快速编译程序直接生成目标代码。3、为了使编译程序结构在逻辑上更为简单明确,常采用中间代码,这样可以将与机器相关的某些实现细节置于代码生成阶段仔细处理,并且可以在中间代码一级进行优化工作,使得代码优化比较容易实现。 46.何谓中间代码:源程序的一种内部表示,不依赖目标机的结构,易于代码的机械生成。 47.为何要转换成中间代码:(1)逻辑结构清楚;利于不同目标机上实现同一种语言。(2)便于移植,便于修改,便于进行与机器无关的优化。 48.中间代码的几种形式:逆波兰式(后缀式) ,三地址码(三元式、四元式、间接三元式 ) 49.符号表的一般形式:一张符号表的的组成包括两项,即名字栏和信息栏。 信息栏包含许多子栏和标志位,用来记录相应名字和种种不同属性,名字栏也称主栏。主栏的内容称为关键字(key word )。 50.符号表的功能:(1)收集符号属性 (2) 上下文语义的合法性检查的依据: 检查标识符属性在上下文中的一致性和合法性。(3)作为目标代码生成阶段地址分配的依据 51.符号的主要属性及作用:1. 符号名 2. 符号的类型 (整型、实型、字符串型等))3. 符号的存储类别(公共、私有)4. 符号的作用域及可视性 (全局、局部) 5. 符号变量的存储分配信息 (静态存储区、动态存储区) 52.存储分配方案策略:静态存储分配;动态存储分配:栈式、 堆式。 53.静态存储分配:1、基本策略:在编译时就安排好目标程序运行时的全部数据空间,并能确定每个数据项的单元地址。2、适用的分配对象:子程序的目标代码段;全局数据目标(全局变量)3、静态存储分配的要求:不允许递归调用,不含有可变数组。FORTRAN 程序是段结构,不允许递归,数据名大小、性质固定。 是典型的静态分配 54.动态存储分配 :1、如果一个程序设计语言允许递归过程、可变数组或允许用户自由申请和释放空间,那么,就需要采用动态存储管理技术。2、两种动态存储分配方式:栈式,堆式栈式动态存储分配策略:将整个程序的数据空间设计为一个栈。【例】在具有递归结构的语言程序中,每当调用一个过程时,它所需的数据空间就分配在栈顶,每当过程工作结束时就释放这部分空间。 55.过程所需的数据空间包括两部分:一部分是生存期在本过程这次活动中的数据对象。如局部变量、参数单元、临时变量等;另一部分则是用以管理过程活动的记录信息(连接数据)。 56.活动记录(AR ):一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区 (块)叫做一个活动记录。构成:1、临时工作单元;2、局部变量;3、机器状态信息;4、存取链;5、控制链;6、实参;7、返回地址 57.什么是代码优化 所谓优化,就是对代码进行等价变换,使得变换后的代码运行结果与变换前代码运行结果相同,而运行速度加快或占用存储空间减少。 58.优化原则:等价原则:经过优化后不应改变程序运行的结果。

(完整版)合肥工业大学编译原理期末复习

编译原理基础题 一、选择题 1、在使用高级语言编程时,首先可通过编译程序发现源程序的全部( A)错误和部分语义错误。 A、语法 B、语义 C、语用 D、运行 2、编译过程中,语法分析器的任务是( B)。 (1)分析单词是怎样构成的; (2)分析单词串是如何构成语句和说明的; (3)分析语句和说明是如何构成程序的;(4)分析程序的结构 A、(2)(3) B、(2)(3)(4) C、(1)(2)(3) D、(1)(2)(3)(4) 3.生成能被5整除的正整数的文法G[Z]是_ C____。 A. G[Z]: Z→AC,A→BA|B,B→0|1|2|…|9,C→0|5 B. G[Z]: Z→AC,A→BA|ε,B→0|1|2|…|9,C→0|5 C. G[Z]:Z→DA0|A5,A→BA|ε,B→0|D,D→1|2|…|9 D. G[Z]:Z→AC|C,A→BA|B,B→0|1|2|…|9,C→0|5 4、编译程序中的语法分析器接受以( C)为单位的输入,并产生有关信息供以后各阶段使用。 A、表达式 B、产生式 C、单词 D、语句 5、算符优先分析法每次都是对( D)进行归约。 A、直接短语 B、句柄 C、素短语 D、最左素短语 6、过程调用时,参数的传递方法通常有( C )。 (1)传值;(2)传地址;(3)传结果;(4)传名 A、(1)(2) B、(1)(2)(3) C、(1)(2)(4) D、(1)(2)(3)(4) 7、在编译方法中,动态存储分配的含义是( A )。 A、在运行阶段对源程序中的量进行分配 B、在编译阶段对源程序中的量进行分配 C、在编译阶段对源程序中的量进行分配,在运行时这些量的地址可以根据需要改变 D、以上都不对 8、a:= a+b*c↑(d/e)/f的逆波兰记号表示是()。 A、aabc*+↑de/f/:= B、aabcde↑/*f/:= C、aabcde/↑*f/+:= D、以上都不对。 9.算符文法是指 A 的文法。 ①没有形如U→...VW...的规则(U,V,W VN) ②VT中任意两个符号之间至多存在一种算符优先关系

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

1.Chomsky把文法分为几种类型?什么是文法的二义性? 1)分成四种类型,即0型、1型、2型和3型。(1)0型文法:设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈(VN∪VT)*且至少含有一个非终结符,而β∈(VN∪VT)*,则G是一个0型文法。(2)1型文法:若P中的每一个产生式α→β均满足|β|>=|α|,仅仅S->ε除外,则文法G是1型。(3)若P中的每一个产生式α→β满足:α是非终结符,β∈(VN∪VT)*,则此文法称为2型的。(4)若P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结符,a∈VT*,则G是3型文法。 2)如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的。如果文法含有二义性的句子,则称该文法是二义性的 2. 简述DFA与NFA的区别:DFA每次输入只对应一个结果,而NFA的依次输入可能对应多个结果,形成一个结果集。 3.什么是算符文法?并举例说明 设有文法G,如果G中没有形如A->…BC…的产生式,其中B,C为非终结符,则称G为算符文法。 例如:对于表达式的二义性文法E->E|E-E|E*E|E/E|E↑E|(E)|i 其中任何一个产生式中都不包含两个非终结符相邻的情况,因此该文法为算符文法。 4.什么是3型文法?什么是文法的语言? (1)若P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结符,a ∈VT*,则G是3型文法。 (2)文法的语言:文法是用于描述语言的语法结构的形式规则。文法描述的语言是该文法一切句子的集合。一个文法所描述的语言是唯一的。 5. 什么是文法的二义性?给出一个二义性文法实例 (1)如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的。如果文法含有二义性的句子,则称该文法是二义性的 书上:若一个文法中存在某个句子,有两个不同的最左(最右)推导,则该文法是二义的。(2)文法G=({E},{+, * , i , (,) }, P, E),其中P为:E->i ; E->E+E ; E->E*E ; E->(E) ; 这里的非终结符E表示一类算术表达式,i表示程序设计语言中的变量。该文法定义了由变量,+,*,(和)组成的算术表达式的语法结构。 6.常见的代码优化技术有哪些?依据优化所涉及的范围分为那些级别? 删除多余运算、代码外提、强度削弱、变换控制条件、合并已知量和复写传播、删除无用赋值。局部优化、循环优化、全局优化

编译原理 第1、2、3、4章复习(期末)

编译原理第1、2章复习 一、选择题 1、词法分析所依据的是 B 。 A. 语义规则 B. 构词规则 C. 语法规则 D. 等价变换规则 2、词法分析器的输出结果是C 。 A. 单词的种别编码 B. 单词在符号表中的位置 C. 单词的种别编码和自身值 D. 单词自身值 3、正规式M1和M2等价是指 C 。 A. M1和M2的状态数相等 B. M1和M2的有向弧条数相等 C. M1和M2所识别的语言集相等 D. M1和M2状态数和有向弧条数相等 4、C语言中表达式a+++++=1词法分析后,能识别的单词个数是 A 个。 A. 5 B. 6 C. 7 D. 8 5、将识别各类单词的有限自动机合并后得到的有限自动机是 A 。 A. 可能是NFA也可能是DFA B. 一定是DFA C. 一定是NFA D. 是最小的DFA 6、中间代码生成时所遵循的是 D 。 A.语法规则B.词法规则 C.语义规则D.等价变换规则 7、语法分析应遵循 B 。 A.语义规则B.语法规则 C.构词规则D.等价变换规则 8、编译程序各阶段的工作都涉及到 BC 。 A.语法分析B.表格管理C.出错处理 D.语义分析E.词法分析

9、编译过程中扫描器的任务包括 ABCDE (多选): A. 按词法规则分割单词,识别出其属性,并转换成token 串输出; B. 删除注释、空格 C. 行计数、列计数 D. 发现并定位词法错误 E. 建立符号表 10、令∑={a,b},则∑上所有以b 开头,后跟若干个ab 的字的全体对应的正规式为_ABCD______(多选)。 A. b(ab)* B. b(ab)+ C. (ba)*b D. (ba)+b E. b(a|b) 11、将编译程序分成若干个“遍”是为了 B 。 A .提高程序的执行效率 B .使程序的结构更加清晰 C .利用有限的机器内存并提高机器的执行效率 D .利用有限的机器内存但降低了机器的执行效率 12、 D 不可能是目标代码。 A .汇编指令代码 B .可重定位指令代码 C .绝对指令代码 D .中间代码 13、使用 A 可以定义一个程序的意义。 A .语义规则 B .词法规则 C .产生规则 D .词法规则 14、词法分析器的输入是 B 。 A .单词符号串 B .源程序 C .语法单位 D .目标程序 15、状态转换图(见图)接受的字集为 D 。 0 1 Y X

编译原理期末总结复习

编译原理期末总结复习 (经典版) 编制人:__________________ 审核人:__________________ 审批人:__________________ 编制单位:__________________ 编制时间:____年____月____日 序言 下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢! 并且,本店铺为大家提供各种类型的经典范文,如公文写作、报告体会、演讲致辞、党团资料、合同协议、条据文书、诗词歌赋、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注! Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of classic sample essays, such as official document writing, report experience, speeches, party and group materials, contracts and agreements, articles and documents, poems and songs, teaching materials, essay collections, other sample essays, etc. Learn about the different formats and writing styles of sample essays, so stay tuned!

《编译原理》重点知识总结

《编译原理》重点知识总结 一、编译器的基本概念 1.编译器的定义:编译器是一种将高级语言程序转换为低级语言程序 的软件工具。 2.编译器的主要任务:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等。 二、词法分析 1. 词法分析的任务:将源程序的字符序列转换为有意义的词法单元(token)序列。 2.词法单元的分类:关键字、标识符、运算符、界限符等。 3.词法分析器的实现方法:有限状态自动机(DFA)、正则表达式、 词法规则等。 三、语法分析 1.语法分析的任务:根据语法规则,将词法单元序列转换为抽象语法 树(AST)。 2.语法分析器的实现方法:上下文无关文法(CFG)、递归下降分析、LL(1)分析器、LR分析器等。 四、语义分析 1.语义分析的任务:对抽象语法树进行静态语义检查,确定语法结构 的含义和约束。

2.语义分析的主要内容:类型检查、作用域分析、常量折叠、中间代 码生成等。 五、中间代码生成 1.中间代码的定义:介于源程序和目标代码之间的一种抽象表示形式,可以是三地址代码、四元式、虚拟机代码等。 2.中间代码生成的方法:递归下降、语法制导翻译、语法制导的翻译 方案等。 六、代码优化 1.代码优化的目的:提高程序的执行效率和资源利用率,减小目标代 码的体积。 2.常见的代码优化技术:常量传播、代码移动、循环优化、函数内联等。 七、目标代码生成 1.目标代码的定义:能够被底层硬件直接执行的机器指令。 2.目标代码生成的方法:模板匹配、基本块划分、寄存器分配等。 八、词法分析器和语法分析器的生成工具 1. Flex:用于生成词法分析器的工具。 2. Bison:用于生成语法分析器的工具。 3. Lex:Flex的前身,用于生成词法分析器。 4. Yacc:Bison的前身,用于生成语法分析器。

大连理工编译原理基础2022年春期末考试复习题及答案

机密★启用前 大连理工大学网络教育学院 2022年春《编译原理基础》 期末考试复习题 ☆注意事项:本复习题满分共:200分。 一、单项选择题 1、以010结尾的二进制串的正规式为()。 A.(1|0)*01 B.0*01* C.(1|0)*010 D.0(1|0)*01 2、与(s|t)* (s|t)等价的正规式是()。 A.s*| t* B.(st)*(s|t) C.(s|t)(s|t)* D.(s|t)* 3、对正规式(a*|b*)*所描述的语言,下列说法准确的是()。 A.连续个a再加连续个b所组成的串的集合 B.a和b个数相等的串的集合 C.a和b组成的所有串(不含空串)的集合 D.a和b组成的所有串(包含空串)的集合 4、对于DFA模型,说法错误的是()。 A.DFA从任何状态出发,对于任何输入符号,可有多个转换 B.任何状态都没有ε转换 C.DFA有唯一的开始状态 D.DFA可以有多个接受状态 5、以下说法错误的是()。 A. NFA的状态集合是无限的 B. NFA的输入符号可能有多个 C. DFA的状态集合是有限的 D. DFA的输入符号可能有多个 6、符号串ab1b2是文法G[A]:A→aB B→bB|b的句子,该句子的句柄是()。

A.b1B.b2 C.a D.b1b2 7、移进-归约分析为输入串构造分析树是从()开始的。A.根结点B.叶结点 C.中间结点D.任一结点 8、下列叙述正确的是()。 A.任何LL(1)文法都是LR(1)文法 B.任何LL(1)文法都是SLR(1)文法 C.任何SLR(1)文法肯定是LR(1)文法 D.任何LR(1)文法肯定是LALR(1)文法 9、下列叙述正确的是()。 A.S属性定义属于L属性定义 B.变量类型声明的语法制导定义不是一个L属性定义 C.L属性定义只包含综合属性 D.L属性定义只包含继承属性 10、中间代码生成时所依据的为()。 A.词法规则B.语法规则 C.语义规则D.等价变换规则11、()不是编译程序的组成部分。 A.词法分析程序 B.代码生成程序 C.设备管理程序 D.语法分析程序 12、编译的各阶段工作都涉及()。 A.符号表管理 B.词法分析 C.语法分析 D.语义分析 13、下面对编译程序分为“遍”描述正确的是()。A.使编译程序结构清晰 B.提高程序的执行效率

相关主题
相关文档
最新文档