编译原理1.2-编译过程阶段.ppt_第1页
编译原理1.2-编译过程阶段.ppt_第2页
编译原理1.2-编译过程阶段.ppt_第3页
编译原理1.2-编译过程阶段.ppt_第4页
编译原理1.2-编译过程阶段.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.2 编译过程概述,逻辑阶段 Phases steps,源程序,目标程序,词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成,表格管理,出错处理,例: position : initial rate*10,以下从源程序在不同阶段所被转换成的表示形式来介绍各个阶段的任务,词法分析 Lexical analysis, Scanning,字符流 单词流 从左到右扫描,识别出单词,单词, 单词符号, 符号, Token,什么是单词 逻辑上紧密相连的一组字符,这些字符具有集体含义。 sequences of characters having collective meaning. 五类单词 标识符 保留字(关 键字、基本字) 常量(常数) 运算符(算符) 界符,position : initial rate*10,单词类型 单词值 标识符(1) position 算符(赋值号) : 标识符(2) initial 算符(加号) 标识符(3) rate 算符(乘号) * 整数 10 界符(分号) ;,字符流 单词流,position : initial rate*10; id1 := id2 + id3 *10 ,词法分析程序的其他功能,滤掉注释和空白 提供出错的行号标记 宏处理,词法分析中的错误,9position := initial rate*60; 9, position, := := ,词法分析阶段,不会显示错误,关于词法分析,词法分析程序的自动生成工具LEX 词法分析的依据 词法规则 描述词法规则的工具 正规式 有限自动机,2) 语法分析 Syntax analysis, Parsing,单词流 - 语法短语 检查源程序的结构是否符合语法规则,语法短语, 语法单位,表达式, 语句, 函数, 程序段, 程序,position : initial rate*10; id1 := id2 + id3 *10,分析树 Parse Tree,id1 := id2 + id3 *10,语法树 Syntax Tree,词法分析和语法分析的界限,词法结构 线性分析 (Linear Analysis) 不需要递归 语法结构 层次分析 (Hierarchical Analysis) 需要递归,关于语法分析,语法分析程序的自动生成工具YACC 语法分析的依据语法规则 描述语法规则的工具 文法 BNF范式(BACKUS-NAUR FORM ),3) 语义分析 Semantic analysis,对结构上正确的源程序审查有无语义错误 静态语义 类型匹配审查 类型转换 动态语义(运行语义,执行语义) 例如数组越界、存储空间越界,语法正确但语义错误 类型不匹配,例1: int arr2, b; b = arr * 10;,例2: Program p(input,output); Var rate:real; procedure initial; position := initial + rate * 10,例3: int arr2,c; c = arr1 * 10 ; 变量没有声明,举例: 符合语法规则但不符合语义规则,使用没有声明的变量 给一个过程名赋值 调用函数时参数类型不合适 实数用作数组下标 参加运算的两个变量类型不匹配 ,Var rate:real; position := initial + rate * 10,插入语义结点,关于语义分析,语义分析程序的自动生成工具 无 语义分析的依据 - 语义规则 描述语义规则的工具 属性文法,4) 中间代码生成阶段 Intermediate Code Generation,中间语言, 中间表示 生成原则 介于高级语言和低级语言之间 容易生成 容易将它翻译成目标代码 与目标机无关,便于优化、移植 四元式、三元式、树结构 Pcode, Ccode, Bytecode,四元式,( 运算符,运算对象1,运算对象2,结果 ) ( * , a , b , c ) c = a*b,position : initial rate*10; id1:= id2+ id3 *10 id1:= id2+ id3 *inttoreal(10),id1:= id2+ id3 *inttoreal(10),(op, arg1, arg2, result ),问题:运算顺序是如何决定的?,t1、t2、t3为临时工作单元,也可以将四元式直接写成赋值的语句的形式 例:a = b * c + b * d 的四元式序列为: (1) t1 = b * c (2) t2 = b * d (3) t3 = t1 + t2 (4) a = t3,例: if ( a b if t1 goto L t2 = a c a = t2 L : t3 = b * c c = t3,5)代码优化 Code Optimization,中间代码优化 目标代码优化,源语句id1:= id2+ id3 *inttoreal(10)的代码序列,经优化得到优化的代码序列,6)目标代码生成,把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码 涉及到的内容 : 硬件系统功能部件的运用 机器指令的选择 各种数据类型变量的存储空间分配 关键问题是变量的寄存器分配,7) 表格管理 8) 出错处理,例: PL/0 语言 (PASCAL语言的子集),CONST A=35, B=49; VAR C, D, E; PROCEDURE P; VAR G;,positi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论