编译器执行语法分析会输出一个抽象语法树(AST)。

抽象语法树辅助编译器进行语义分析。

  • 知识点:词法分析、语法分析、语义分析

词法分析:编译过程的第一个阶段,一个字符一个字符的读入,根据构词规则识别单词。

语法分析:编译过程的一个逻辑阶段,在词法分析的基础上,将单词序列组合成各种语法短语(语法结构)。

语义分析:编译过程的一个逻辑阶段,对结构上正确的源程序进行上下文有关性质审查、类型审查1

语义分析与上下文有关、语法分析与上下文无关。

静态单赋值(SSA)主要作用是对代码进行优化。

在编译成中间代码过程中,每个变量只会被赋值一次。

  • 静态单赋值

编译器的前后端。

前端分析词法、语法、语义生成中间代码。

后端完成对目标代码的生成和优化,将中间代码翻译成二进制机器码。

  • 中间代码

中间语言(中间代码)是一种面向语法,易于翻译成目标程序源程序的等效内部表示代码。

 词法分析

为了能让计算机理解我们的源代码,第一件事情就是将字符串分组

词法分析就是将字符序列转换为标记(token)序列的过程。

 通过使用lex生成词法分析器,lex生成的代码能够将一个文件中的字符分解成Token序列。

lex核心函数使用有限自动机(DFA)的程序结构来分析输入的字符流。

lex根据定义的规则生成的词法分析器lexer通过正则匹配的方式将机器原本很难理解的字符串进行分解成很多的Token。

  • 有限自动机(DFA)

  • 正则匹配

有限自动机是用来识别正规式的一个非常有用的工具,使用有限自动机来构造词法分析程序这也是一种比较好的途径。

 

 

 

 

 

 

 

 

 

 

 

引用转载(如有侵权请联系删除):

资料引用1

Go 语言编译过程概述 | Go 语言设计与实现 (draveness.me)