平台,很重要的原因就是拥有很强的定制能力,比如流程定制、界面定制、业务逻辑定制,等等。而这些定制能力,依托的就是编译技术。
为编程提供更高的抽象层次,从来就是编译技术的职责。
Java 编译器(javac)、Java 的 JIT 编译器(Graal)、Python 编译器(CPython)、JavaScript 编译器(V8)、Julia 语言的编译器、Go 语言的编译器(gc),以及 MySQL 的编译器,Erlang 的编译器。
每个节点附带的语义规则。
语义分析获得的一些信息(引用消解信息、类型信息等),会附加到 AST 上。这样的 AST 叫做带有标注信息的 AST(Annotated AST/Decorated AST),用于更全面地反映源代码的含义。
你可以深度优先地遍历 AST,并且一边遍历,一边执行语法规则。那么这个遍历过程,就是解释执行代码的过程。你相当于写了一个基于 AST 的解释器。
引用消解需要在上下文中查找某个标识符的定义与引用的关系,所以我们现在可以回答前面的问题了,语义分析的重要特点,就是做上下文相关的分析。
语义分析阶段,编译器会做语义理解和语义检查这两方面的工作.
中间代码(Intermediate Representation)中间代码(IR),是处于源代码和目标代码之间的一种表示形式。我们倾向于使用 IR 有两个原因
。第一个原因,是很多解释型的语言,可以直接执行 IR&#x