pub enum NodeData {
Show 42 variants
Block,
Group,
Empty,
Yield,
ExprStmt,
VarDecl {
name: String,
ty: JType,
final_mod: bool,
},
Assign {
op: Option<BinOp>,
},
If,
While,
DoWhile,
For {
inits: u8,
has_cond: bool,
steps: u8,
},
ForEach {
name: String,
ty: JType,
},
Return,
Break {
label: Option<String>,
},
Continue {
label: Option<String>,
},
Throw,
Try,
Catch {
ty_raw: String,
name: String,
},
Synchronized,
Switch,
Case {
labels: u16,
is_default: bool,
arrow: bool,
},
Label {
name: String,
},
Assert,
Raw {
text: String,
},
Binary {
op: BinOp,
},
Unary {
op: UnOp,
},
Call,
Member {
name: Sym,
},
Index,
Cast {
ty: JType,
},
Paren,
Ternary,
New {
ty: JType,
anon_raw: Option<String>,
},
NewArray {
ty: JType,
dims: u16,
sized: u16,
},
ArrayLit,
VarRef {
name: Sym,
},
Literal(Lit),
This,
Super,
InstanceOf {
ty: JType,
bind: Option<String>,
},
Lambda {
params_raw: String,
},
MethodRef {
name: Sym,
},
}Expand description
节点负载:children 统一放在 Node::children,这里只放非节点数据。
Variants§
Block
Group
合成分组(无花括号、无作用域):多声明符等“一句多语句“的承载。 语句列表处在解析期就地展开;若存活到打印,按同缩进无括号输出。 kind() 映射为 Block(引擎规则透明),但语义上不引入词法作用域。
Empty
Yield
yield expr;(switch 表达式产出)。孩子 [expr]。
ExprStmt
VarDecl
Assign
If
While
DoWhile
For
ForEach
Return
Break
Continue
Throw
Try
children: [resource…, try_block, catch…, (finally)?]
Catch
catch (ty_raw name),children: [block]
Synchronized
children: [lock, block]
Switch
children: [subject, case…]
Case
children: [label…, stmts…](前 labels 个是 case 标签表达式)
Label
children: [stmt]
Assert
children: [cond, (msg)?]
Raw
不可解析的原文区域:原样保留,简化规则不触碰。
Binary
Unary
Call
children: [callee, arg…]
Member
children: [object];name 为成员名。
Index
children: [array, index]
Cast
Paren
Ternary
New
new T(args…);匿名类体以原文附加。
NewArray
new T[sz…][]… [init];ty 为元素类型,dims=总维数,sized=带尺寸维数;
children: [size…, (ArrayLit)?]
ArrayLit
VarRef
Literal(Lit)
This
Super
super(super.foo() / super(args) 的 callee)
InstanceOf
children: [expr];x instanceof T bind
Lambda
children: [body](body 为 Block 或表达式)
MethodRef
children: [receiver];recv::name(name 含 new)