用于处理 Go 程序的抽象语法树类¶
CodeQL 提供了大量用于表示 Go 程序抽象语法树的类。
抽象语法树 (AST) 表示程序的语法结构。AST 上的节点代表语句和表达式等元素。
语句类¶
此表列出了 Stmt 的所有子类。
表达式分类¶
Go 语言中有许多表达式类别,我们按类别列出它们。本节中所有类都是 表达式 的子类。
字面量¶
表达式语法示例 | CodeQL 类 | 超类 |
---|---|---|
23 |
整数字面量 | 基本字面量 |
4.2 |
浮点字面量 | 基本字面量 |
4.2 + 2.7i |
虚数字面量 | 基本字面量 |
'a' |
字符字面量 | 基本字面量 |
"Hello" |
字符串字面量 | 基本字面量 |
func(x, y int) int { return x + y } |
函数字面量 | 函数定义 |
map[string]int{"A": 1, "B": 2} |
映射字面量 | 复合字面量 |
Point3D{0.5, -0.5, 0.5} |
结构体字面量 | 复合字面量 |
一元表达式¶
本小节中的所有类都是 一元表达式 的子类。
表达式语法 | CodeQL 类 | 超类 |
---|---|---|
+ 表达式 |
加号表达式 | 算术一元表达式 |
- 表达式 |
减号表达式 | 算术一元表达式 |
! 表达式 |
取反表达式 | 逻辑一元表达式 |
^ 表达式 |
按位取反表达式 | 位运算一元表达式 |
& 表达式 |
取地址表达式 | |
<- 表达式 |
接收表达式 |
二元表达式¶
本小节中的所有类都是 二元表达式 的子类。
表达式语法 | CodeQL 类 | 超类 |
---|---|---|
表达式 * 表达式 |
乘法表达式 | 算术二元表达式 |
表达式 / 表达式 |
除法表达式 | 算术二元表达式 |
表达式 % 表达式 |
取余表达式 | 算术二元表达式 |
表达式 + 表达式 |
加法表达式 | 算术二元表达式 |
表达式 - 表达式 |
减法表达式 | 算术二元表达式 |
表达式 << 表达式 |
左移表达式 | 移位表达式 |
表达式 >> 表达式 |
右移表达式 | 移位表达式 |
表达式 && 表达式 |
逻辑与表达式 | 逻辑二元表达式 |
表达式 || 表达式 |
逻辑或表达式 | 逻辑二元表达式 |
表达式 < 表达式 |
小于表达式 | 关系比较表达式 |
表达式 > 表达式 |
大于表达式 | 关系比较表达式 |
表达式 <= 表达式 |
小于等于表达式 | 关系比较表达式 |
表达式 >= 表达式 |
大于等于表达式 | 关系比较表达式 |
表达式 == 表达式 |
等于表达式 | 相等性测试表达式 |
表达式 != 表达式 |
不等于表达式 | 相等性测试表达式 |
表达式 & 表达式 |
按位与表达式 | 位运算二元表达式 |
表达式 | 表达式 |
按位或表达式 | 位运算二元表达式 |
表达式 ^ 表达式 |
按位异或表达式 | 位运算二元表达式 |
表达式 &^ 表达式 |
按位与非表达式 | 位运算二元表达式 |
类型表达式¶
这些类表示不同类型的表达式。它们没有共同的超类。
表达式语法 | CodeQL 类 | 超类 |
---|---|---|
[ 表达式] 类型表达式 |
数组类型表达式 | |
struct { ... } |
结构体类型表达式 | |
func 函数名(...) (...) |
函数类型表达式 | |
interface { ... } |
接口类型表达式 | |
map[ TypeExpr] TypeExpr |
MapTypeExpr | |
chan<- TypeExpr |
SendChanTypeExpr | ChanTypeExpr |
<-chan TypeExpr |
RecvChanTypeExpr | ChanTypeExpr |
chan TypeExpr |
SendRecvChanTypeExpr | ChanTypeExpr |
名称表达式¶
本小节中的所有类都是 Name 的子类。
以下类与名称的结构相关。
表达式语法 | CodeQL 类 | 超类 |
---|---|---|
Ident | SimpleName | Ident |
Ident. Ident |
QualifiedName | SelectorExpr |
以下类与名称引用的实体类型相关。
其他¶
表达式语法 | CodeQL 类 | 超类 | 备注 |
---|---|---|---|
foo |
Ident | ||
_ |
BlankIdent | ||
... |
Ellipsis | ||
( Expr) |
ParenExpr | ||
Ident. Ident |
SelectorExpr | ||
Expr[ Expr] |
IndexExpr | ||
Expr[ Expr: Expr: Expr] |
SliceExpr | ||
Expr.( TypeExpr) |
TypeAssertExpr | ||
* Expr |
StarExpr | 可以是 ValueExpr 或 TypeExpr,取决于上下文 | |
Expr: Expr |
KeyValueExpr | ||
TypeExpr( Expr) |
ConversionExpr | CallOrConversionExpr | |
Expr(...) |
CallExpr | CallOrConversionExpr | |
(任何无法解析的代码) | BadExpr |
以下类按表达式引用的实体类型进行组织。
CodeQL 类 | 解释 |
---|---|
TypeExpr | 表示类型的表达式 |
ReferenceExpr | 引用变量、常量、函数、字段或数组或切片元素的表达式 |
ValueExpr | 可以计算为值的表达式(与引用包、类型或语句标签的表达式相对)。它是对 ReferenceExpr 的泛化 |