第1章编译原理详解.ppt
文本预览下载声明
* * * 语义分析 句子的结构理解了,扑捉它的“含义” 如:杰克说杰瑞把他的作业落在了家里。 “他的”是谁的? 又:杰克说杰克把他的作业落在了家里。 几个杰克? 语义分析 杰克把她的作业落在了家里。 (杰克是男生)“杰克”和“她的”不一致。 “杰克”和“他的”才匹配 语义分析(语言的规定和实现) int arr[2], c; c = arr * 10; “中间代码”是一种含义明确、便于处理的记号系统。 如:三元式、四元式、逆波兰式。 例:四元式(运算符,第一运算量,第二运算量,结果) x:= a*b+c (*, a, b, T1) (+,T1, c, T2 ) (:=, T2 , -, x) 4 中间代码 id1:= id2 + id3 * 60 (1) (inttoreal, 60 - t1 ) (2) (* , id3 t1 t2 ) (3) (+ , id2 t2 t3 ) (4) (:= , t3 - id1 ) 5 代码优化 任务 所做转换 依据 程序等价变换规则 主要理论基础 数据流方程 中间代码 中间代码(优化后) 对于代码(主要是中间代码)进行加工变换,以期能够产生更为高效(省时间和空间)的目标代码 。 代码优化 id1:= id2 + id3 * 60 (1) (inttoreal 60 - t1 ) (2) ( * id3 t1 t2 ) (3) ( + id2 t2 t3 ) (4) ( := t3 - id1 ) 变换 ? (1) ( * id3 60.0 t1 ) ( 2)( + id2 t1 id1 ) 6 目标代码生成 任务 所做转换 依据 硬件体系结构、指令系统 中间代码 目标代码 将中间代码变换成特定机器上的低级语言代码 目标代码形式 绝对指令、可重定位指令、汇编指令 (* , id3 60.0 t1 ) (+ , id2 t1 id1 ) movf id3,R2 mulf #60.0,R2 movf id2,R1 addf R2,R1 movf R1,id1 6.目标代码生成 按逻辑功能不同,可将编译过程划分为五个基本阶段,与此 相对应,我们将实现整个编译过程的编译程序划分为五个 逻辑阶段(即五个逻辑子过程)。 目标代码 生成程序 代码优化 程序 语义分析 生成中间 代码 语法分析 程序 词法分析 程序 编译过程小结 S.P O.P 1.3 编译程序的组织及开发 编译程序是一个非常复杂的软件系统,虽然编译理 论和技术不断发展,开发周期缩短,但研制仍需大量时 间。追求目标过程自动化。 根据编译程序各部分功能,将编译程序分成前端和后端 前端:通常将与源程序有关的编译部分称为前端。 词法分析、语法分析、语义分析、中间代码生成 ---分析部分 特点:与源语言有关 后端:与目标机有关的部分称为后端。 代码优化、代码生成 ---综合部分 特点:与目标机器有关 编译程序的前端和后端 .java java源程序文件 .class 二进制字节码文件 Java虚拟机(JVM) 本地计算机系统 编译 同一前端+不同后端 ? 不同机器构成同一语言的编译程序 例如Java语言 同一前端+不同后端 ? 不同机器构成同一语言的编译程序 例如.NET框架 不同前端+同一后端 ? 同一机器生成几个语言的编译程序 例如GCC 第一遍 第二遍 …… S.P 中间形式1 S.P 中间形式2 C2 C1 S.P O.P 对源程序(包括源程序中间形式)从头到尾扫描一次,并做有关的加工处理 ,生成新的源程序中间形式或目标程序,通常称之为一遍。 遍 上一遍的结果是下一遍的输入,最后一遍生成目标程序。 一遍扫描即可
显示全部