编译原理(一)

                                                    编译系统概论

一、编译过程概述

计算机语言之所以能由单一的机器语言发展到今天的数千种高级语言,就是因为有了编译技术。

1.用到编译原理和技术的软件工具

  • 语言的机构化编辑器:提供关键字及匹配关键字,可减少语法错误,加快源程序调试
  • 语言程序的调试工具
  • 程序格式化工具
  • 程序语言的测试工具:静态分析器和动态测试器
  • 高级语言之间的转换工具
  • 嵌入式系统
  • 并行编译:使用并行程序设计语言编写并行程序、将串行程序并行化

2.编译程序

程序设计语言分为:机器语言、汇编语言、高级语言

翻译程序:将某一种语言(源语言)程序转换为与其逻辑上等价的另一种语言(目标语言)程序;

编译程序:源语言为高级语言,目标语言为汇编语言或机器语言的翻译程序;

汇编程序:源语言为汇编语言,目标语言为机器语言的翻译程序;

解释程序:源语言程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。

3.编译程序的结构

    词法分析器、语法分析器、语义分析和中间代码生成、优化器、目标代码生成

二、编译系统的基本过程

1.词法分析

        从左到右一个字符一个字符的读入源程序,对构成源程序的字符串进行扫描和分解,从而识别出一个个单词

2.语法分析

        在词法分析的基础上将单词序列分解成各类语法、短语,如程序、表达式、语句等,并构造语法分析树(描述了句子的语法结构)。

3.语义分析

        语义分析是在语法分析程序确定出语法短语后,审查有无语义错误(语义检查),并为代码收集标识符的属性信息;

        符号表是用于存放标识符的属性信息的数据结构。

4.中间代码生成

        完成语法分析和语义分析后,编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。它是一种结构简单、含义明确的记号系统。三元式、中间三元式、四元式

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

5.代码优化

        为了使生成的目标代码更加高效,可以对产生的中间代码进行等价变换改造,这就是代码优化。使其运行的快一些,占用空间少一些

机器无关代码优化、机器相关代码优化

6.目标代码生成

        把中间代码变化成特定机器上的绝对指令代码或可重定位的二进制指令代码或汇编指令代码

            汇编语言形式

            可重定位二进制代码形式

            内存形式

7.符号表

        表格中记录着源程序的各种信息,以便需要时可以随时查询或修改。

        作用:作为进行语法合法性检查的依据、作为目标代码生成阶段地址分配的依据。

8.错误检测

        对于源程序错误处理的程度是衡量一个编译程序良莠的标准。

表格管理和错误检测是贯穿整个编译过程的

三、编译程序的开发方法

1.自编译

        编写源程序和编写编译程序的语言是同一种高级语言。

2.交叉编译

交叉编译是指用A机器上的编译程序来产生在B机器上运行的目标代码。例如,若A机器上已有C语言可以运行,则可用A机器中的C语言编写一个编译程序,它的源程序是C语言程序,而产生的目标程序则是基于B机器的,即能够在B机器上执行的低级语言程序。

3.自展

自展的方法是:首先确定一个非常简单的核心语言L0,然后用机器语言或汇编语言编写出它的编译程序T0;再把语言L0扩充到L1,此时有L0⊂L1,并用L0编写L1的编译程序T1(即自编译);然后再把语言L1扩充为L2,此时有L1⊂L2,并用L1编写L2的编译程序T2……这样不断扩展下去,直到完成所要求的编译程序为止。

4.移植

移植是指A机器上的某种高级语言的编译程序稍加改动后能够在B机器上运行。一个程序若能较容易地从A机器搬到B机器上运行,则称该程序是可移植的。移植具有一定的局限性。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值