Skip to content

Latest commit

 

History

History
26 lines (14 loc) · 1.28 KB

笔记.md

File metadata and controls

26 lines (14 loc) · 1.28 KB

编译原理

编译器工作流

  • 解析(Parsing): 解析是将最初始的代码转换为一种更加抽象的表示(即AST)
  • 转换(Transformation): 转换将对这个抽象的表示做一些处理, 让它能做到编译器期望它做到的事情
  • 代码生成(Code generation): 接收处理后的代码表示,然后把它转换成新的代码

解析(Parsing)

解析一般来说回分成两个阶段: 词法分析和语法分析

  • 测发分析接受原始代码,然后把它分割成一些称之为token的东西,这个过程是在词法分析器中完成的
  • Token是一个数组,由一些代码语句的碎片组成。他们可以是数字,标签,标点符号,远算符或者其他任何东西
  • 语法分析接收之前生成的Token,把他们转换成一种抽象的表示,这种抽象的表示描述了代码语句中的每一个片段以及他们之间的关系。这被称之为中间表示或抽象语法树
  • 抽象语法树是一个嵌套程度很深的对象,用一种更容易处理的方式表示了代码本身,也能给我们更多信息

有限状态机

  • 每一个状态都是一个机器,每个机器都可以接收输入和计算输出
  • 机器本身没有状态,每一个机器会根据输入决定下一个状态