软件设计师_语言处理程序基础(2.2)

2.2.1 汇编程序基本原理

先看图:

 

1.概念

面向机器的符号化的程序设计语言.

2.组成

 1)指令语句:机器指令语句,能被CPU识别并执行,例如(ADD,SUB);可分为:传送指令,算术运算指令;逻辑运算指令;移位指令;转移指令和处理机控制指令等类型;

 2)伪指令语句;

 区别: 经汇编后不产生机器代码,而指令语句会产生; 伪指令的操作是源程序被汇编时完成,而指令语句的操作必须在程序运行是完成;

3) 宏指令:将多次重复使用的程序定义为宏,使用相应的宏名来引用;

3.汇编程序

 1) 功能: 源程序翻译成机器指令程序

 2)扫描源程序2次完成翻译,

  第一次扫描任务:  定义符号创建符号表ST,

 

      第二次扫描任务:产生目标程序;可执行的汇编语句翻译成二进制代码机器指令;

 

2.2.2 编译程序基本原理

先看图

 

 

 

1.汇编过程概述

编译程序 的功能是把某高级语言书写的源程序翻译成与之等价的目标程序(汇编程序或机器语言程序).

①词法分析--- 对源程序从前往后逐个字符地扫描
  源程序可以简单的被看成一个多行的字符串, 词法分析阶段是编译过程中的第一个阶段,这个阶段的任务是对源程序从前到后(从左到右)逐个字符地扫描, 从中识别出一个个"单词"符号, "单词"符号是程序设计语言的基本语法单位, 如 关键字、标识符、常数、运算符和分隔符(标点符号, 括号)等.
②语法分析 --分析成语法单位,构造出语法树
  语法分析的任务是在词法分析的基础上行, 根据语言的语法规则将单词符号序列分解成各类的语法单位, 如 表达式、语句、程序等. 通过语法分析确定整个输入串是否构成一个语法上正确的程序. 是如果源程序中没有语法错误, 语法分析后就正确的构造出语法树.否则就指出语法错误, 并给出相应的诊断信息.
词法分析和语法分析本质上都是对源程序的结构进行分析.


③语义分析--- 类型分析和检查错误
  语义分析阶段主要分析程序中各种语法结构的语义信息, 包括检查源程序是否包含语义错误, 并收集类型信息在后面的代码生成阶段使用. 只有语法和语义都正确的源程序才能被翻译成正确的目标代码.
语义分析的一个主要工作是进行类型分析和检查. 程序设计语言中的一个数据类型一般包含两个方面的内容: 类型的载体及其上的运算. 例如: 整除取余运算符只能对整形数据进行运算, 若其运算对象中有浮点数就认为是类型不匹配错误.
④中间代码生成
  中间代码生成阶段的工作是根据语义分析的输出生成中间代码. 它是一种简单且含义明确的记号系统, 他们的共同特征是与 机器无关. 中间代码的设计原则: 一是容易生成, 二是容易被翻译成目标代码.
语义分析和中间代码生成所依据的是语言的语义规则.

四元式:


⑤代码优化
  由于编译器将源程序翻译成中间代码的工作是机械的, 因此, 生成中间代码往往在计算时间上和存储空间上有很大的浪费. 优化过程可以在中间代码生成阶段进行, 也可以在目标代码生成阶段进行. 优化所依据的原则是程序的等价变换规则.
⑥目标代码生成
  目标代码生成是编译器工作的最后一个阶段. 这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码, 这个阶段的工作与具体的机器密切相关.
⑦符号表管理
  符号表的作用是 记录源程序中各个符号的必要信息, 以辅助语义的正确性检查和代码生成, 在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除操作.
⑧出错处理
  用户编写的源程序不可避免地会有一些错误, 这些错误大致可分为 静态错误和动态错误.

       动态错误也称动态语义错误, 他们发生在程序运行时, 例如变量取零作除数、数组下标越界等错误.

     静态错误编译时所发现的程序错误, 可分为语法错误和静态语义错误, 如单词拼写错误、标点符号错误、表达式中缺少操作数、括号不匹配等有关语言结构上的错误称为语法错误; 而语义分析时发现的运算符与运算对象类型不合法等错误属于 静态语义错误.
  对于编译过程的各个阶段, 在逻辑上可以把它们划分为 前端和后端 两部分(对于机器来说的). 前端包括从词法分析到中间代码生成各阶段的工作, 后端包括中间代码优化和目标代码的生成及优化等阶段.

  以中间代码为分水岭, 把编译器分成了与机器有关的部分和与机器无关的部分. 前后端的有机结合后就形成了该语言的一个编译器.
 

 2)总结 :

4、编译过程:

(1)词法分析阶段:是编译过程的第一阶段,其任务是对源程序从前到后(从左到右)逐个字符扫描,从中识别出一个个“单词”符号。词法分析过程的依据是语言的词法规则,即描述“单词”结构的规则。

词法错误:非法字符,关键字或标识符拼写错误。

(2)语法分析阶段:其任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位。通常语法分析是确定整个输入串是否构成一个语法上正确的程序。一般来说,通过编译的程序,不存在语法上的错误。

语法错误:语法结构出错,if endif不匹配,缺分号。

(3)语义分析阶段:其任务主要检查源程序是否包含静态语义错误(动态语义错误在执行过程中才能发现),并收集类型信息供后面的代码生成阶段使用。语义分析的一个主要工作是进行类型分析和检查。

语义错误:死循环,零除数,其它逻辑错误。

(4)中间代码生成:其任务是根据语义分析的输出生成中间代码。此阶段不是必须的。常见的中间代码有:树、后缀式、三地址码(四元式)。

(5)代码优化:其任务是优化中间代码。此阶段不是必须的。

(6)目标代码生成:是编译器工作的最后一个阶段。其任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码。本阶段与具体机器密切相关。

001.png

(7)符号表的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。符号表的存在可以贯穿编译所有阶段。

 

 

 2.2.3 解释程序基本原理

 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

转载于:https://www.cnblogs.com/coloz/p/11273485.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值