编译原理学习——《编译原理》龙书读书笔记(一)

第 1 章 引论

目标语言翻译成一种能被计算机执行的形式,完成这一过程的软件系统称为编译器(compiler)。

本书介绍的是设计和实现编译器的方法。

本章内容

  1. 介绍语言翻译器的不同形式
  2. 在高层次(概念层次)概述一个典型编译器的结构
  3. 讨论程序设计语言和硬件体系结构的发展趋势
  4. 编译器理论和计算机科学理论的关系的一些事实
  5. 给出一些在编译器设计领域以外的应用

语言处理器

编译器,和解释器(Interpreter)是常见的两种形式。

主要区别:解释器并不同编译器一样将源程序编译成目标程序,而是对源语句(结合用户的输入)逐条解释执行。

预处理器,除了编译器之外,创建一个可执行的目标程序还需要一些其他程序,比如将程序员写程序时划分的多个模块聚合在一起的任务,以及将称为(micro)展开成源语言格式的任务,有时就由预处理器完成。

一个编译器的结构

通过编译器,源程序映射到目标语言程序(语义上等价),映射过程大致分为分析综合两部分。

  1. 分析(analysis)

    把源程序分解为多个组成要素,加上语法结构,创建中间表示。

    检测是否符合源程序语言语义并给出用户相应提示,同时收集源程序的一些信息,存放在一个称为符号表(symbol table)的数据结构中,然后一并传送给综合部分。

  2. 综合(synthesis)

    根据分析得到的中间表示和符号表中的信息来构造用户期待的目标程序。

常称分析部分为编译器的前端(front end),而综合部份为编译器的后端(back end)。

编译过程可以拆成一组过程(phase)

词法分析

词法分析(lexical analysis)或称为扫描(scanning)。读入源程序字符流,拆成词素序列,词法单元和一个符号表。

语法分析

语法分析(syntax analysis)或称为解析(parsing)根据词法单元的第一个分量创造一个树形的中间表示,一种常用的表示方法时语法树(syntax tree)。

语义分析

语义分析器(sermantic analyzer)使用语法树和符号表中的信息来检查源程序是否和语言定义的语义一致。同时收集类型信息,在随后的中间代码生成过程中使用。

一个重要部分时类型检查(type checking),同时实现(如果允许的话)自动类型转换。

中间代码生成