【软件技术基础】编译技术

【软件技术基础】编译技术

ID:40099391

大小:345.00 KB

页数:58页

时间:2019-07-21

【软件技术基础】编译技术_第1页
【软件技术基础】编译技术_第2页
【软件技术基础】编译技术_第3页
【软件技术基础】编译技术_第4页
【软件技术基础】编译技术_第5页
资源描述:

《【软件技术基础】编译技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第6章编译技术6.1编译程序的工作过程6.2状态矩阵法的编译过程6.3词法分析6.4中间语言表示6.5语法的分析与加工编译程序是一种将高级语言编写的源程序编译成机器语言程序(称为目标程序)的实用程序。6.1编译程序的工作过程为了将源程序翻译成目标程序,一般都要包括以下几个步骤。①输入源程序。②对以机内码表示的源程序进行词法分析,辨认出一个个单词符号。③根据源语言的语法规则进行语法分析。④在实际运行之前,通常还要对目标程序的各部分进行连接装配。对于块结构的语言(如C语言和FORTRAN语言等),通常是进行分块编译,分别得到半目标程序,最后可用装配程序组装成

2、一个完整的程序。编译程序一般要包含以下几个程序模块。(1)词法分析程序(2)语法分析程序(3)加工程序(4)优化修饰部分(5)装配程序或连接编辑程序6.2状态矩阵法的编译过程6.2.1状态矩阵法的基本原理所谓“状态”,粗略地说,是表示过去已经扫描了什么语法成分,以便当遇到新的语法符号时,在不同的状态下对该语法符号作出不同的处理。状态矩阵法的核心是状态矩阵(也称状态表),如表6.1所示。6.2.2状态矩阵的压缩在具体实现状态矩阵法时,为了节省存储空间,通常要对状态矩阵进行压缩。各列的意义如下:①状态指状态栈栈顶项中所包含的可能状态。②符号指当前扫描到的可能

3、符号。③加工子程序指当前遇到的相应状态符号配对时编译程序应做的工作。④状态改变指出在做完相应的编译工作后其状态栈如何改变。综上所述,状态矩阵法的编译过程是按照存放在内存中的状态表不断地进行解释执行的。6.3词法分析6.3.1词法分析的任务词法分析是编译过程各阶段的基础和必要的准备。词法分析的主要任务是从源程序语句中识别出具有独立意义的语法单位(即语法符号),并且建立一个符号表,用以保存各语法符号的属性。表6.4中的符号最后都变成二进制形式的代码串。可以将这些通用符号建立一个通用符号表,这些符号的代码可用较大的编号来表示,如表6.5所示。在这种情况下,上述

4、赋值语句经词法分析后可以得到一张符号表如表6.6所示。6.3.2读字符程序读字符程序的任务是从源程序字符串中顺序读出基本符号,并作一些简单的处理后提供给词法分析程序。6.3.3状态矩阵法的词法分析过程词法分析程序可以用状态矩阵法来实现。由图6.4可以看出,每执行一次这个程序,就顺序从源程序中读出一个语法符号,并且将有关的信息存放在一些工作单元中。下面以FORTRAN语言为例来说明用状态矩阵法实现词法分析的过程。为简单起见,作如下一些假设:①不考虑格式语句。②不考虑数的翻译。③不考虑以E开头的运算符,且运算符只有两个字母。6.3.4算术常数的识别和翻译在词

5、法分析的过程中,不仅要识别出常数,还需要将常数翻译成统一的格式。经过词法分析后,所有的实数都分解成两部分:一部分是有效数字的所有位组成的正整数;另一部分是以10为底的整数指数部分。6.4中间语言表示“中间语言”,为能用来表述源程序并与之等效的一种编码方式。6.4.1波兰表示一个表达式的波兰表示就是后缀表示,即表达式中的运算对象写在前面,运算符写在后面。(1)赋值语句X=e其中e为表达式。若将赋值号“=”看作是一种双目运算符,则此赋值语句的波兰表示定义为:Xe=(2)无条件转向语句GOTOn的波兰表示为:nGOTO(3)逻辑条件语句IFCS的波兰表示

6、为:CSLIF(4)子程序调用语句CALLS(y1,y2,…,yn)的波兰表示为:y1,y2,…,ynSSUB(5)维数说明语句DIMENSIONA(N,M)的波兰表示为:NMADIM(6)函数子程序段头语句FUNCTIONF(X1,X2,…,XN)的波兰表示为:X1,X2,…,XNFDEFF6.4.2三元组表示波兰表示有一个缺点,就是不便于作代码的优化。三元组表示的一般形式为:k,(θo1o2)6.5语法的分析与加工语法分析和加工的主要任务有以下几项。①识别出各种类型的语句,并进行语法检查。②语法的加工处理。③编译程序工作的最后结果是产生目标

7、程序或半目标程序。6.5.1优先矩阵法优先矩阵法的基本思想如下。将程序设计语言中的所有算符(广义运算符,包括算术运算符、分隔符、拼写定义符及界限符├和┤等)设置一个优先关系,而这种优先关系用一张优先矩阵表来表示。6.5.2优先数法基于算符的优先数进行编译的方法称为优先数法。6.5.3状态矩阵法状态矩阵法用表格形式来描述编译过程,因此条理十分清楚,这是其他方法所不及的。6.5.4递归子程序法递归子程序法的基本思想是:从整个源程序开始,根据各种语法成分的形成规则从大到小逐层往细分析处理,而对于每个递归定义的语法成分,都用一个相应的递归子程序来进行处理。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。