第四章-语法分析之认识树节点

Posted extjs4

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四章-语法分析之认识树节点相关的知识,希望对你有一定的参考价值。

 

 

上一章我们得到了Token序列,而语法分析就是根据Token序列构造抽象语法树的过程,抽象语法树是一种用来描述程序代码语法 结构的树形表示方式,这种结构化的表示方式将为后面语义分析、代码生成阶段提供极大的便利。语法树的每一个节点都代表了程序代码中的一个语法结构,如包、类型、修饰符、运算符、接口、返回值甚至代码注释等都可以是一个语法结构。Javac中,每个语法树节点都对应着一个具体的实现类,这一章将重点介绍抽象语法树上的各个语法树节点,只有认清了抽象语法树上的构造节点才能根据根据一定规则将token序列转换为抽象语法树。

 

 

由于语法树中涉及到的节点众多,我们可以大概将这些节点归纳为如下3类:

(1)定义及声明 例如编译单元的定义、方法的定义、import导入包的声明等

(2)语句 例如一些流程控制的if语句、while语句、do-while语句及for语句等

(3)表达式 如两个数值相加x+y等

 

1、定义及声明

Javac中有几个定义及声明,下面给出了涉及到的主要的几个语法树节点的继承关系图。

 

技术分享图片

 

可以看到Javac语法树上的每个节点实现类都继承了一个抽象实现类JCTree,同时也实现了与自己想对应的接口,如JCxxx实现类实现xxxTree接口,而xxxTree接口与JCTree又同时实现了

Tree接口,可以说这个接口是一个顶层接口,代表了任意一个语法树节点。类似的,后面的语句及表达式实现类也遵循了这样的继承原则,只是语句是通过JCStatement间接继承了JCTree,而表达式是通过JCExpression抽象类间接继承了JCTree。

(1)

 

 

 

 

 

2、语句的分析

 

 

3、表达式的分析

 

以上是关于第四章-语法分析之认识树节点的主要内容,如果未能解决你的问题,请参考以下文章

GCC编译器原理------编译原理三:编译过程(2-2)---编译之语法分析

Groovy编译时元编程 ( 方法拦截时用到的 AST 语法树节点 MethodNode 节点 | MethodNode 节点分析 | MethodNode 节点中的BlockStatement)

编译原理语法分析之自顶向下分析

Roslyn 语法树中的各种语法节点及每个节点的含义

符号表和抽象语法树是啥关系?两者在编译器设计中是不是必需

编译原理-第四章 语法分析-4.4 自顶向下的语法分析