编译原理学习小结_0

匿名 (未验证) 提交于 2019-12-03 00:19:01
编译器简介
编译器是一个翻译程序。将一种程序翻译成另一种语言(如汇编或其他语言)。作为翻译的重要组成部分,编译器能够向用户报告编译的源程序的出现的错误。
编译器分类
  1. 一遍编译器
  2. 多遍编译器
  3. 装入并执行编译器
  4. 调试编译器
  5. 优化编译器

  • 编译器模型――分析-综合模型
编译有两部分组成:分析和综合。分析部分将源程序切分成一些基本快并形成源程序的中间表示,综合部分将源程序的中间表示转换为所需的目标程序。

  • 编译器的前驱和后缀
  • 源程序分析
三个阶段:1、线性分析 2、层次分析 3、语义分析
  1. 词法分析:线性分析被称为词法分析或扫描。此过程将记号的空格将被删除(提取元素)。
  2. 语法分析:又被称为层次分析。将程序分成不同结构,来实现语法的分析(如分辨表达式和语句)。实现程序的层次结构通常是通过递归来表达的。
  3. 语义分析:语义分析阶段检测源程序的语义错误,并收集代码生成阶段要用到的类型信息。语义分析的重要组成部分是类型检查。类型检查负责检验每个操作符的操作数是否满足源语言的说明。

  • 编译器的各阶段
  • 符号表管理
符号表是一个数据结构。每个标识符在符号表都有一条记录,记录每个域对应于标识符的一个属性(存储位置、类型、作用域)。

  • 各分析阶段
词法分析器:此阶段将源码去掉空格,生成字符流,对每个标记符建立记号。
语法分析器:将源码建立层次。
语义分析器:对错误进行检查(其实前三个过程都有检查源码错误,其中语法和语义分析器阶段能将大多数错误都指出。),对类型转换时会自动转换(如int 自动转换double).
中间代码生成器:将计算过程存储在每不同地方。
代码优化器:将中间代码优化。
代码生成器:生成目标代码。


  • 编译器的伙伴
    • 预处理器
  1. 宏处理:用户在源程序中定义宏。宏定义和宏引用。
  2. 文件包含:预编译器可以将头文件包含到程序正文中。
  3. “理性”预处理器:将现代控制流和数据结构化机制添加到比较老式的语言中。
  4. 语言扩充:通过大量的内部宏定义来增强语言的能力。

  • 汇编器
将汇编代码转换成机器代码

  • 两遍汇编
最简单的汇编器对输入汇编程序文件进行两遍扫描,每遍读文件一次。
第一遍将所有标识符(操作数)都扫描出来并存入符号表(汇编器的符号表与编译器的是分开的);
第二遍汇编器再扫描一遍,将每个操作符翻译成机器代码(可重定位)

  • 装配器和链接编辑器
装配器完成程序的装入和连接。



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!