文档详情

ch5_new自顶向下语法分析方法.ppt

发布:2017-04-20约1.77千字共35页下载文档
文本预览下载声明
; 名 称 作 者 出版社 出版时间 编译原理 何炎祥 华中理工大学 2000.10 编译原理 陈火旺等 国防工业出版社 2000.1 编译原理 蒋立源 西北工业大学 1999.9 ;第一章 编译程序概论;§1.1 什么是编译程序;源程序;编译程序(编译器compiler);汇编程序(Assembler);源程序的加工过程;源程序;编译程序的发展历史;§1.2 编译过程和编译程序的结构;§1.2.1 编译过程概述;对于PASCAL程序段 begin var sum,first,count:real; sum:=first+count*10 end. 通过词法分析,可识别出如下的单词符号序列: 基本字: begin,var,real,end 标识符:sum,first,count 整数:10 界符:。 逗号:, 冒号:: 分号:; 赋值号::= 加号:+ 乘号:* 机内码为:id1:=id2+id3*10;2、语法分析;对应的语法树如下:;定义表达式的规则: 任何标识符是表达式。 任何常数(整常数、实常数)是表达式。 若表达式1和表达式2都是表达式,那么 · 表达式1+表达式2 · 表达式1*表达式2 ·(表达式1) 都是表达式。;语句的表示: 标识符:=表达式 是语句。 while (表达式) do 语句 和 if (表达式) then 语句 else 语句 都是语句。;3、语义分析(1);3、语义分析(2);4、中间代码产生;5、代码优化;6、目标代码生成;( * id3 10.0 t1 ) ( + id2 t1 id1 );§1.2.2 编译程序的结构;表格与表格管理 用途:登记源程序的各类信息和编译程序各阶段的进展情况,如符号表。 管理:构造、查找、或更新。 出错处理 任务:发现并指出源程序中错误的性质和位置; 自动校正错误。;遍(pass): 对源程序或源程序的中间结果从头至尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序的处理过程称为一遍。 可以把一个阶段分为若干遍,也可以把多个阶段合为一遍,通常有一遍和多遍编译程序。; 词法分析→语法分析→语义分析与中间代码生成→优化→目标代码生成 ;一个语言的解释程序是这样的程序: 它以该语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。;29;§1.3.2 编译技术和软件工具(1);语言程序的测试工具:静态分析器与动态测试器 静态分析器 在不运行程序的情况下对源程序进行静态地分析,以发现程序中潜在的错误或异常。对源程序进行语法分析并制定相应表格,检查变量定值与引用的关系。 例如:某变量未被赋值就被引用;变量定值后未被引用;多余的源代码等.;语言程序的测试工具:静态分析器与动态测试器 动态测试器 --在源程序的适当位置插入某些信息,并用测试用例记录(显示语句或函数)程序运行时的实际路径.将运行结果与期望结果进行比较分析,帮助编程人员查找问题. ;§ 1.4 程序设计语言范型(1);函数式语言 注重程序所表示的功能,而不是一个语句接一个语句地执行。 程序的开发过程是从前面已有的函数出发构造出更复杂的函数,对初始数据集进行操作,直至最后形成的函数可以用于从初始数据计算出最终结果。 语法形式为: functionn(…function2(function1(data))…) 例如: LISP;基于规则(逻辑)的语言 检查条件,满足时则执行适当的动作。 语法形式: 条件 1-动作 1 条件 2-动作 2 …… 条件 n-动作 n 例如:PROLOG 面向对象语言 提供抽象数据类型,支持封装性、继承性和多态性. 例如:Ada、C++、Java
显示全部
相似文档