编译原理笔记

目录

第一章 引言

1.1程序设计语言

1.2程序设计语言翻译

1.3 编译程序总体结构

1.4 编译程序的组织

1.5编译程序的生成 

 第二章 高级语言及其文法

2.1 语言概述

2.2基本定义

2.3 文法的定义 

2.4 文法的分类

2.6 文法的二义性 


第一章 引言

1.1程序设计语言

分类:命令式、申述式、面向对象

1.2程序设计语言翻译

翻译程序:将某一种语言描述的程序(源程序——Source Program)翻译成等价的另一种语言描述的程序(目标程序——Object Program)的程序。翻译程序分为两类:解释程序和编译程序。

   解释程序:•一边解释一边执行的翻译程序

   编译程序:•将源程序完整地转换成机器语言程序或汇编语言程序,然后再处理、执行的翻译程序

编译系统=编译程序+运行系统

1.3 编译程序总体结构

 各模块功能:

词法分析器:从左到右扫描组成源程序的字符串,并将其转化为单词串,将发现的标识符登记到符号表中,检查组词方面的错误并进行处理。

语法分析器:组词成句,分层给出程序的组成结构,指出语法错误,制导语义翻译。

语义分析与中间代码生成器:完成由语法分析器识别出来的语法成分的语义的分析,并以中间代码的形式实现对语义分析结果的表示。

代码优化器:对中间代码进行优化处理,使程序能够尽量节省存储空间,更有效地利用机器资源,使得程序的运行速度更快,效率更高。

目标代码生成器:将中间代码转换成目标机上的机器指令或汇编代码。

表格管理:按照编译过程中的信息需求,以不同的类型组织符号表,并以合适的方式查、填、和维护这些表格,提供信息服务,辅助实现编译任务。

出错处理器:进行各种错误的检查、报告、纠正,以及相应的续编译处理.

1.4 编译程序的组织

  • 根据系统资源的状况、运行目标的要求……等,可以将一个编译程序设计成多遍(Pass)扫描的形式,在每一遍扫描中,完成不同的任务。
  • 遍可以和阶段相对应,也可以和阶段无关。

编译程序设计目标:

规模小、速度快、诊断能力强、可靠性高、可移植性好、可扩充性好
目标程序也要规模小、执行速度快

为了提高可移植性,将编译程序划分为前端和后端

前端:
与源语言有关、与目标机无关的部分
词法分析、语法分析、语义分析与中间代码生成、与机器无关的代码优化

     后端 :

与目标机有关的部分
与机器有关的代码优化、目标代码生成

1.5编译程序的生成 

自展-使用语言提供的功能来编译该语言自身。

表示语言翻译的T形图

 问题一:如何直接在一个机器上实现C语言编译器?

解决:

用汇编语言实现一个 C 子集的编译程序 (P 0 )
用汇编程序处理该程序 , 得到 (P 2 : 可直接运行 )
C 子集编制 C 语言的编译程序 (P 3 )
P 2 编译 P 3 ,得到 P 4

 问题二:A机上有一个C语言编译器,是否可利用此编译器实现B机上的C语言编译器?(移植)

 问题三:A机上有一个C语言编译器,现要实现一个新语言NEW的编译器?能利用交叉编译技术么?

 第二章 高级语言及其文法

2.1 语言概述

语言:形式化的内容提取

语言 (Language) :满足一定条件的句子集合
句子 (Sentence) :满足一定规则的单词序列
单词 (Token) :满足一定规则的字符 (Character)

 程序设计语言——形式化的内容提取

程序设计语言 (Programming Language) :组成程序的所有语句的集合。
程序 (Program) :满足语法规则的语句序列。
语句 (Sentence) :满足语法规则的单词序列。
单词 (Token) :满足词法规则的字符串。

 语言描述形式:文法

    语法——语句的组成规则

    词法——单词的组成规则

语言学家Chomsky最初从产生语言的角度研究语言,提出了文法

克林(Kleene)在1951年到1956年间,从识别语言的角度研究语言,给出了语言的另一种描述。(自动机)

1959年,Chomsky证明了文法与自动机的等价性。

2.2基本定义

1.字母表∑,字母表中的元素——字母或字符

2.字母表乘积12={ab|a∈∑1b∈∑2}

3.字母表幂运算:

⑴ ∑ 0 ={ ε }
⑵ ∑ n =∑ n -1 ∑    n ≥1

4.字母表的正闭包和克林闭包 

+ =∑∪∑ 2 ∪∑ 3 ∪∑ 4 ∪……
* =∑ 0 ∪∑ +

5.句子\forall x \epsilon∑*,空句ε、

6.句子xay中的a叫做a在该句子中的一个出现

7.句子x中字符的个数称为字符串的长度,记作|x|

8.句子的并置或联结:xy

对于 n ≥0 ,串 x n 次幂 (power) 定义为:
x^ 0 = ε
x^ n = x^ n -1  x

9.前缀、真前缀,后缀、真后缀 

    真xx:不包含原句子

10.两个句子的公共前缀、最大公共前缀、公共后缀、最大公共后缀

11.字串

12.公共子串、最大公共子串

13.语言\forall L \subseteq ∑*

14.语言乘积L1L2={xy|xL1yL2}

15.语言L幂运算,L的克林闭包和正闭包

2.3 文法的定义 

16.文法G=(V,T,P,S)

:非终结符 (Variable )
语法变量(成分) —— 代表某个语言的各种子结构
T :终结符 ( Terminal )
语言的句子中出现的字符 T \phi
:开始符号 (Start Symbol) S
P:产生式集合

17.推导和规约

19.文法G产生的语言 L(G)={w | S-->w & wT* }

    文法G可以派生出无穷多个句子,文法的作用就是以有限的规则描述无限的语言现象

20.句型&句子,句子是句子中每个字符都属于终结符,而句型可以包含非终结符

     句子一定是句型

2.4 文法的分类

1.  0型文法(短结构文法PSG):满足文法定义的要求

2.  1型文法(上下文有关文法CSG):\forall \alpha \rightarrow \beta \epsilon P, |\beta|\geq |\alpha|,S\rightarrow \varepsilon除外。

3.  2型文法(上下文无关文法CFG):在1型文法基础上,产生式左部属于语法变量V

4.  3型文法(正规文法RG):

文法包含关系:

2.5 CFG的语法树

语法分析树,又称分析树、推导树、派生树

p 用树的形式表示句型的生成
树根:      开始符号
中间结点:  非终结符
叶结点:    终结符

 句型&短语:

  • 句型本身是它的短语
  • 句型的语法树的任意一个级数至少为2的A-子树的结果是它的短语
  • 句型的语法树的任意一个级数为2的A-子树的结果是它的直接短语
  • 句型的最左直接短语称为句柄

 最左推导:每次推导都施加在句型的最左边的语法变量上。——与最右归约对应

最右推导:

2.6 文法的二义性 

二义性定义:文法的句子存在两颗分析树

固有二义性:产生CFL L的所有CFG都是二义性的,则称L为固有二义性,也称为先天二义性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值