第二章 编译程序基本原理 — 编译过程概述

1. 词法分析

  • 阶段任务: 对源程序从前到后(从左到右)逐字符的扫描,从中识别出一个个”单词”符号。(单词:关键字、标识符、常数、运算符和分割符)。
  • 词法错误:非法字符,关键字或标识符拼写错误。
  • 正规式、有限自动机。

2. 语法分析

  • 阶段任务: 确定整个输入串是否构成一个语法上的正确程序。
  • 语法错误:语法结构出错,if 、endif不匹配;缺分号;
  • 语言的语法规则。

3. 语义分析

  • 阶段任务:进行类型分析和检查;分析各词法结构的含义;特指静态语义。
  • 语义错误:死循环,0除数,其他逻辑出错。

4. 中间代码生成(可无)

  • 根据语义分析的输出生成中间代码;

5. 代码优化(可无)

  • 因为中间代码的生成是机械的、按固定模式进行的,所以在时间和空间上有较大的浪费。要生成高效的代码就得进行优化。
  • 优化一般建立在对程序的控制流和数据流分析的基础之上,与具体的机器无关。可在中间代码生成或目标代码生成阶段进行。

6. 目标代码生成

  • 把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码。此阶段与机器密切相关。

7. 符号表管理

  • 符号表的作用是记录源程序中各个符号的必要信息。
  • 符号表的建立可以在词法分析、语法分析、语义分析阶段

8. 出错处理

  • 在逻辑上分为前端和后端。前端(包括从词法分析到中间代码生成),后端(中间代码优化和目标代码优化)
  • 以中间代码为分水岭,把编译器分为与机器有关的部分和与机器无关的部分。

猜你喜欢

转载自blog.csdn.net/qq_40120946/article/details/108037236