编译原理笔记——第一章

  1. 编译器有两个部分组成——分析部分和综合部分
    1.1 分析部分把源程序分解为多个组成要素,并在这些要素上加上语法结构,然后,它使用这个结构来创建该源程序的一个中间表示。分析部分会收集有关源程序的信息,并把信息存放在一个称为符号表的数据结构中。
    1.2 分析部分是编译器的前端,综合部分是编译器的后端
  2. 编译器结构
    2.1 词法分析(lexical analysis或scanning):读入组成源程序的字符流,并且将它们组织成为有意义的词素的序列,对于每个词素,词法分析器产生的词法单元作为输出。在这个词法单元中,第一个分量token-name是一个由语法分析步骤使用的抽象符号,而第二个分量attribute-value指向符号表中关于这个词法单元的条目。符号表条目的信息会被语义分析和代码生成步骤使用。
    例如:position=initial+rate*60,这个赋值语句会经过如下过程的翻译:
    编译原理笔记——第一章_第1张图片
    2.2 语法分析(syntax analysis或parsing):使用有词法分析器生成的各个词法单元的第一个分量来创建树形的中间表示。
    2.3 语义分析(semantic analysis):使用语法树和符号表中的信息来检查源程序是否和语言定义的语义不一致,一个重要部分是进行类型检查
    2.4 中间代码生成:在源程序的语法分析和语义分析完成之后,很多编译器生成一个明确的低级的或类机器语言的中间表示,该中间表示应该具有两个重要的性质:易于生成,且能够轻松地翻译为目标机器上的语言
    2.5 代码优化
    2.6 代码生成:以源程序的中间表示形式作为输入,并把它映射到目标语言。编译器在中间代码生成或代码生成阶段做出有关存储分配的决定
    2.7 符号表管理:记录源程序中使用的变量的名字,并收集和每个名字的各种属性(名字的存储分配,类型和作用域等)有关的信息
    3 其他
    3.1 环境是一个从名字到存储位置的映射。因为变量就是值内存位置(即C语言的左值),我们还可以换一种方法,把环境定义为从名字到变量的映射
    3.2 状态是从一个内存位置到它们的值的映射,以C语言的术语来说,及状态把左值映射为它们相应的右值

你可能感兴趣的:(编译原理笔记)