1232 lines
24 KiB
YAML
1232 lines
24 KiB
YAML
# $schema: ./ast.schema.yaml
|
|
# Operators
|
|
Operator:
|
|
leaf_enum:
|
|
rules:
|
|
- Or
|
|
- And
|
|
- EqualTo
|
|
- NotEqualTo
|
|
- Greater
|
|
- Less
|
|
- GreaterEqual
|
|
- LessEqual
|
|
- Add
|
|
- Subtract
|
|
- Multiply
|
|
- Divide
|
|
- Modulo
|
|
- LeftShift
|
|
- RightShift
|
|
- Spread
|
|
- Star
|
|
- Not
|
|
- Negative
|
|
- PlusPlus
|
|
- MinusMinus
|
|
- CallOp
|
|
- Index
|
|
|
|
# Names
|
|
Identifier:
|
|
leaf_struct:
|
|
members:
|
|
- name:
|
|
kind: string
|
|
- file_id:
|
|
kind: file_id
|
|
- range:
|
|
kind: range
|
|
derive:
|
|
- Clone
|
|
- PartialEq
|
|
- Eq
|
|
- Hash
|
|
FullyQualifiedName:
|
|
struct:
|
|
children:
|
|
- identifiers:
|
|
vec:
|
|
rule: Identifier
|
|
|
|
# Lists
|
|
TypeUseList:
|
|
struct:
|
|
children:
|
|
- type_uses:
|
|
vec:
|
|
rule: TypeUse
|
|
IdentifierList:
|
|
struct:
|
|
children:
|
|
- identifiers:
|
|
vec:
|
|
rule: Identifier
|
|
ParenthesesOptionalTypeUseList:
|
|
struct:
|
|
children:
|
|
- type_use_list:
|
|
member:
|
|
optional: true
|
|
|
|
# Type Use
|
|
TypeUse:
|
|
tree_enum:
|
|
rules:
|
|
- PrimitiveType
|
|
- InterfaceOrClassTypeUse
|
|
- TupleTypeUse
|
|
- FunctionTypeUse
|
|
PrimitiveType:
|
|
leaf_enum:
|
|
rules:
|
|
- Byte
|
|
- Short
|
|
- Char
|
|
- Int
|
|
- Long
|
|
- Double
|
|
- Bool
|
|
- String
|
|
- TypedArray
|
|
- Any
|
|
- Void
|
|
TypedArray:
|
|
struct:
|
|
children:
|
|
- array_kw:
|
|
skip:
|
|
rule: Array
|
|
- generic_arguments
|
|
InterfaceOrClassTypeUse:
|
|
struct:
|
|
children:
|
|
- fully_qualified_name
|
|
- generic_arguments:
|
|
member:
|
|
rule: GenericArguments
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
TupleTypeUse:
|
|
struct:
|
|
children:
|
|
- tuple_arguments
|
|
FunctionTypeUse:
|
|
struct:
|
|
children:
|
|
- fn_kw:
|
|
skip:
|
|
rule: Fn
|
|
- generic_parameters:
|
|
member:
|
|
rule: GenericParameters
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- parameters:
|
|
member:
|
|
rule: Parameters
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- return_type
|
|
|
|
# Generic Arguments
|
|
GenericArguments:
|
|
struct:
|
|
children:
|
|
- type_use_list
|
|
|
|
# Generic Parameters
|
|
GenericParameters:
|
|
struct:
|
|
children:
|
|
- identifier_list
|
|
|
|
# Tuple Arguments
|
|
TupleArguments:
|
|
struct:
|
|
children:
|
|
- parentheses_optional_type_use_list
|
|
|
|
# Implements List
|
|
ImplementsList:
|
|
struct:
|
|
children:
|
|
- type_uses:
|
|
vec:
|
|
rule: TypeUse
|
|
|
|
# Parameters
|
|
Parameters:
|
|
struct:
|
|
children:
|
|
- parameters:
|
|
vec:
|
|
rule: Parameter
|
|
Parameter:
|
|
struct:
|
|
children:
|
|
- identifier
|
|
- type_use
|
|
|
|
# Return Type
|
|
ReturnType:
|
|
struct:
|
|
children:
|
|
- type_use
|
|
|
|
# Top-level constructs
|
|
CompilationUnit:
|
|
struct:
|
|
children:
|
|
- parent_mod:
|
|
member:
|
|
optional: true
|
|
- use_statements:
|
|
vec:
|
|
rule: UseStatement
|
|
- module_level_declarations:
|
|
vec:
|
|
rule: ModuleLevelDeclaration
|
|
- eoi:
|
|
skip:
|
|
rule: EOI
|
|
ParentMod:
|
|
struct:
|
|
children:
|
|
- mod_kw:
|
|
skip:
|
|
rule: Mod
|
|
- fqn:
|
|
member:
|
|
rule: FullyQualifiedName
|
|
UseStatement:
|
|
struct:
|
|
children:
|
|
- use_kw:
|
|
skip:
|
|
rule: Use
|
|
- prefixes:
|
|
vec:
|
|
rule: UseStatementPrefix
|
|
- suffix:
|
|
member:
|
|
rule: UseStatementSuffix
|
|
- file_id:
|
|
member:
|
|
build:
|
|
special:
|
|
kind: file_id
|
|
- range:
|
|
member:
|
|
build:
|
|
special:
|
|
kind: range
|
|
UseStatementPrefix:
|
|
struct:
|
|
children:
|
|
- identifier
|
|
UseStatementSuffix:
|
|
tree_enum:
|
|
rules:
|
|
- Identifier
|
|
- Star:
|
|
child: false
|
|
- UseList
|
|
UseList:
|
|
struct:
|
|
children:
|
|
- identifiers:
|
|
vec:
|
|
rule: Identifier
|
|
|
|
# Level declarations
|
|
ModuleLevelDeclaration:
|
|
tree_enum:
|
|
rules:
|
|
- Module
|
|
- Interface
|
|
- Class
|
|
- Function
|
|
- PlatformFunction
|
|
InterfaceLevelDeclaration:
|
|
tree_enum:
|
|
rules:
|
|
- CompanionModule
|
|
- Interface
|
|
- Class
|
|
- InterfaceFunction
|
|
- InterfaceDefaultFunction
|
|
- InterfaceOperatorFunction
|
|
- InterfaceDefaultOperatorFunction
|
|
ClassLevelDeclaration:
|
|
tree_enum:
|
|
rules:
|
|
- CompanionModule
|
|
- Interface
|
|
- Class
|
|
- Function
|
|
- OperatorFunction
|
|
- PlatformFunction
|
|
|
|
# Main organizational constructs
|
|
Module:
|
|
struct:
|
|
children:
|
|
- is_public:
|
|
member:
|
|
rule: Pub
|
|
build:
|
|
boolean:
|
|
on: rule_present
|
|
- mod_kw:
|
|
skip:
|
|
rule: Mod
|
|
- identifier
|
|
- declarations:
|
|
vec:
|
|
rule: ModuleLevelDeclaration
|
|
- end_kw:
|
|
skip:
|
|
rule: End
|
|
CompanionModule:
|
|
struct:
|
|
children:
|
|
- companion_kw:
|
|
skip:
|
|
rule: Companion
|
|
- mod_kw:
|
|
skip:
|
|
rule: Mod
|
|
- declarations:
|
|
vec:
|
|
rule: ModuleLevelDeclaration
|
|
- end_kw:
|
|
skip:
|
|
rule: End
|
|
Interface:
|
|
struct:
|
|
children:
|
|
- is_public:
|
|
member:
|
|
rule: Pub
|
|
build:
|
|
boolean:
|
|
on: rule_present
|
|
- int_kw:
|
|
skip:
|
|
rule: IntKw
|
|
- identifier
|
|
- generic_parameters:
|
|
member:
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- implements_list:
|
|
member:
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- declarations:
|
|
vec:
|
|
rule: InterfaceLevelDeclaration
|
|
- end_kw:
|
|
skip:
|
|
rule: End
|
|
Class:
|
|
struct:
|
|
children:
|
|
- is_public:
|
|
member:
|
|
rule: Pub
|
|
build:
|
|
boolean:
|
|
on: rule_present
|
|
- class_kw:
|
|
skip:
|
|
rule: ClassKw
|
|
- identifier
|
|
- generic_parameters:
|
|
member:
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- class_constructor:
|
|
member:
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- implements_list:
|
|
member:
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- class_level_declarations:
|
|
vec:
|
|
rule: ClassLevelDeclaration
|
|
- end_kw:
|
|
skip:
|
|
rule: End
|
|
|
|
# Function constructs
|
|
Function:
|
|
struct:
|
|
children:
|
|
- is_public:
|
|
member:
|
|
rule: Pub
|
|
build:
|
|
boolean:
|
|
on: rule_present
|
|
- fn_kw:
|
|
skip:
|
|
rule: Fn
|
|
- generics:
|
|
member:
|
|
rule: GenericParameters
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- identifier
|
|
- parameters
|
|
- return_type:
|
|
member:
|
|
build:
|
|
node:
|
|
or_else: void
|
|
- function_body
|
|
OperatorFunction:
|
|
struct:
|
|
children:
|
|
- is_public:
|
|
member:
|
|
rule: Pub
|
|
build:
|
|
boolean:
|
|
on: rule_present
|
|
- op_kw:
|
|
skip:
|
|
rule: Op
|
|
- generics:
|
|
member:
|
|
rule: GenericParameters
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- operator
|
|
- parameters
|
|
- return_type:
|
|
member:
|
|
build:
|
|
node:
|
|
or_else: void
|
|
- function_body
|
|
PlatformFunction:
|
|
struct:
|
|
children:
|
|
- is_public:
|
|
member:
|
|
rule: Pub
|
|
build:
|
|
boolean:
|
|
on: rule_present
|
|
- platform_kw:
|
|
skip:
|
|
rule: Platform
|
|
- fn_kw:
|
|
skip:
|
|
rule: Fn
|
|
- generics:
|
|
member:
|
|
rule: GenericParameters
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- identifier
|
|
- parameters
|
|
- return_type
|
|
InterfaceFunction:
|
|
struct:
|
|
children:
|
|
- fn_kw:
|
|
skip:
|
|
rule: Fn
|
|
- generics:
|
|
member:
|
|
rule: GenericParameters
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- identifier
|
|
- parameters
|
|
- return_type
|
|
InterfaceDefaultFunction:
|
|
struct:
|
|
children:
|
|
- def_kw:
|
|
skip:
|
|
rule: Def
|
|
- fn_kw:
|
|
skip:
|
|
rule: Fn
|
|
- generics:
|
|
member:
|
|
rule: GenericParameters
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- identifier
|
|
- parameters
|
|
- return_type:
|
|
member:
|
|
build:
|
|
node:
|
|
or_else: void
|
|
- function_body
|
|
InterfaceOperatorFunction:
|
|
struct:
|
|
children:
|
|
- op_kw:
|
|
skip:
|
|
rule: Op
|
|
- generics:
|
|
member:
|
|
rule: GenericParameters
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- operator
|
|
- parameters
|
|
- return_type
|
|
InterfaceDefaultOperatorFunction:
|
|
struct:
|
|
children:
|
|
- def_kw:
|
|
skip:
|
|
rule: Def
|
|
- op_kw:
|
|
skip:
|
|
rule: Op
|
|
- generics:
|
|
member:
|
|
rule: GenericParameters
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- operator
|
|
- parameters
|
|
- return_type:
|
|
member:
|
|
build:
|
|
node:
|
|
or_else: void
|
|
- function_body
|
|
|
|
# Function Bodies
|
|
FunctionBody:
|
|
tree_enum:
|
|
rules:
|
|
- FunctionAliasBody
|
|
- FunctionEqualsBody
|
|
- FunctionBlockBody
|
|
FunctionEqualsBody:
|
|
struct:
|
|
children:
|
|
- expression
|
|
FunctionAliasBody:
|
|
struct:
|
|
children:
|
|
- alias_kw:
|
|
skip:
|
|
rule: Alias
|
|
- identifier
|
|
FunctionBlockBody:
|
|
struct:
|
|
children:
|
|
- statements:
|
|
vec:
|
|
rule: Statement
|
|
- end_kw:
|
|
skip:
|
|
rule: End
|
|
|
|
# Class constructs
|
|
ClassConstructor:
|
|
struct:
|
|
children:
|
|
- members:
|
|
vec:
|
|
rule: Member
|
|
Member:
|
|
struct:
|
|
children:
|
|
- is_public:
|
|
member:
|
|
rule: Pub
|
|
build:
|
|
boolean:
|
|
on: rule_present
|
|
- is_mut:
|
|
member:
|
|
rule: Mut
|
|
build:
|
|
boolean:
|
|
on: rule_present
|
|
- identifier
|
|
- type_use
|
|
|
|
# Statements
|
|
Statement:
|
|
tree_enum:
|
|
rules:
|
|
- VariableDeclaration
|
|
- AssignmentStatement
|
|
- ExpressionStatement
|
|
- UseStatement
|
|
- IfStatement
|
|
- WhileStatement
|
|
- ForStatement
|
|
VariableDeclaration:
|
|
struct:
|
|
children:
|
|
- let_kw:
|
|
skip:
|
|
rule: Let
|
|
- is_mut:
|
|
member:
|
|
rule: Mut
|
|
build:
|
|
boolean:
|
|
on: rule_present
|
|
- identifier
|
|
- type_use:
|
|
member:
|
|
optional: true
|
|
- expression:
|
|
member:
|
|
optional: true
|
|
AssignmentStatement:
|
|
struct:
|
|
children:
|
|
- left:
|
|
member:
|
|
rule: Expression
|
|
- right:
|
|
member:
|
|
rule: Expression
|
|
ExpressionStatement:
|
|
struct:
|
|
children:
|
|
- expression
|
|
IfStatement:
|
|
struct:
|
|
children:
|
|
- if_clause
|
|
- if_else_ifs:
|
|
vec:
|
|
rule: IfElseIf
|
|
- if_else
|
|
- end_kw:
|
|
skip:
|
|
rule: End
|
|
IfClause:
|
|
struct:
|
|
children:
|
|
- if_kw:
|
|
skip:
|
|
rule: If
|
|
- expression
|
|
- then_kw:
|
|
skip:
|
|
rule: Then
|
|
- statements:
|
|
skip:
|
|
rule: Statement
|
|
IfElseIf:
|
|
struct:
|
|
children:
|
|
- else_kw:
|
|
skip:
|
|
rule: Else
|
|
- if_clause
|
|
IfElse:
|
|
struct:
|
|
children:
|
|
- else_kw:
|
|
skip:
|
|
rule: Else
|
|
- statements:
|
|
vec:
|
|
rule: Statement
|
|
WhileStatement:
|
|
struct:
|
|
children:
|
|
- while_kw:
|
|
skip:
|
|
rule: While
|
|
- expression
|
|
- do_kw:
|
|
skip:
|
|
rule: Do
|
|
- statements:
|
|
vec:
|
|
rule: Statement
|
|
- end_kw:
|
|
skip:
|
|
rule: End
|
|
ForStatement:
|
|
struct:
|
|
children:
|
|
- for_kw:
|
|
skip:
|
|
rule: For
|
|
- identifier
|
|
- in_kw:
|
|
skip:
|
|
rule: In
|
|
- expression
|
|
- do_kw:
|
|
skip:
|
|
rule: Do
|
|
- statement:
|
|
vec:
|
|
rule: Statement
|
|
- end_kw:
|
|
skip:
|
|
rule: End
|
|
|
|
# Expressions
|
|
Expression:
|
|
polymorphic_type:
|
|
variants:
|
|
- Ternary:
|
|
inner:
|
|
kind: TernaryExpression
|
|
- Or:
|
|
inner:
|
|
kind: OrExpression
|
|
- And:
|
|
inner:
|
|
kind: AndExpression
|
|
- Comparison:
|
|
inner:
|
|
kind: ComparisonExpression
|
|
- Shift:
|
|
inner:
|
|
kind: ShiftExpression
|
|
- Additive:
|
|
inner:
|
|
kind: AdditiveExpression
|
|
- Multiplicative:
|
|
inner:
|
|
kind: MultiplicativeExpression
|
|
- Prefix:
|
|
inner:
|
|
kind: PrefixExpression
|
|
- Suffix:
|
|
inner:
|
|
kind: SuffixExpression
|
|
- Literal:
|
|
inner:
|
|
kind: Literal
|
|
- Fqn:
|
|
inner:
|
|
kind: FullyQualifiedName
|
|
- Closure:
|
|
inner:
|
|
kind: Closure
|
|
- List:
|
|
inner:
|
|
kind: ListExpression
|
|
build:
|
|
kind: TernaryExpression
|
|
|
|
# Ternary
|
|
TernaryExpression:
|
|
polymorphic_enum_loop_build:
|
|
kind: Expression
|
|
rules:
|
|
- OrExpression:
|
|
pass_through:
|
|
kind: Expression
|
|
with: OrExpression
|
|
- TernaryRhs:
|
|
build:
|
|
variant: Ternary
|
|
children:
|
|
- test:
|
|
use_current:
|
|
kind: Expression
|
|
- right:
|
|
on_each:
|
|
rule: TernaryRhs
|
|
TernaryRhs:
|
|
struct:
|
|
children:
|
|
- true_alternative:
|
|
member:
|
|
rule: TernaryTrueAlternative
|
|
build:
|
|
node:
|
|
kind: Expression
|
|
with: TernaryTrueAlternative
|
|
- false_alternative:
|
|
member:
|
|
rule: TernaryFalseAlternative
|
|
build:
|
|
node:
|
|
kind: Expression
|
|
with: TernaryFalseAlternative
|
|
TernaryTrueAlternative:
|
|
node_production:
|
|
kind: Expression
|
|
with: OrExpression
|
|
TernaryFalseAlternative:
|
|
node_production:
|
|
kind: Expression
|
|
with: OrExpression
|
|
|
|
# Or
|
|
OrExpression:
|
|
polymorphic_enum_loop_build:
|
|
kind: Expression
|
|
rules:
|
|
- AndExpression:
|
|
pass_through:
|
|
kind: Expression
|
|
with: AndExpression
|
|
- AndRhs:
|
|
build:
|
|
variant: Or
|
|
children:
|
|
- left:
|
|
use_current:
|
|
kind: Expression
|
|
- right:
|
|
on_each:
|
|
rule: OrRhs
|
|
OrRhs:
|
|
struct:
|
|
children:
|
|
- or_kw:
|
|
skip:
|
|
rule: Or
|
|
- expression:
|
|
member:
|
|
rule: AndExpression
|
|
build:
|
|
node:
|
|
kind: Expression
|
|
with: AndExpression
|
|
|
|
# And
|
|
AndExpression:
|
|
polymorphic_enum_loop_build:
|
|
kind: Expression
|
|
rules:
|
|
- ComparisonExpression:
|
|
pass_through:
|
|
kind: Expression
|
|
with: ComparisonExpression
|
|
- AndRhs:
|
|
build:
|
|
variant: And
|
|
children:
|
|
- left:
|
|
use_current:
|
|
kind: Expression
|
|
- right:
|
|
on_each:
|
|
rule: AndRhs
|
|
AndRhs:
|
|
struct:
|
|
children:
|
|
- and_kw:
|
|
skip:
|
|
rule: And
|
|
- expression:
|
|
member:
|
|
rule: ComparisonExpression
|
|
build:
|
|
node:
|
|
kind: Expression
|
|
with: ComparisonExpression
|
|
|
|
# Comparison
|
|
ComparisonExpression:
|
|
polymorphic_enum_loop_build:
|
|
kind: Expression
|
|
rules:
|
|
- ShiftExpression:
|
|
pass_through:
|
|
kind: Expression
|
|
with: ShiftExpression
|
|
- ComparisonRhs:
|
|
build:
|
|
variant: Comparison
|
|
children:
|
|
- left:
|
|
use_current:
|
|
kind: Expression
|
|
- rhs:
|
|
on_each:
|
|
rule: ComparisonRhs
|
|
ComparisonRhs:
|
|
struct:
|
|
children:
|
|
- operator:
|
|
member:
|
|
rule: ComparisonOperator
|
|
- expression:
|
|
member:
|
|
rule: ShiftExpression
|
|
build:
|
|
node:
|
|
kind: Expression
|
|
with: ShiftExpression
|
|
ComparisonOperator:
|
|
leaf_enum:
|
|
rules:
|
|
- Greater
|
|
- Less
|
|
- GreaterEqual
|
|
- LessEqual
|
|
- EqualTo
|
|
- NotEqualTo
|
|
ShiftExpression:
|
|
polymorphic_enum_loop_build:
|
|
kind: Expression
|
|
rules:
|
|
- AdditiveExpression:
|
|
pass_through:
|
|
kind: Expression
|
|
with: AdditiveExpression
|
|
- ShiftRhs:
|
|
build:
|
|
variant: Shift
|
|
children:
|
|
- left:
|
|
use_current:
|
|
kind: Expression
|
|
- right:
|
|
on_each:
|
|
rule: ShiftRhs
|
|
ShiftRhs:
|
|
struct:
|
|
children:
|
|
- operator:
|
|
member:
|
|
rule: ShiftOperator
|
|
- expression:
|
|
member:
|
|
rule: AdditiveExpression
|
|
build:
|
|
node:
|
|
kind: Expression
|
|
with: AdditiveExpression
|
|
ShiftOperator:
|
|
leaf_enum:
|
|
rules:
|
|
- LeftShift
|
|
- RightShift
|
|
AdditiveExpression:
|
|
polymorphic_enum_loop_build:
|
|
kind: Expression
|
|
rules:
|
|
- MultiplicativeExpression:
|
|
pass_through:
|
|
kind: Expression
|
|
with: MultiplicativeExpression
|
|
- AdditiveRhs:
|
|
build:
|
|
variant: Additive
|
|
children:
|
|
- left:
|
|
use_current:
|
|
kind: Expression
|
|
- rhs:
|
|
on_each:
|
|
rule: AdditiveRhs
|
|
AdditiveRhs:
|
|
struct:
|
|
children:
|
|
- operator:
|
|
member:
|
|
rule: AdditiveOperator
|
|
- expression:
|
|
member:
|
|
rule: MultiplicativeExpression
|
|
build:
|
|
node:
|
|
kind: Expression
|
|
with: MultiplicativeExpression
|
|
AdditiveOperator:
|
|
leaf_enum:
|
|
rules:
|
|
- Add
|
|
- Subtract
|
|
MultiplicativeExpression:
|
|
polymorphic_enum_loop_build:
|
|
kind: Expression
|
|
rules:
|
|
- PrefixExpression:
|
|
pass_through:
|
|
kind: Expression
|
|
with: PrefixExpression
|
|
- MultiplicativeRhs:
|
|
build:
|
|
variant: Multiplicative
|
|
children:
|
|
- left:
|
|
use_current:
|
|
kind: Expression
|
|
- rhs:
|
|
on_each:
|
|
rule: MultiplicativeRhs
|
|
MultiplicativeRhs:
|
|
struct:
|
|
children:
|
|
- operator:
|
|
member:
|
|
rule: MultiplicativeOperator
|
|
- expression:
|
|
member:
|
|
rule: PrefixExpression
|
|
build:
|
|
node:
|
|
kind: Expression
|
|
with: PrefixExpression
|
|
MultiplicativeOperator:
|
|
leaf_enum:
|
|
rules:
|
|
- Multiply
|
|
- Divide
|
|
- Modulo
|
|
PrefixExpression:
|
|
polymorphic_enum_loop_build:
|
|
kind: Expression
|
|
reverse: true
|
|
rules:
|
|
- PrefixOperator:
|
|
build:
|
|
variant: Prefix
|
|
children:
|
|
- operator:
|
|
on_each:
|
|
rule: PrefixOperator
|
|
- expression:
|
|
use_current:
|
|
kind: Expression
|
|
- SuffixExpression:
|
|
pass_through:
|
|
kind: Expression
|
|
with: SuffixExpression
|
|
PrefixOperator:
|
|
leaf_enum:
|
|
rules:
|
|
- Spread
|
|
- Not
|
|
- Negative
|
|
SuffixExpression:
|
|
polymorphic_enum_loop_build:
|
|
kind: Expression
|
|
rules:
|
|
- PrimaryExpression:
|
|
pass_through:
|
|
kind: Expression
|
|
with: PrimaryExpression
|
|
- SuffixOperator:
|
|
build:
|
|
variant: Suffix
|
|
children:
|
|
- expression:
|
|
use_current:
|
|
kind: Expression
|
|
- operator:
|
|
on_each:
|
|
rule: SuffixOperator
|
|
SuffixOperator:
|
|
tree_enum:
|
|
rules:
|
|
- PlusPlus:
|
|
child: false
|
|
- MinusMinus:
|
|
child: false
|
|
- ObjectProperty
|
|
- ObjectIndex
|
|
- Call
|
|
ObjectProperty:
|
|
struct:
|
|
children:
|
|
- identifier
|
|
ObjectIndex:
|
|
struct:
|
|
children:
|
|
- expression
|
|
PrimaryExpression:
|
|
polymorphic_pass_through:
|
|
build:
|
|
kind: Expression
|
|
variants:
|
|
- Literal:
|
|
inner:
|
|
kind: Literal
|
|
- Fqn:
|
|
inner:
|
|
kind: FullyQualifiedName
|
|
- Closure:
|
|
inner:
|
|
kind: Closure
|
|
- List:
|
|
inner:
|
|
kind: ListExpression
|
|
- ParenthesizedExpression:
|
|
pass_through:
|
|
kind: Expression
|
|
ListExpression:
|
|
struct:
|
|
children:
|
|
- expression_list
|
|
ParenthesizedExpression:
|
|
node_production:
|
|
kind: Expression
|
|
with: Expression
|
|
|
|
# Calls
|
|
Call:
|
|
tree_enum:
|
|
rules:
|
|
- ParenthesesCall
|
|
- NonParenthesesCall
|
|
ParenthesesCall:
|
|
struct:
|
|
children:
|
|
- turbo_fish:
|
|
member:
|
|
optional: true
|
|
- expression_list:
|
|
member:
|
|
optional: true
|
|
- closure:
|
|
member:
|
|
optional: true
|
|
NonParenthesesCall:
|
|
struct:
|
|
children:
|
|
- turbo_fish:
|
|
member:
|
|
optional: true
|
|
- expression_list:
|
|
member:
|
|
optional: true
|
|
- closure:
|
|
member:
|
|
optional: true
|
|
TurboFish:
|
|
struct:
|
|
children:
|
|
- generic_arguments
|
|
ExpressionList:
|
|
struct:
|
|
children:
|
|
- expressions:
|
|
vec:
|
|
rule: Expression
|
|
|
|
# Closure
|
|
Closure:
|
|
struct:
|
|
children:
|
|
- closure_parameters:
|
|
member:
|
|
build:
|
|
node:
|
|
or_else_default: true
|
|
- statements:
|
|
vec:
|
|
rule: Statement
|
|
ClosureParameters:
|
|
struct:
|
|
children:
|
|
- parameters:
|
|
vec:
|
|
rule: ClosureParameter
|
|
ClosureParameter:
|
|
struct:
|
|
children:
|
|
- identifier
|
|
- type_use:
|
|
member:
|
|
optional: true
|
|
|
|
# Literals
|
|
Literal:
|
|
tree_enum:
|
|
rules:
|
|
- IntLiteral:
|
|
kind: int
|
|
- LongLiteral:
|
|
kind: long
|
|
- DoubleLiteral:
|
|
kind: double
|
|
- SingleQuoteString:
|
|
kind: string
|
|
- DString
|
|
- BacktickString
|
|
- BooleanLiteral:
|
|
kind: boolean
|
|
|
|
# Numbers
|
|
IntLiteral:
|
|
production:
|
|
kind: int
|
|
LongLiteral:
|
|
production:
|
|
kind: long
|
|
DoubleLiteral:
|
|
production:
|
|
kind: double
|
|
|
|
# Strings
|
|
SingleQuoteString:
|
|
production:
|
|
kind: string
|
|
from: string_inner
|
|
DString:
|
|
struct:
|
|
children:
|
|
- inners:
|
|
vec:
|
|
rule: DStringInner
|
|
kind: string
|
|
- expressions:
|
|
vec:
|
|
rule: DStringExpression
|
|
DStringInner:
|
|
production:
|
|
kind: string
|
|
from: whole_pair
|
|
DStringExpression:
|
|
struct:
|
|
children:
|
|
- expression
|
|
BacktickString:
|
|
struct:
|
|
children:
|
|
- inners:
|
|
vec:
|
|
rule: BacktickInner
|
|
kind: string
|
|
- expressions:
|
|
vec:
|
|
rule: DStringExpression
|
|
BacktickInner:
|
|
production:
|
|
kind: string
|
|
from: whole_pair
|
|
BooleanLiteral:
|
|
production:
|
|
kind: boolean
|
|
from: parse_whole_pair |