编译程序概论

1294 字
6 分钟
编译程序概论
Warning

含AI生成内容

第一章 编译程序概论 · 知识点详解#

🔴 核心(必背/必算) 🟡 理解(会说清) 🟢 了解(有印象) 本章性质:背概念保底,约 10 分,简答+选择为主。


一、翻译程序、编译程序、解释程序#

🟡 翻译程序(Translator)#

把一种语言程序(源语言程序)转换成另一种功能等价的语言程序(目标语言程序)的程序。它是一个总称,编译程序和解释程序都属于翻译程序。

🟡 编译程序(Compiler)#

一种特殊的翻译程序,其源程序是高级语言目标程序是低级语言(汇编语言或机器语言)。

  • 特点:一次性把整个源程序翻译成目标程序,之后可反复执行目标程序。
  • 优点:目标程序执行速度快
  • 例子:C、TC 等高级语言编译系统。

🟡 解释程序(Interpreter)#

也是翻译程序,但与编译程序的根本区别在于:

  • 逐句翻译、边翻译边执行,通常不生成目标程序
  • 优点:便于调试、交互性好、可移植。
  • 缺点:执行速度慢(每次执行都要重新翻译)。
  • 例子:BASIC、早期 JAVA 的解释执行等。

编译 vs 解释 一句话记忆:编译”先翻完再跑、生成目标程序、快”;解释”边翻边跑、不生成目标程序、慢”。

🟢 高级语言的完整处理过程#

源程序 ──预处理程序──▶ 源程序 ──编译程序──▶ 汇编语言/目标语言
──汇编程序──▶ 可重定位目标文件(机器码)
──装配/连接程序──▶ 绝对机器代码(可执行)

二、编译过程的六个阶段(🔴 必背核心)#

词法分析 → 语法分析 → 语义分析 → 中间代码生成 → 代码优化 → 目标代码生成

配合两个贯穿始终的辅助模块:表格(符号表)管理程序出错处理程序

1. 词法分析(Lexical Analysis)#

  • 任务:扫描源程序字符串,识别出一个个单词符号(token)。
  • 输入:源程序(字符流)。
  • 输出:单词符号序列(二元组)。
  • 例:main() → 保留字 main、左括号 (、右括号 )、左花括号 {……

2. 语法分析(Syntax Analysis)#

  • 任务:根据语法规则,把单词序列组合成语法短语(如表达式、语句),判断语法是否正确。
  • 输入:单词符号序列。
  • 输出:语法树 / 语法单位。

3. 语义分析(Semantic Analysis)#

  • 任务:对语法单位进行语义审查——类型检查、类型匹配、收集类型信息,报告语义错误。

4. 中间代码生成(Intermediate Code Generation)#

  • 任务:把源程序转换成一种结构简单、含义明确、易生成、易译成目标代码的中间形式。
  • 常用形式四元式 (算符, 运算对象1, 运算对象2, 结果);此外还有三元式、逆波兰式等。

5. 代码优化(Code Optimization)#

  • 任务:对中间代码或目标代码作等价变换,使生成代码运行更快、占用空间更小

6. 目标代码生成(Target Code Generation)#

  • 任务:把中间代码/语义分析结果翻译成特定机器上的绝对指令、可重定位指令或汇编代码。

三、编译程序的结构与组合#

🟡 前端(Front End) / 后端(Back End)#

  • 前端:与源语言有关、与目标机无关的部分——对应第 1~4 阶段(词法、语法、语义、中间代码生成)。
  • 后端:与目标机有关的部分——对应第 6 阶段(目标代码生成)。
  • 代码优化(第 5 阶段):置于前端或后端均可

🟡 前后端组合的两大用途#

  1. 同一前端 + 不同后端 → 同一源语言在不同机器上的编译程序(换机器只需换后端)。
  2. 不同前端生成同一中间语言 + 共用后端 → 同一机器上多种语言的编译程序(加语言只需加前端)。

🟡 遍 / 趟(Pass)#

  • 定义:对源程序或其中间结果从头到尾扫描一次,称为一遍。每遍完成一个或几个阶段的工作。
  • 一个编译程序可由一遍或多遍完成,分遍的主要依据是源语言与目标机的特征
  • 多遍优缺点
    • 优点:结构清晰、功能单一、节省内存
    • 缺点:增加 I/O 次数、降低效率

⚠️ 易错点汇总#

  • 汇编语言翻译成机器码的是 汇编器(Assembler),不是编译器。
  • 编译方式生成目标程序、执行快;解释方式不生成目标程序、便于调试但慢。
  • 中间代码最常见形式是四元式,格式 (算符, 对象1, 对象2, 结果)
  • 符号表管理和出错处理不是某一个阶段,而是贯穿编译全过程的辅助模块。

📝 常考题型#

  • 简答(高频):编译程序分哪几个阶段?各阶段的功能是什么?
  • 填空/选择:编译与解释的根本区别;分”遍”的优缺点;符号表的作用;前端/后端的划分。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

编译程序概论
https://lingluoa.icu/posts/编译原理/知识点-第1章-编译程序概论/
作者
lingluoa
发布于
2026-07-04
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
lingluoa
Hello, I'm lingluoa.
公告
欢迎来到我的博客!不定期更新中。
文章目录
标签
站点统计
文章
53
分类
9
标签
75
总字数
175,771
运行时长
0
最后活动
0 天前
站点信息
构建平台
ESA Pages
博客版本
Firefly v6.15.6
文章许可
CC BY-NC-SA 4.0