编译程序总体结构 您所在的位置:网站首页 程序总体设计 编译程序总体结构

编译程序总体结构

2023-09-05 08:54| 来源: 网络整理| 查看: 265

编译程序总体结构

文章目录 编译程序总体结构1、词法分析2、语法分析3、语义分析4、中间代码生成5、代码优化与机器无关的优化与机器有关的优化 6、目标代码生成7、表格管理8、错误处理9、模块分类

在这里插入图片描述

1、词法分析

在这里插入图片描述 词法分析由词法分析器(Lexical Analyzer)完 成,词法分析器又称为扫描器(Scanner) 词法分析器从左到右扫描组成源程序的字符 串,并将其转换成单词(记号—token)串;同 时要:查词法错误,进行标识符登记——符 号表管理。 输入:字符串 输出:(种别码,属性值)——序对

属性值——token的机内表示 2、语法分析

语法分析由语法分析器(Syntax Analyzer)完成,语 法分析器又叫Parser。

功能:

Parser实现“组词成句” :将词组成各类语法成分:表达式、因子、项,语句,子程序…构造分析树指出语法错误指导翻译

输入:token序列 输出:语法成分

在这里插入图片描述

3、语义分析

语义分析(semantic analysis)一般和语法 分析同时进行,称为语法制导翻译 (syntax-directed translation)

功能:分析由语法分析器识别出来的语 法成分的语义

获取标识符的属性:类型、作用域等语义检查:运算的合法性、取值范围等子程序的静态绑定:代码的相对地址变量的静态绑定:数据的相对地址 4、中间代码生成

中间代码(intermediate Code) 波兰表示问题——Lukasiewicz1929年发明

中缀表示(Infix notation):(a+①b)*(-c+②d)+③e/f波兰表示(Polish / Prefix / Parenthesis-free / Lukasiewicznotation) ——也就是前缀表示 +③*+①a b+②@cd/ef 逆波兰表示(Reverse Polish / Suffix / Postfix notation) ——也就是后缀表示 a b +①c@ d +②*ef/+ ③运算顺序从左向右

中间代码的特点:

简单规范与机器无关易于优化与转换 5、代码优化

代码优化(optimization)是指对中间代码进 行优化处理,使程序运行能够尽量节省存 储空间,更有效地利用机器资源,使得程 序的运行速度更快,效率更高。当然这种 优化变换必须是等价的。

与机器无关的优化与机器有关的优化 与机器无关的优化

局部优化 :

常量合并:常数运算在编译期间完成,如8+9*4公共子表达式的提取:在基本块内进行的

循环优化:

强度削减 ==>用较快的操作代替较慢的操作代码外提 ==>将循环不变计算移出循环 与机器有关的优化

寄存器的利用

将常用量放入寄存器,以减少访问内存的次数

体系结构

MIMD、SIMD、SPMD、向量机、流水机

存储策略

根据算法访存的要求安排:Cache、并行存储体 系——减少访问冲突

任务划分

按运行的算法及体系结构,划分子任务(MPMD) 6、目标代码生成

将中间代码转换成目标机上的机器指令代码 或汇编代码

确定源语言的各种语法成分的目标代码结构 (机器指令组/汇编语句组)制定从中间代码到目标代码的翻译策略或算法

目标代码的形式

具有绝对地址的机器指令汇编语言形式的目标程序模块结构的机器指令(需要链接程序) 7、表格管理

管理各种符号表(常数、标号、变量、过程、 结构……),查、填(登记、查找)源程序 中出现的符号和编译程序生成的符号,为 编译的各个阶段提供信息。

辅助语法检查、语义检查完成静态绑定、管理编译过程

Hash表、链表等各种表的查、填技术

“数据结构与算法”课程的应用

8、错误处理

进行各种错误的检查、报告、纠正,以及相 应的续编译处理(如:错误的定位与局部化) 词法:拼写…… 语法:语句结构、表达式结构…… 语义:类型不匹配、参数不匹配……

9、模块分类

分析:词法分析、语法分析、语义分析 综合:中间代码生成、代码优化、目标 代码生成 辅助:符号表管理、出错处理 8项功能对应8个模块



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有