编译原理简介

编译原理

一、什么是编译程序?

从功能上讲,一个编译程序就是一个语言翻译程序,语言翻译程序把一种语言(称为源语言)书写的程序翻译成另一种语言(称为目标语言)的等价程序。

编译程序的目的就是讲源语言程序翻译成等价的目标语言程序。

常见语言翻译程序的有:

  1. 汇编程序:将汇编语言程序翻译成机器语言程序;

  2. 编译程序:源语言是FORTRAN、Pascal或者C那样的高级语言程序,目标语言是像汇编语言或者机器语言那样的低级语言,这种翻译的程序就是编译程序。
    在这里插入图片描述

二、高级语言程序处理过程

​除了编译程序之外,还需要一些其他程序才能生成一个可以在计算机上执行的目标程序。

下图是分析一个程序设计语言的典型的处理过程,我们可以从中进一步了解编译程序的作用:
在这里插入图片描述

三、编译过程概述

编译程序完成从源程序翻译成目标程序的翻译工作,是一个复杂的过程。从概念来讲,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的,下图给出了一个编译过程的各个阶段,这是一种典型的划分方法,将编译过程划分成词法分析、语法分析、语义分析中间代码生成、代码优化和目标代码生成共6个阶段。
在这里插入图片描述

1. 词法分析

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

  • 这里的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。

  • 这些单词包括保留字(关键字)、标识符、运算符、界限符、常亮

2. 语法分析

  • 语法分析的目的是在词法分析的基础上将单词序列分解成各类语法短语,例如“程序”、“语句”、“表达式”等。

  • 语法分析所依据的是语言的语法规则。

  • 语法分析利用的工具是语法分析树。

3. 语义分析

​ 语义分析的任务是检审源程序有没有语义错误,同时为代码阶段生成而收集类型信息。类型信息包含种属、类型、存储位置、长度、值等信息,这些信息都存储在符号表中。

4. 中间代码生成

​在经过上述的几个阶段之后,有的编译程序将源程序变成了一种内部表示形式,这种内部形式叫做中间代码或中间语言。

​这种中间代码有两个特点,一是容易生成;而是容易将它翻译成目标代码。常用的中间代码的形式是一种近似“三地址指令”的“四元式”,其形式为:

(运算符, 运算对象1, 运算对象2, 结果)

5. 代码优化

​这个阶段的任务是对前一阶段生成的中间代码进行变化或者改造(也可以称为简化),目的是使生成的目标代码更加高效,省时间、省空间。

6. 目标代码生成

这个阶段的任务是将中间代码变换成特定机器上的绝对指令代码(或可重定位的指令代码,或汇编指令代码)。这是编译的最后阶段,它的工作与硬件系统结构和指令含义有关,这个阶段的工作很复杂,涉及硬件系统功能部件的运用、机器指令的选择、各种数据类型变量的存储空间分配以及寄存器和后缓寄存器的调度等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值