编译原理_复习重难点

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章

从本质上来说,程序设计语言是按一定规则排列的符号集合,而编译程序就是把这些符号集合变成机器指令的转换器,编译程序又称为编译器。

程序设计语言【高级语言,低级语言(机器语言和汇编语言)】

编译过程:词法分析,语法分析,中间代码生成,优化,目标代码产生。

三元式定义为如下形式:(op, a1, a2)

其中op为操作码或运算符,a1和a2为操作数或运算分量。

编译: 将高级语言程序翻译成另一种语言的等价程序。

解释:翻译一句执行一句,边翻译边执行,直到程序结束。

与编译的区别:不生成等价的目标代码程序。

优点:解释方式便于程序的调试。(编译方式只需翻译一次,且目标程序的执行速度快)

(1)词法分析

主要任务:从左到右扫描源程序,逐一读入构成源程序的字符流,识别出其中的一个个单词,识别出的单词称单词符号,也简称符号。

单词是高级语言程序中有实际意义的最小语法单位。

(2)语法分析

任务“组词成句”,根据单词分析出组成源程序的各类语法单位,

并指出其中的语法错误。

语法单位——由源程序的单词构成(如表达式、语句、……乃至整个程序。)

语法单位的构成规则——语法规则。

一个语言的词法规则和语法规则定义了一个程序的形式结构。

语法单位的表示——语法树

(3)语义分析和中间代码生成

任务:分析出语法单位具体的动作意义,进行初步翻译,生成与源程序等价的中间代码程序。

语义: 定义一个程序所表示的意义,用语义规则描述。

中间代码:指令应结构简单、含义明确,易于实现源程序——中间代码

——目标代码三者之间的转换。

中间代码常用形式:逆波兰式、三元式、四元式等。

四元式:(运算符,对象1,对象2,结果)

例:z=x+a%3*y

(1)(% a 3 t1 )(2)(* t1 y t2 )

(3) (3)(+ x t2 t3 )(4)(= t3 _ z )(4)代码优化

任务:对中间代码进行等价的加工变换,以便生成更有效更节省时间和空间的目标代码。

例:z=x+a%3*y 的四元式序列:

(1)% a 3 t1 )(2)(* t1 y t2 )

(3)(+ x t2 z )

(5)目标代码生成任务:将中间代码程序变换成目标代码程序。

2.按“遍”组合方式

“遍”:对源程序或等价的中间语言程序从头到尾扫描,完成规定的

任务,并生成新的中间结果或目标程序,称一“遍”。

编译程序的构造与三个方面有关:源语言,目标语言,编译方法。

第二章形式语言与自动机理论基础

主要内容:语言和文法、有限自动机、正则表达式。

语言:符号串的集合。

元素——符号串——该语言的一个句子。

字母表——符号串中符号的来源。

【例2-1】Σ={a,b,c,……,z},x =“laugh”,则|x|=5

Σ={I,you,he,am,is,are,a,student},

y=“I am a student”,空格不计算长度,则|y|=4。

空符号串:无任何符号的串,简称空串,用ε表示,|ε|=0

【例2-4】若U = { a,b },V = { c,d }

则UV = { ac,ad,bc,bd }

闭包:若指定字母表Σ,则Σ*表示Σ上的所有有穷长的串的集合。

Σ* =Σ0∪Σ1∪Σ2∪……∪Σn∪……

Σ* 称为集合Σ的闭包。

Σ+ =Σ1∪Σ2∪……∪Σn∪……

Σ+ 称为集合Σ的正闭包。

成立的等式:Σ* =Σ0∪Σ+ ,Σ+ =ΣΣ* =Σ*Σ

若符号串x 是Σ*的元素,则表示为x∈Σ* ,否则x Σ* 。

【例2-5】Σ={0,1} Σ*={ε,0,1,00,10,11,000,001,100,………}

文法的形式定义:

1:终结符用VT 表示、2:非终结符用VN 表示、3:规则α→β、

4:文法定义:一个文法是一个四元组G(VN ,VT ,S ,P)

VN :非终结符集(非空);VT :终结符集(非VN∩VT=Ø ;

S :识别符号或开始符号,S ∈VN ,且至少在一条规则中作为左部出现; P : 规则(产生式)的集合。用V 表示 VN ∪VT ,称G 的字母表或词汇表。

【例2-7】 有一文法G (VN ,VT ,S , P )

其中: VN = { S } VT = { 0,1 } 开始符号是 S P = { S →0S1, S →01 }

2. 扩展的BNF 表示法

(1)“{ }” 表示符号串t 的多次重复,n 为重复的最小次数,m 为重复的

最大次数,省略n 、m 表示t 可以重复0到任意多次。

【例2-9】文法规则 S →0S1|01

简化为 S →0(S1|1) 或 S →(0S|0)1 或 S →0(S| ε)1

(3)“[ ]”:[t]表示符号串t 可选(即可有可无)。

【例2-11】C 语言条件语句的语法图:

文法相关概念:

定义1:如α→β是文法G (VN ,VT ,S , P )的一条规则, γ、δ∈V * ,

若有符号串 v 、w 满足 v =γαδ, w =γβδ 则称v (应用规则α→β)直接产生w ,或称 w 是 v 的直接推导,反过来称 w 直接归约 到 v ,记作 v ⇒ w 。

【例2-13】 对文法G : S →0S1 S →01 有直接推导序列: S ⇒ 0S1⇒ 00S11⇒000111

定义2:如果存在直接推导序列:v = w0 ⇒ w1⇒ w2 ⇒……⇒ wn = w 则称v 推

导(产生)出w ,推导长度为n ,反过来称w 归约到v ,记作 v ⇒ w 。

如果有 v ⇒ w ,或 v = w ,则记作 v ⇒ w 。

【例2-14】 S ⇒ 0S1 ⇒ 00S11 ⇒ 000111 S 推导出 “ 000111” , 推导长度3 “ 000111” 归约到 S , 表示成 S ⇒ 000111

2.句型和句子

定义: 文法G (VN ,VT ,S ,P ),若符号串x 可由开始符号S 推导出(S ⇒ x ),

则称 x 是 G 的一个句型,若x 仅由终结符组成,则称 x 为G 的一个句子。

3.形式语言

定义:文法描述的语言是该文法的所有句子的集合,记作 L(G)。集合形式表示:

L(G) = { α | S ⇒α ∧ α∈VT* }

【例2-16】文法G : S →0S1 S →01 描述的语言:L(G)= { 0n 1n | n ≥1 }

4.文法的等价性 定义:若有文法G1、G2,它们描述的语言相同,即 L( G1 ) = L( G2 ) 则称两文法 G1 和 G2 等价。

m n t }{

相关文档
最新文档