《软件技术基础 幻灯片.ppt》由会员分享,可在线阅读,更多相关《软件技术基础 幻灯片.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件技术基础软件技术基础 第1页,共58页,编辑于2022年,星期三编译程序是一种将高级语言编写编译程序是一种将高级语言编写的源程序编译成机器语言程序(称的源程序编译成机器语言程序(称为目标程序)的实用程序。为目标程序)的实用程序。第2页,共58页,编辑于2022年,星期三6.1 编译程序的工作过程编译程序的工作过程 为了将源程序翻译成目标程序,一般为了将源程序翻译成目标程序,一般都要包括以下几个步骤。都要包括以下几个步骤。输入源程序。输入源程序。对以机内码表示的源程序进行词法对以机内码表示的源程序进行词法分析,辨认出一个个单词符号。分析,辨认出一个个单词符号。第3页,共58页,编辑于2022
2、年,星期三 根据源语言的语法规则进行语法根据源语言的语法规则进行语法分析。分析。在实际运行之前,通常还要对目在实际运行之前,通常还要对目标程序的各部分进行连接装配标程序的各部分进行连接装配。对于块结构的语言(如对于块结构的语言(如C语言和语言和FORTRAN语言等),通常是进行分块语言等),通常是进行分块编译,分别得到半目标程序,最后可用编译,分别得到半目标程序,最后可用装配程序组装成一个完整的程序。装配程序组装成一个完整的程序。第4页,共58页,编辑于2022年,星期三第5页,共58页,编辑于2022年,星期三第6页,共58页,编辑于2022年,星期三编译程序一般要包含以下几个程序模块。编译
3、程序一般要包含以下几个程序模块。(1)词法分析程序)词法分析程序(2)语法分析程序)语法分析程序(3)加工程序)加工程序(4)优化修饰部分)优化修饰部分(5)装配程序或连接编辑程序)装配程序或连接编辑程序第7页,共58页,编辑于2022年,星期三6.2 状态矩阵法的编译过程状态矩阵法的编译过程6.2.1 状态矩阵法的基本原理状态矩阵法的基本原理所谓所谓“状态状态”,粗略地说,是表示过,粗略地说,是表示过去已经扫描了什么语法成分,以便当遇到去已经扫描了什么语法成分,以便当遇到新的语法符号时,在不同的状态下对该语新的语法符号时,在不同的状态下对该语法符号作出不同的处理。法符号作出不同的处理。状态矩
4、阵法的核心是状态矩阵(也称状态矩阵法的核心是状态矩阵(也称状态表),如表状态表),如表6.1所示。所示。第8页,共58页,编辑于2022年,星期三第9页,共58页,编辑于2022年,星期三6.2.2 状态矩阵的压缩状态矩阵的压缩在具体实现状态矩阵法时,为了节省在具体实现状态矩阵法时,为了节省存储空间,通常要对状态矩阵进行压缩。存储空间,通常要对状态矩阵进行压缩。第10页,共58页,编辑于2022年,星期三第11页,共58页,编辑于2022年,星期三第12页,共58页,编辑于2022年,星期三各列的意义如下:各列的意义如下:状态状态 指状态栈栈顶项中所包含的指状态栈栈顶项中所包含的可能状态。可能
5、状态。符号符号 指当前扫描到的可能符号。指当前扫描到的可能符号。加工子程序加工子程序 指当前遇到的相应状指当前遇到的相应状态符号配对时编译程序应做的工作。态符号配对时编译程序应做的工作。第13页,共58页,编辑于2022年,星期三 状态改变状态改变 指出在做完相应的编指出在做完相应的编译工作后其状态栈如何改变。译工作后其状态栈如何改变。综上所述,状态矩阵法的编译过程综上所述,状态矩阵法的编译过程是按照存放在内存中的状态表不断地是按照存放在内存中的状态表不断地进行解释执行的。进行解释执行的。第14页,共58页,编辑于2022年,星期三第15页,共58页,编辑于2022年,星期三6.3 词法分析词
6、法分析6.3.1 词法分析的任务词法分析的任务词法分析是编译过程各阶段的基础和词法分析是编译过程各阶段的基础和必要的准备。必要的准备。词法分析的主要任务是从源程序语句词法分析的主要任务是从源程序语句中识别出具有独立意义的语法单位(即语中识别出具有独立意义的语法单位(即语法符号),并且建立一个符号表,用以保法符号),并且建立一个符号表,用以保存各语法符号的属性。存各语法符号的属性。第16页,共58页,编辑于2022年,星期三第17页,共58页,编辑于2022年,星期三表表6.4中的符号最后都变成二进制中的符号最后都变成二进制形式的代码串。形式的代码串。可以将这些通用符号建立一个通可以将这些通用符
7、号建立一个通用符号表,这些符号的代码可用较大用符号表,这些符号的代码可用较大的编号来表示,如表的编号来表示,如表6.5所示。所示。在这种情况下,上述赋值语句经在这种情况下,上述赋值语句经词法分析后可以得到一张符号表如表词法分析后可以得到一张符号表如表6.6所示所示。第18页,共58页,编辑于2022年,星期三第19页,共58页,编辑于2022年,星期三第20页,共58页,编辑于2022年,星期三6.3.2 读字符程序读字符程序读字符程序的任务是从源程序字符串中顺读字符程序的任务是从源程序字符串中顺序读出基本符号,并作一些简单的处理后提供序读出基本符号,并作一些简单的处理后提供给词法分析程序。给
8、词法分析程序。6.3.3 状态矩阵法的词法分析过程状态矩阵法的词法分析过程词法分析程序可以用状态矩阵法来实现。词法分析程序可以用状态矩阵法来实现。第21页,共58页,编辑于2022年,星期三由图由图6.4可以看出,每执行一次这个可以看出,每执行一次这个程序,就顺序从源程序中读出一个语法程序,就顺序从源程序中读出一个语法符号,并且将有关的信息存放在一些工符号,并且将有关的信息存放在一些工作单元中。作单元中。第22页,共58页,编辑于2022年,星期三第23页,共58页,编辑于2022年,星期三下面以下面以FORTRAN语言为例来说明用语言为例来说明用状态矩阵法实现词法分析的过程。为简单状态矩阵法
9、实现词法分析的过程。为简单起见,作如下一些假设:起见,作如下一些假设:不考虑格式语句。不考虑格式语句。不考虑数的翻译。不考虑数的翻译。不考虑以不考虑以E开头的运算符,且运算开头的运算符,且运算符只有两个字母。符只有两个字母。第24页,共58页,编辑于2022年,星期三第25页,共58页,编辑于2022年,星期三第26页,共58页,编辑于2022年,星期三第27页,共58页,编辑于2022年,星期三第28页,共58页,编辑于2022年,星期三第29页,共58页,编辑于2022年,星期三第30页,共58页,编辑于2022年,星期三第31页,共58页,编辑于2022年,星期三6.3.4 算术常数的识
10、别和翻译算术常数的识别和翻译在词法分析的过程中,不仅要识别出在词法分析的过程中,不仅要识别出常数,还需要将常数翻译成统一的格式。常数,还需要将常数翻译成统一的格式。经过词法分析后,所有的实数都分解经过词法分析后,所有的实数都分解成两部分:一部分是有效数字的所有位组成两部分:一部分是有效数字的所有位组成的正整数;另一部分是以成的正整数;另一部分是以10为底的整数为底的整数指数部分。指数部分。第32页,共58页,编辑于2022年,星期三第33页,共58页,编辑于2022年,星期三第34页,共58页,编辑于2022年,星期三第35页,共58页,编辑于2022年,星期三第36页,共58页,编辑于202
11、2年,星期三6.4 中间语言表示中间语言表示“中间语言中间语言”,为能用来表述源程序,为能用来表述源程序并与之等效的一种编码方式。并与之等效的一种编码方式。6.4.1 波兰表示波兰表示一个表达式的波兰表示就是后缀表示,一个表达式的波兰表示就是后缀表示,即表达式中的运算对象写在前面,运算符即表达式中的运算对象写在前面,运算符写在后面。写在后面。第37页,共58页,编辑于2022年,星期三(1)赋值语句)赋值语句 X=e其中其中e为表达式。若将赋值号为表达式。若将赋值号“=”看作是一种双目运算符,则此赋值语看作是一种双目运算符,则此赋值语句的波兰表示定义为:句的波兰表示定义为:X e=第38页,共
12、58页,编辑于2022年,星期三(2)无条件转向语句)无条件转向语句 GOTO n的波兰表示为:的波兰表示为:n GOTO第39页,共58页,编辑于2022年,星期三(3)逻辑条件语句)逻辑条件语句 IF C S的波兰表示为:的波兰表示为:C S LIF第40页,共58页,编辑于2022年,星期三(4)子程序调用语句)子程序调用语句 CALL S(y1,y2,yn)的波兰表示为:的波兰表示为:y1,y2,yn S SUB第41页,共58页,编辑于2022年,星期三(5)维数说明语句)维数说明语句 DIMENSION A(N,M)的波兰表示为:的波兰表示为:N M A DIM第42页,共58页,
13、编辑于2022年,星期三(6)函数子程序段头语句)函数子程序段头语句 FUNCTION F(X1,X2,XN)的波兰表示为:的波兰表示为:X1,X2,XN F DEFF第43页,共58页,编辑于2022年,星期三6.4.2 三元组表示三元组表示波兰表示有一个缺点,就是不便于波兰表示有一个缺点,就是不便于作代码的优化。作代码的优化。三元组表示的一般形式为:三元组表示的一般形式为:k,(o1 o2)第44页,共58页,编辑于2022年,星期三第45页,共58页,编辑于2022年,星期三第46页,共58页,编辑于2022年,星期三第47页,共58页,编辑于2022年,星期三第48页,共58页,编辑于
14、2022年,星期三第49页,共58页,编辑于2022年,星期三第50页,共58页,编辑于2022年,星期三6.5 语法的分析与加工语法的分析与加工 语法分析和加工的主要任务有语法分析和加工的主要任务有以下几项。以下几项。识别出各种类型的语句,并识别出各种类型的语句,并进行语法检查。进行语法检查。语法的加工处理。语法的加工处理。编译程序工作的最后结果是编译程序工作的最后结果是产生目标程序或半目标程序。产生目标程序或半目标程序。第51页,共58页,编辑于2022年,星期三6.5.1 优先矩阵法优先矩阵法优先矩阵法的基本思想如下。优先矩阵法的基本思想如下。将程序设计语言中的所有算符(广将程序设计语言
15、中的所有算符(广义运算符,包括算术运算符、分隔符、义运算符,包括算术运算符、分隔符、拼写定义符及界限符拼写定义符及界限符和和等)设置一个等)设置一个优先关系,而这种优先关系用一张优先优先关系,而这种优先关系用一张优先矩阵表来表示。矩阵表来表示。第52页,共58页,编辑于2022年,星期三第53页,共58页,编辑于2022年,星期三第54页,共58页,编辑于2022年,星期三第55页,共58页,编辑于2022年,星期三6.5.2 优先数法优先数法基于算符的优先数进行编译的方法称基于算符的优先数进行编译的方法称为优先数法。为优先数法。第56页,共58页,编辑于2022年,星期三6.5.3 状态矩阵
16、法状态矩阵法状态矩阵法用表格形式来描述编状态矩阵法用表格形式来描述编译过程,因此条理十分清楚,这是其译过程,因此条理十分清楚,这是其他方法所不及的。他方法所不及的。第57页,共58页,编辑于2022年,星期三6.5.4 递归子程序法递归子程序法递归子程序法的基本思想是:从整个递归子程序法的基本思想是:从整个源程序开始,根据各种语法成分的形成规源程序开始,根据各种语法成分的形成规则从大到小逐层往细分析处理,而对于每则从大到小逐层往细分析处理,而对于每个递归定义的语法成分,都用一个相应的个递归定义的语法成分,都用一个相应的递归子程序来进行处理。递归子程序来进行处理。第58页,共58页,编辑于2022年,星期三