当前位置: 首页 > ai >正文

【编译原理】-- 第一章(翻译程序、编译程序、汇编程序、解释程序、编译过程概述)

编译系统

  • 高级语言的优点是有代价的,必须有一个“翻译程序”,也就是高级语言必须有相应的软件支持系统,“编译程序+相应的支持用户程序”---编译系统。
  • 一般这种编译工作有两种途径或两种形式的混合:编译--编译程序、汇编程序;解释---解释程序。

一、翻译程序、编译程序、汇编程序、解释程序

1、翻译程序

翻译程序是这样一种程序,它能够把用甲语言书写的程序翻译成与之等价的用乙语言书写的程序。

甲语言称为该翻译程序的源语言。

乙语言称为该翻译程序的目标语言。

用源语言书写的程序称为源程序。

用目标语言书写的程序称为目标程序。

2、编译程序

如果翻译程序的源语言是高级语言,目标语言是低级语言(机器或汇编语言),这种翻译程序称为编译程序。

3、汇编程序

如果翻译程序的源语言是汇编语言,目标语言是机器语言,这种翻译程序称为汇编程序。

说明:

  • 不同的源语言有不同的编译程序;同一种源语言可以有不同的编译程序。
  • 源程序的执行一般分为两阶段:编译阶段和运行阶段。
  • 编译阶段生成的目标程序不是机器代码程序,而是符号汇编程序,源程序的执行分为三个阶段:编译阶段、汇编阶段和运行阶段。

4、解释程序

按源程序的动态顺序逐句地进行分析解释并执行直至结束。

  • 解释程序边翻译边执行,不生成目标程序,交互式的工作方式,但执行效率低。
  • 编译程序生成目标程序,链接形成可执行文件运行,所有翻译工作在运行前完成,执行效率高。

二、编译过程概述

典型的编译过程分以下五个阶段:前三阶段是编译器前端:源程序的分析;后三阶段是编译器后端:目标程序的综合。

  • 词法分析
  • 语法分析
  • 语义分析及中间代码生成
  • 中间代码优化
  • 目标代码生成
  • 目标代码优化

1、词法分析

词法分析的主要任务是将符号串形式的源程序进行扫描,并分解为具有独立意义的最小语法单位--单词符号。

例:

例: 以下为 PASCAL语言的一条语句
if A=B then X=Y;
词法分析的结果
if         A         =         B         then         X          =         Y         ;
关      变        运         变         关         变量      运        变量   分隔符

 说明:

  • 依据的规则是词法规则。
  • 单词符号:常量、变量名、关键字、保留字、运算符等。
  • 每一类单词符号可用一整数表示,或其他方式。
  • 词法分析应指出单词符号的词法错误,如非法字符、不符合词法规则等。

2、语法分析

语法分析的主要任务是从词法分析取得单词符号串形式的源程序,并将一个或多个单词组合为语言的各种语法类。

  • 语法分析依据的是语言的语法规则。
  • 语法类:表达式、语句、子程序等。
  • 语法分析应指出语句的语法错误,如错误表达式。

例:

词法分析的结果
w         =         (         a         +         b         )         *         c         ;
变量  运算符 分隔符 变量 运算符 变量 分隔符 运算符 变量 分隔符


语法分析的结果
w         =         (         a         +         b         )         *        c         ;
变量 运算符 分隔符 变量 运算符 变量 分隔符 运算符 变量 分隔符
                                        表达式
赋值语句

3、语义分析及中间代码生成

语义分析的主要任务是确定源程序的意义,对不同的语法类进行初步的翻译工作,包括静态语义检查和中间代码的生成。

静态语义检查:对每种语法范畴进行静态语义检查(变量是否定义,类型检查)

中间代码生成:进行初步的翻译,生成中间代码。

引入中间代码的目的:

  • 便于移植
  • 便于优化
  • 便于目标代码生成

例:

上例的C语言语句
w=(a+b)*c ;
语义分析及中间代码生成确定先加后乘的操作,并生成中间代码。

例:以上语句的一种中间代码三元式
(1) (+,a,b)
(2) (*,(1),c)
(3) (=,w,(2))

说明:

  • 语义分析依据的是语言的语义规则。
  • 中间代码是一种结构简单含义明确的记号系统,这种记号系统的特点是既独立于具体的硬件,又和计算机的指令系统有某种程度的联系或相似之处,很容易将中间代码转变为机器指令。
  • 语义分析和语法分析是不同的概念,但在实际完成编译工作时,两者紧密结合,一般同时完成。

4、中间代码优化

中间代码优化的主要任务是对中间代码进行算法的等价变换,以期得到高效的目标代码。

  • 高效指时间和空间的高效;
  • 代码优化可以在目标代码生成之前进行,也可以在目标代码生成之后进行;
  • 代码优化要付出编译代价;
  • 编译优化技术目前较活跃,也比较难。

5、代码生成

主要任务是将源程序的中间代码形式根据具体的机器硬件系统转换成机器语言或汇编语言。

说明:

  • 并非所有的编译程序都需要这五个阶段。
  • 完整的编译程序还包括符号表的管理和出错处理。

 


http://www.xdnf.cn/news/11234.html

相关文章:

  • 码率(kbps)、帧率(FPS)、分辨率和清晰度的正反比关系
  • 【收藏】计算机专业常用学习网站
  • 红旗Linux:国产操作系统的领军者!
  • gridview修改,添加,删除等
  • standard.jar是干什么的有什么用?
  • 程序员们平时都喜欢逛什么论坛呢?
  • 海量数据处理分析方法
  • 虚拟软驱的3种方法
  • WOW表情
  • 谷歌chrome浏览器源码分析
  • 【黑客零基础入门必知必会】常见的网站攻击方式
  • 无线网络密码破解软件BackTrack3+spoonwep2中文包+闪盘制作教程
  • python模块之keyword
  • [SPRD]展锐Android R关机充电动画修改
  • C语言期末试题(附答案)选择题+编程题
  • 星号密码查看 android,侠客密码查看器怎么查看已输入的星号密码
  • 什么是 rail-to-rail运算放大器?
  • Sap basis 综合介绍
  • [转]XNA 3.1 转换到 XNA4.0 的备忘录
  • 世上的人大都只会“飞鸽传书下载”,没人开发
  • 基于ssm网月科技公司门户网站开发与实现论文
  • Windows 网络编程
  • excel量化交易模板_量化平台果仁网为什么能赢?
  • 冒险岛开服服务端教程自己搭建服务器需要那些东西
  • 7个免费网络服务器系统推荐,分省多线路智能DNS系统wddns 1.7发布
  • 医学影像篇
  • jemter java请求后置_jmeter完成一个java请求-本机调用
  • 搭建邮件服务器的速成指南合集
  • Iframe 用法的详细讲解
  • ZineMaker制作电子书相关