第四章-语法分析之认识树节点
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)