编译原理

来源:互联网 发布:淘宝达人入口 编辑:程序博客网 时间:2024/04/24 03:19

看着头痛,也没有个实践的物品来看看是什么东西!

编译难,难于上青天!

 

一下在基本个概念性东西,大家指点下 如果有错,及时改正

 

交叉编译:在一个机器上的对某种高级语言进行编译,
产生的目标语言是另一个机器的汇编语言或机器语言

(理解:在A机器上运行的源代码,编译成为B机器上
的目标代码或可执行的代码程序)


翻译:是按原程序的实际输入顺序,处理程序语句
,得到执行的目标程序。


顺序反映
(理解:就是单一的执行,只是从头到尾的执行,不按照逻辑执行,有点像是翻译英语,只是翻译单词,

而不管前后单词的集合。)

解释:是按源程序的定义边解释边执行。即使执行是按照被解释的源程序逻辑流程进行工作的
(理解:就是不单一执行,之间判断程序的逻辑,如IF语句,判断其中的条件是否满足!)


编译过程可分下面6个阶段
(1):词法分析
(2):语法分析
(3):语义分析
(4):中间代码的生成
(5):代码优化
(6):目标代码生成


--------------------------------------------
(1) 词法分析: (相当于英语中的 查找其中的单词:)!

例子:
position := initial + rate * 60:
查找其中的“单词"有
(1) position
(2) :=
(3) initial
(4) +
(5) rate
(6) *
(7) 60
(8) :
-----------------------------------------------
(2)语法分析:(层次分析,把源程序的单词组成语法短语)
(理解:相当于分析中文中的 主语 谓语 动词
其中的一个概念是 语法树,相当于图文解说)
-----------------------------------------------
(3)语义分析:程序的语义就是它的“意思”,它与语法或结构不同。程序的语义确定程序的运行,但是
大多数的程序设计语言都具有在执行之前被确定而不易由语法表示和由分析程序分析的特征。
(理解,由于某些源程序在编译器里边无法运行,分析代码无法确定!语义分析还包括对常量和变量的数

据类型进行分析,如:类型不相同的两个类型数据进行计
------------------------------------------------
(4)中间代码的生成:
中间代码的存在,有力与代码的优化,和移植,它与机器代码没有关系,各个类型的高级语言可以生成不

同的中间代码!
四元式的中间代码
其形式如下:
例: id1:= id2+id3*60 翻译成四元式如下

 操作符  操作对象1 操作对象2 操作结果
(1) inttoreal 60  ---------  t1
 (2) *  id3  t1  t2

其下面省略。。。。。。
--------------------------------------------------
(5)代码优化。
代码优化是对中间代码进行等价交换,以提高目标代码的时间
,空间效率,也就是希望完成同样功能的程序!
(代码优化是为了缩短运行的时间和减少程序占用的空间,
但是看来二者是不可兼得的,看实际情况,对代码进行相应的优化!)
----------------------------------------------------
(6)目标代码的生成!
把源程序生成PC可以执行的目标程序,叫做目标代码生成
-------------------------------------------------------

中间还有许多要理解个概念


符号管理表


符号管理表是记录源程序中使用的名字,收集名字的的各种属性信息!如:类型,作用域,分配储存信息


如  const 常量 值 :35
   var 变量    类型 : int 层次 :2 地址: dx+5

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
编译程序的实现途径
构造方法:
手工构造:用机器语言,汇编语言或是高级程序设计语言书写
 该的目标程序的效率高,但是程序的代码的维护低。。。。。。
自动构造工具: lex,yacc。lex yacc分别是词法和语法分析器的生成器

移植方法:目标程序用中间语言

自展方式: 用T型图表示!(重点)

也是先用下东西,写个比较方便的编译器,让后比较方便的编译器在编译出来一个更方便的编译器!

鸡生蛋,蛋生鸡

——————————————————
以上为第一章的大致内容和个人理解@!!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

文法和语言的概述:

1:  文法和语言的概述
2: 文法和语言的形式定义
3: 文法的类型
4: 上下文无关文法及其语法树
5: 句型的分析
6: 有关文法使用中的一些说明

3.1 语言文法概述
本章的目的为语言的文法描述寻求工具
通过该工具,可以:
:对源于元给出精确无二义的语法描述
:根据语言文法的特点来指导 语法分析的过程
:从描述语言的我俄方那可以自动过早出可用的分析程序
:知道语义翻译

语言的概述
语言是由句子组成的集合,是由一组记好所构成的集合


语言研究的三个发面
语法(syntax):表示构成语言句子的各个记好之间的组合规律

语义(semantics):表示按照各种表示犯法所表示的各个记好的特定含义。

语用(pragmatics):表示在各个记好所出现的行为中,他们的来源,使用和影响。

形式语言理论
形式语言理论是一种从语法上研究语言的理论。它是抽象的数学系统,着重研究符号串集合的表示法
,结构及其特性。是程序设计语言愈发分析研究的基础。
形式语义:(formal semantics):


语言的一般描述
语言可以看成在一个基本符号集上定义的,按一定规则构成的基本符号串组成的所有集合。
****************************************

一些基本概念:

符号: 可以相互区别的记号(元素)
字母表: 符号(元素)的非空有穷集合
符号串:由字母表中的富豪组成的任何有穷序列称为该字母表上的符号串.
符号串的长度:符号串中符号的个数。
空串 长度为零的符号串
符号串的运算:
连接 (两个字符串的连接)
方幂  (符号串自身连接N次得到的字符串:)
头:空+ a + ab + abc
尾:空+ c + bc + abc
固有头: 空+a+ab'
固有尾: 空+c+cb
符号串集合:若集合中所有元素都有某字母表上的符号串,则称之为该字母表上的符号串集合!
符号串集合的乘积:
例子:符号串集合A={ab,aa};B={ba,bb};
      乘积AB=相当于把字符串中的两个字符串集合的各个字符串和另外一个字符串相乘

闭包:∑*称为∑的闭包,如∑*表示∑上的所有有穷长的串的集合!