语言处理程序基础

1、汇编程序基础

1.1汇编语言

由汇编语言编写的程序称为汇编语言源程序。汇编语言源程序由若干条语句组成,有三类语句:指令语句、伪指令语句和宏指令语句

  1. 指令语句:指令语句又称为机器指令语句,将其汇编后产生机器代码,这些机器代码由CPU直接识别并执行;指令语句可分为:传送指令、算数运算指令、逻辑运算指令、移位指令、转移指令、处理机控制指令等类型。
  2. 伪指令语句:指示汇编程序在汇编源程序时完成某种工作,如给变量分配储存单元地址。伪指令语句与指令语句的区别:伪指令语句经汇编后不产生机器代码,指令语句经汇编产生机器代码;伪指令语句所指示的操作是源程序在被汇编时完成,指令语句的操作必须是在程序执行时完成。
  3. 宏指令语句:多次重复定义的程序叫宏。

1.2汇编程序

汇编程序的功能:将汇编语言源程序翻译成机器指令程序。基本工作为:将每一条汇编语句翻译成机器指令;处理程序中出现的伪指令和宏指令。由于汇编指令中的操作数的地址部分在后面,所以汇编程序要扫描源程序两次。

  1. 第一次扫描:定义符号的值并创建一个符号表ST。
  2. 第二次扫描:产生目标程序。在第二次扫描中设计两方面工作:一是把机器指令助记符转换成二进制机器指令操作码;二是求出操作数区各操作数的值。

2、 编译程序基础

2.1编译程序过程概述

编译程序的功能:是把某种高级语言编写的源程序编译成目标程序(汇编语言程序或机器语言程序)。编译程序过程可分为六个过程:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成

  1. 词法分析:对源程序从左到右(从上到下)逐个字符的扫描,从中识别 “单词” 符号。源程序可以被看成一个多行的字符串。单词符号是程序设计语言的基本语法单位,如关键字、标识符、常数、运算符和分隔符(标点符号、左右括号)。词法分析程序输出的“单词”以二元组的方式输出既单词的种类和单词的值。词法分析的任务是把构成源程序的字符串转换成单词符号序列。
    1)字母表、字符串、字符串集合及运算。
    2)正则表达式和正规集。
    3)有限自动机:是一种识别装置的抽象概念,他能正确的识别正规集。分为两类:确定的有限自动机、不确定的有限自动机。确定的有限自动机:由一个五元五组成(S,∑,f,s0,Z),①S是一个有限的集合,他的每个元素称为一个状态;②∑是一个有穷的字母表,它的每一个元素称为一个输入字符;③f是S x ∑→S上的单值部分映象。f(A,a)=Q 表示当前的状态为A、输入为a时,将转换成下一个状态Q。称Q为A的一个后继者;④s0∈S,是唯一的开始状态;⑤Z是非空的终止状态集合,Z∈S。不确定的有限自动机:一个不确定的有限自动机也是一个五元组,它与确定的有限机的区别是①f是S x ∑→2s上的映象。对于S中的一个给定状态及输入符号,返回一个状态的集合,即当前的状态的后继状态不一定是唯一确定的;②有向弧的标记可以是ε。

  2. 语法分析:在词法分析的基础上,根据语法分析规则,将单词符号序列分解为各类语法单元,如“表达式”,“语句”,“程序”。通过语法分析确定整个输入字符串是否构成一个正确的程序。如果源程序没有语法错误,就会构成一个语法树;否则,就给出错误信息,并指出相应诊断信息。词法分析和语法分析本质都是对源程序结构进行分析。

  3. 语义分析:主要分析语法结构中语义信息,其中包括检查对静态语句是否存在错误,以及收集类型信息供后面信息生成代码使用。语义分析主要工作是:进行类型分析和检查。程序设计语言的数据类型有两个方面的内容:类型的载体和类型的运算。对于声明语句,对于遇到的符号,需要对其进行符号表的填查工作;对于可执行语句,则检查结构合理的语句是否有意义。

  4. 中间代码的生成:根据语义分析生成中间代码。中间代码一种记号系统,他们的共同特征是与具体的机器无关。中间代码设计原则是:一是容易生成,二是容易被翻翻译成目标代码。最常见的一种的中间代码是与汇编语言指令非常相似的三地址,其实现方式采用四元式(运算符,运算对象1,运算对象2,运算结果)。

  5. 代码优化:代码优化是建立在控制流和数据分析流的基础上,与具体机器无关。

  6. 目标代码生成:把中间代码变换成特定机器的绝对指令代码、可重定位的指令代码或汇编指令代码,这与具体的机器密切相关。

  7. 符号表管理:记录源程序各个符号的必要信息。

  8. 出错处理:错误信息可分为:静态错误、动态错误。动态错误:动态语义错误发生在程序运行,如变量取零时做除数时、引用数组超越下标时。静态错误:编译时所发生的错误,可分为语法错误和静态语义错误,如标点符号错误、表达式的运算符错误等。

2、解释程序基础

解释程序是一种高级语言处理程序,它在词法分析、语法分析、语义分析与编译程序工作原理基本相同,但是在运行时,它直接执行源程序或源程序的内部形式。它与编译程序的区别是它不产生目标程序。解释程序的基本结构:第一部分是分析部分,第二部分是解释部分。

  1. 分析部分:与编译过程相同的词法分析、语法分析、语义分析,经过语义分析后把源程序翻译成中间代码。
  2. 解释部分:对分析部分中产生的中间代码进行解释执行。

总结

高级语言的编译和解释方式,可从以下几个方面。

  1. 效率。编译比解释方式的效率更高。
  2. 灵活性。由于解释程序需要反复检查源程序,这使得解释方式比编译方式更加的灵活。当解释器直接运行源程序时,在运行中修改程序成为可能。
  3. 可移植性。源程序是由解释器执行的,可直接在机器上安装解释器,无需修改源代码。编译方式下,需要重新编译源程序生成目标代码后,执行目标代码。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值