跳转至

编译原理总结

目前我眼中的计算机层次

  • 计算机体系结构(RTL 级设计,流水线,缓存,多发射)
  • ISA(访存模式,中断/异常)
  • 汇编语言(寄存器 + 内存空间)
  • 高级语言(编译器)
  • 操作系统(内核:进程调度,同步与死锁,内存管理:页表,文件系统 应用:桌面系统,浏览器)

编译器各阶段

  1. 词法分析:解析源代码文件,输出记号流。 记号即指一个有独立意义的“单词”。空白字符便一般不包含意义,故可以省略。 这些单词一般可分类为:标识符,常数(整数,浮点数),字符常量,字符串, 操作符,界符,关键字。

  2. 语法分析:分析记号流,输出程序的逻辑结构,如语法分析树(或 AST 树) 一种语言的语法规则可以被文法产生式完全定义。 文法一般包括表达式的定义,各种语句的定义(if, while, for),变量声明, 函数定义等。

  1. 语义分析:分析 AST 树,输出语义错误信息 具体包括:作用域分析,变量类型检查。 进行分析的工具为符号表,故需要对符号表进行组织

  2. 中间代码生成:输出中间代码,更通用的为 IR(中间表示),除了 IR 语言还包含 一些数据结构表示。 作用:分离前端和后端,可以更容易创造一种新语言或移植一种语言到新的架构上。 研究对中间代码的优化的技术而无需考虑具体架构(当然针对架构的优化也是很重要的)

  3. 目标代码生成:输出汇编语言或机器代码