pub enum NodeKind {
Show 41 variants
Block,
Empty,
Yield,
ExprStmt,
VarDecl,
Assign,
If,
While,
DoWhile,
For,
ForEach,
Return,
Break,
Continue,
Throw,
Try,
Catch,
Synchronized,
Switch,
Case,
Label,
Assert,
Binary,
Unary,
Call,
Literal,
VarRef,
Ternary,
Cast,
Paren,
Member,
Index,
New,
NewArray,
ArrayLit,
This,
InstanceOf,
Lambda,
MethodRef,
Raw,
Custom(u16),
}Variants§
Block
[stmt…]
Empty
空语句 ;,无 children。
Yield
yield expr;(switch 表达式块内的产出语句)。
ExprStmt
[expr]
VarDecl
局部变量声明,children: [(init)?],名字由 Lang::var_name 提供。
目标变量必须可写(普通局部变量),声明的类型语义由语言侧保证。
Assign
[target, value];target 必须是 VarRef(复合赋值通过 Lang::assign_op 区分)。
If
[cond, then] 或 [cond, then, else]
While
[cond, body]
DoWhile
[body, cond]
For
[(init)?, (cond)?, (step)?, body]
ForEach
增强 for:[iterable, body],变量名/类型为语言侧 attr。
Return
[(value)?]
Break
[(label)?](label 以字符串 attr 提供,不在 children)
Continue
Throw
[expr]
Try
[(resource)?, try_block, (catch)?, (finally)?];资源是语句节点,catch 子节点。
Catch
[body];参数为语言侧 attr(var_name 返回绑定名)。
Synchronized
[lock, block]
Switch
[subject, case…]
Case
[label…, stmts…](label 数与是否 default 为语言侧 attr)
Label
[stmt],标签名为 attr。
Assert
[(cond, (msg)?)]
Binary
[lhs, rhs],运算符由 Lang::bin_op 提供。
Unary
[operand],运算符由 Lang::un_op 提供。
Call
[callee, arg…];callee 不能为空。
Literal
字面量,值由 Lang::literal 提供,无 children。
VarRef
变量读,名字由 Lang::var_name 提供。
Ternary
[cond, then, else]
Cast
[expr],目标类型为语言侧 attr。
Paren
[expr] 纯括号分组,可被 ParenRemoval 删除。
Member
[object],成员名为语言侧 attr(null 安全调用等也是语言侧语义)。
Index
[array, index]
New
[arg…],构造类型为语言侧 attr。
NewArray
[size…, (init)?],元素类型与已给尺寸数为语言侧 attr。
ArrayLit
[elem…]
This
无 children(或语言侧自定)。
InstanceOf
[expr],类型/模式绑定为语言侧 attr。x instanceof T b
Lambda
[body](body 为 Block 或表达式),参数原文为语言侧 attr。
MethodRef
[receiver],成员名为语言侧 attr。recv::name
Raw
不可解析的原文区域:语言侧原样保留,通用规则不触碰。
Custom(u16)
语言特有节点逃逸口;引擎通用规则不匹配。