编译器是一个程序, 将一种语言编写的程序翻译成与之等价的另一种语言编写的程序
编 译 { 分 析 : 将 源 程 序 切 分 成 一 些 基 本 块 , 并 形 成 源 程 序 的 中 间 表 示 综 合 : 将 源 程 序 的 中 间 表 示 转 换 为 所 需 的 目 标 程 序 编译\begin{cases} 分析: 将源程序切分成一些基本块,并形成源程序的中间表示 \\ 综合: 将源程序的中间表示转换为所需的目标程序 \end{cases} 编译{分析:将源程序切分成一些基本块,并形成源程序的中间表示综合:将源程序的中间表示转换为所需的目标程序
1. 源程序分析
1. 词法分析: 也叫线性分析
或扫描
将源程序扫描, 并将其中的运算符和操作数记录为一个个单独的符号
2. 语法分析:也叫层次分析
(parsing 或 syntax analysis)
语法分析阶段将词法分析得到的符号组织为一个分析树
程序的层次规则通常是通过递归规则来表达的, 即程序的结构是
递归
地进行定义
3. 语义分析
语义分析阶段检测源程序中的语义错误, 并收集代码生成阶段需要的类型信息.
语义分析重要的组成部分是类型检查
2. 编译器的各阶段
符号表管理
和错误检测与报告
是编译器六个阶段都要涉及的, 因此也可以算入编译器的阶段之一