编译原理讲义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1)把用汇编语言或高级语言写成的程序转换成机器语言的程序,被称为翻译程序。
汇编语言的翻译程序称为汇编程序
把高级语言的翻译程序称为编译程序。
可以采用边翻译边执行的解释执行方式,这种处理程序称为解释程序。解释程序的结果是源程序的执行结果。
2)编译有哪些部分组成?
每个部分的作用?
词法分析:输入源程序,对构成源程序的字符串进行扫描和分析,识别出一个个的单词(符号)如关键字,标识符,常数,算符,界符。
语法分析:在词法分析的基础上,根据语言的语法规则,把单词符号分解成各类语法单位(如短语、句子等),并构造一棵能够正确反映该结构的语法树。
作用:通过语法分析确定整个输入是否构成语法上正确的“程序”。
注意:词法分析是种线性分析,而语法分析是一种层次分析。
中间代码生成:任务:语义分析的基础上按语言的语义规则进行初步的翻译(产生中间代码)中间代码:是一种含义明确、便于处理的记号系统,它通常独立具体的硬件;
表示形式:四元式、三元式、间接三元式等
中间代码优化:任务:对前阶段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效的目标代码。
目标代码生成:任务:把中间代码变换成特定机器上的低级语言代码(目标代码)
目标代码形式:绝对指令代码、可重定位指令代码、汇编指令代码
表格管理:
错误处理:
3)编译前后端的划分?
前端:此法分析、语法分析、中间代码生成、中间代码优化。
后端:目标代码生成及和硬件有关的工作。
4)符号和符号串的概念
1、字母表:它是非空有穷集。
例如:∑={a,b,c}或∑={1,2,3}
2、符号:字母表中的元素称为符号。
3、符号串:符号的有穷序列,符号串也称为字。用ε来表示空符号串。
例如:a,ab,abc,dsfsd
4、长度:符号串的长度是指该串所包含的符号个数。用|x|表示符号串x的长度。
例如:|a|=1,|abn|=3
5、连结:设x和y为符号串,则称xy 为他们的连结。
例如:x=aa,y=bb,则XY=aabb
6、空集:不含任何元素的集合,记为Φ。
7、乘积:设A和B是符号串集,则用AB表示A和B的乘积。
例如:X={a,b},Y={c,d},则XY={ac,ad,bc,bd}
8、方幂:设A为符号串集,则定义
A0={ε}
A1=A
A n=A n-1 A
例如:A={a,b} 则有:
A0={ε} A1={a,b}
A2={aa,ab,ba,bb}
9、正闭包:设A为符号串集,则用A+表示A的正闭包,其具体定义如下:
A+=A1∪A2∪A3∪⋯…
例如:A={a},A+={a,aa,aaa,……}
10、星闭包:设A为一集合,则定义A的星闭包为A*,其具体定义如下A*=A0∪A+例如:A={a},A*={ε,a,aa,aaa,……}
5)巴克斯范式(EBNF),能够写出巴克斯范式
带<>的叫非终止符,不带<>的叫终止符。例如:<逻辑值>→True|False
6)文法定义:文法是一个四元组G(V N,V T,P,Z)。非终极符集记为V N(大写字母)、
终极符集记为V T(小写字母)、产生式集记为P、初始符记为Z。
7)名词:
1、直接推导:设x和y是符号串,若用一次产生式可从x导出y,则称y为x的直接推导,并记为x⇒y。例子:x=Ab,y=ab,A→a,Ab⇒ab
2、推导:若用若干次产生式可从x串导出y
为x
的推导,并记为x y。
例子:x=AB,A→a,B→b AB⇒aB⇒ab 即:。
8) 语法树
定义:设G=(V N,V T,P,S)是给定文法,则称满足下面条件
的树为G的一棵语法树。
•每个结点都标有G的一个文法符号,且根结点标
有初始符S,非叶结点标有非终极符。
•如果一个非叶结点A有n个儿子结点(从左到
右)B1,B2,…,B n,则A→B1B2…,B n一定是G的一个产生
式。
如果每步都是最右非终极字符,则也称该规范推导为
最右推导。
例子:G[S]:S→AB
A→Aa|bB
B→a|Sb
S⇒AB⇒bBB⇒baB(最左推导)
S⇒AB⇒ASb⇒AABb⇒AAab⇒AbBab (最右推导)
S⇒AB⇒ASb⇒bBSb⇒baSb(非左非右)
定义:如果一个文法G 存在某个句子,使得它有两棵语法树,则称G 为二义性文法。 例子:证明 G:E →E+E|E*E|(E)|i 则G 是二义性文法。
因为句子i+i*i 具有两棵语法树分别如图所示。
1、设有文法G[N]:
N →D |ND
D →0|1|2|…|9
(1)试写出021和4321的最右推导和
最左推导。
(2)试举出三个无最右推导的句型。 解:(1)021的最左推导:
N ⇒ND ⇒NDD ⇒DDD ⇒0DD ⇒02D ⇒ 021
021的最右推导: N ⇒ND ⇒N1⇒ND1⇒N21 ⇒D21⇒021 解:4321的最左推导:
N ⇒ND ⇒NDD ⇒NDDD ⇒DDDD ⇒4DDD ⇒43DD ⇒432D ⇒4321 4321的最右推导:
N ⇒ND ⇒N1⇒ND1⇒N21
⇒ND21⇒N321⇒D321⇒4321 (2)无最右推导的句型 N ⇒ND ⇒N1⇒ND1⇒DD1⇒4D1
定理 1、每个句型都有一棵语法树,每个语法树的叶组成一句型。 2、每棵子树的叶组成短语,每棵简单子树的叶组成简单短语,最左简单子树的叶组成句柄。 3、用语法树可证明每个句子都有一规范推导。 3、设有文法G[E]: E →T |E+T |E-T
T →F |T*F |T /F
F →i|(E)
解:(1) i*i /(i+i*i)的语法树
(3)最右推导:E ⇒T ⇒T*F ⇒T*(E)⇒T*(E+T) ⇒T*(E+F)⇒T*(E+i)⇒T*(T+i)⇒ T*F*(T+i)
2、证明下列文法G[S] 是二义性文法: S →if E then S else S | if E then S 解:设有if E 1 then if E 2 then S 1 else S 2 ,则有两棵语法树:
短语:第一个F,F+i,i, 第二个F,i, F*i(F+i),(F*i), T*(F*i),(F+i)-T*(F*i) 简单短语:第一个F,i, 第二个Fi
句柄:第一个F