一、概述

编译程序

高级语言程序 \(\rightarrow\) 编译程序 \(\rightarrow\) 低级语言程序(汇编语言或者机器语言)

解释程序

源程序 \(\rightarrow\) 解释程序 \(\rightarrow\) 输出

编译过程(5个阶段)

1. 词法分析
  • 任务:输入源程序,对字符串扫描分解,识别出单词符号
  • 依据原则:构词规则
  • 描述工具:有限自动机
2. 语法分析
  • 任务:在词法分析基础上,把单词符号串分解成各类语法单位
  • 依据原则:语法规则
  • 描述工具:上下文无关文法
3. 语义分析与中间代码生成
  • 任务:对各类语法单位按语言的语义进行初步翻译
  • 依据原则:语义规则
  • 描述工具:属性文法
4. 代码优化
  • 任务:对中间代码加工变换,提高目标代码的时空效率
  • 依据原则:程序等价变换规则
5. 目标代码生成
  • 任务:将中间代码变换成特定机器上的目标代码

目标代码三种形式

  1. 汇编指令代码:需要进行汇编
  2. 绝对指令代码:可直接运行
  3. 可重定位指令代码:需要链接

编译程序的结构

编译的遍

对源程序或源程序的中间结果从头到尾扫描一次

  • 一遍扫描:占用内存空间大,但编译速度快
  • 多遍扫描:程序结构清晰,目标代码质量较高,但编译速度较慢

编译的前端

与源语言有关,词法分析、语法分析、语义分析与中间代码生成、与硬件无关的优化

编译的后端

与目标机器有关,与硬件有关的优化、目标代码生成

\(\large {Tips:}\)

  • 编译程序绝大部分时间花在符号表管理

  • 中间代码生成代码优化部分不是每个编译程序都必需的

posted @ 2023-05-03 01:21  风雨zzm  阅读(158)  评论(0编辑  收藏  举报