https://codeql.github.com/docs/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs/

1、抽象语法树

抽象语法树,AST,Abstract syntax tree
AST节点表示像语句(Statements)和表达式(Expressions)这样的元素

2、语句类

顶级父类Stmt

3、表达式类

顶级父类Expr

3.1 字面量

顶级父类Literal

代码示例 抽象整体
true BooleanLiteral
23 IntegerLiteral
‘a’ CharacterLiteral
“Hello” StringLiteral
null NullLiteral

可以通过调用成员谓词getLiteral来获取字面量的值

  1. string Literal::getLiteral()

3.2 一元表达式

unary

3.3 二元表达式

Binary expressions

3.4 赋值表达式

Assignment expression

3.5 访问

Access

代码示例 抽象整体
x VarAccess
e.f VarAccess
a[i] ArrayAccess
f(…) MethodAccess
e.m(…) MethodAccess

image.png

杂项

代码样例 抽象整体
(int) f CastExpr
new A() ClassInstanceExpr
@Annot(key=val) Annotation