610 lines
11 KiB
YAML
610 lines
11 KiB
YAML
# $schema: ./ast.schema.yaml
|
|
# Top-level constructs
|
|
CompilationUnit:
|
|
children:
|
|
- parent_mod
|
|
- use_statements:
|
|
rule: UseStatement
|
|
vec: true
|
|
- module_level_declarations:
|
|
rule: ModuleLevelDeclaration
|
|
vec: true
|
|
ParentMod:
|
|
children:
|
|
- mod_kw:
|
|
rule: Mod
|
|
skip: true
|
|
- fqn:
|
|
rule: FullyQualifiedName
|
|
UseStatement:
|
|
children:
|
|
- use_kw:
|
|
rule: Use
|
|
skip: true
|
|
- prefixes:
|
|
rule: UseStatementPrefix
|
|
vec: true
|
|
- suffix:
|
|
rule: UseStatementSuffix
|
|
UseStatementPrefix:
|
|
children:
|
|
- identifier
|
|
UseStatementSuffix:
|
|
rules:
|
|
- Identifier
|
|
- rule: Star
|
|
build: UseStatementStarSuffix
|
|
- UseList
|
|
UseList:
|
|
children:
|
|
- identifiers:
|
|
rule: Identifier
|
|
vec: true
|
|
|
|
# Level declarations
|
|
ModuleLevelDeclaration:
|
|
rules:
|
|
- Module
|
|
- Interface
|
|
- Class
|
|
- Function
|
|
- PlatformFunction
|
|
InterfaceLevelDeclaration:
|
|
rules:
|
|
- CompanionModule
|
|
- Interface
|
|
- Class
|
|
- InterfaceFunction
|
|
- InterfaceDefaultFunction
|
|
- InterfaceOperatorFunction
|
|
- InterfaceDefaultOperatorFunction
|
|
ClassLevelDeclaration:
|
|
children:
|
|
- CompanionModule
|
|
- Interface
|
|
- Class
|
|
- Function
|
|
- OperatorFunction
|
|
- PlatformFunction
|
|
|
|
# Main organizational constructs
|
|
Module:
|
|
children:
|
|
- is_public:
|
|
rule: Pub
|
|
build:
|
|
type: boolean
|
|
on: rule_present
|
|
- mod_kw:
|
|
rule: Mod
|
|
skip: true
|
|
- identifier:
|
|
rule: Identifier
|
|
- declarations:
|
|
rule: ModuleLevelDeclaration
|
|
vec: true
|
|
- end_kw:
|
|
rule: End
|
|
skip: true
|
|
CompanionModule:
|
|
children:
|
|
- companion_kw:
|
|
rule: Companion
|
|
skip: true
|
|
- mod_kw:
|
|
rule: Mod
|
|
skip: true
|
|
- declarations:
|
|
rule: ModuleLevelDeclaration
|
|
vec: true
|
|
- end_kw:
|
|
rule: End
|
|
skip: true
|
|
Interface:
|
|
children:
|
|
- is_public:
|
|
rule: Pub
|
|
build:
|
|
type: boolean
|
|
on: rule_present
|
|
- int_kw:
|
|
rule: IntKw
|
|
skip: true
|
|
- identifier
|
|
- generic_parameters:
|
|
build:
|
|
or_else_default: true
|
|
- implements_list:
|
|
build:
|
|
or_else_default: true
|
|
- declarations:
|
|
rule: InterfaceLevelDeclaration
|
|
vec: true
|
|
- end_kw:
|
|
rule: End
|
|
skip: true
|
|
Class:
|
|
children:
|
|
- is_public:
|
|
rule: Pub
|
|
build:
|
|
type: boolean
|
|
on: rule_present
|
|
- class_kw:
|
|
rule: ClassKw
|
|
skip: true
|
|
- identifier
|
|
- generic_parameters:
|
|
build:
|
|
or_else_default: true
|
|
- class_constructor:
|
|
build:
|
|
or_else_default: true
|
|
- implements_list:
|
|
build:
|
|
or_else_default: true
|
|
- class_level_declarations:
|
|
rule: ClassLevelDeclaration
|
|
vec: true
|
|
|
|
# Function constructs
|
|
Function:
|
|
children:
|
|
- is_public:
|
|
rule: Pub
|
|
build:
|
|
type: boolean
|
|
on: rule_present
|
|
- fn_kw:
|
|
rule: Fn
|
|
skip: true
|
|
- generics:
|
|
rule: GenericParameters
|
|
- identifier
|
|
- parameters
|
|
- return_type:
|
|
build:
|
|
or_else: void
|
|
- function_body
|
|
OperatorFunction:
|
|
children:
|
|
- is_public:
|
|
rule: Pub
|
|
build:
|
|
type: boolean
|
|
on: rule_present
|
|
- op_kw:
|
|
rule: Op
|
|
skip: true
|
|
- generics:
|
|
rule: GenericParameters
|
|
build:
|
|
or_else_default: true
|
|
- operator
|
|
- parameters
|
|
- return_type:
|
|
build:
|
|
or_else: void
|
|
- function_body
|
|
PlatformFunction:
|
|
children:
|
|
- is_public:
|
|
rule: Pub
|
|
build:
|
|
type: boolean
|
|
on: rule_present
|
|
- platform_kw:
|
|
rule: Platform
|
|
skip: true
|
|
- fn_kw:
|
|
rule: Fn
|
|
skip: true
|
|
- generics:
|
|
rule: GenericParameters
|
|
build:
|
|
or_else_default: true
|
|
- identifier
|
|
- parameters
|
|
- return_type
|
|
InterfaceFunction:
|
|
children:
|
|
- fn_kw:
|
|
rule: Fn
|
|
skip: true
|
|
- generics:
|
|
rule: GenericParameters
|
|
build:
|
|
or_else_default: true
|
|
- identifier
|
|
- parameters
|
|
- return_type
|
|
InterfaceDefaultFunction:
|
|
children:
|
|
- def_kw:
|
|
rule: Def
|
|
skip: true
|
|
- fn_kw:
|
|
rule: Fn
|
|
skip: true
|
|
- generics:
|
|
rule: GenericParameters
|
|
build:
|
|
or_else_default: true
|
|
- identifier
|
|
- parameters
|
|
- return_type:
|
|
build:
|
|
or_else: void
|
|
- function_body
|
|
InterfaceOperatorFunction:
|
|
children:
|
|
- op_kw:
|
|
rule: Op
|
|
skip: true
|
|
- generics:
|
|
rule: GenericParameters
|
|
build:
|
|
or_else_default: true
|
|
- operator
|
|
- parameters
|
|
- return_type
|
|
InterfaceDefaultOperatorFunction:
|
|
children:
|
|
- def_kw:
|
|
rule: Def
|
|
skip: true
|
|
- op_kw:
|
|
rule: Op
|
|
skip: true
|
|
- generics:
|
|
rule: GenericParameters
|
|
build:
|
|
or_else_default: true
|
|
- operator
|
|
- parameters
|
|
- return_type:
|
|
build:
|
|
or_else: void
|
|
- function_body
|
|
|
|
# Function Bodies
|
|
FunctionBody:
|
|
rules:
|
|
- FunctionAliasBody
|
|
- FunctionEqualsBody
|
|
- FunctionBlockBody
|
|
FunctionEqualsBody:
|
|
children:
|
|
- expression
|
|
FunctionAliasBody:
|
|
children:
|
|
- alias_kw:
|
|
rule: Alias
|
|
skip: true
|
|
- identifier
|
|
FunctionBlockBody:
|
|
children:
|
|
- statements:
|
|
rule: Statement
|
|
vec: true
|
|
- end_kw:
|
|
rule: End
|
|
skip: true
|
|
|
|
# Class constructs
|
|
ClassConstructor:
|
|
children:
|
|
- members:
|
|
rule: Member
|
|
vec: true
|
|
Member:
|
|
children:
|
|
- is_public:
|
|
rule: Pub
|
|
build:
|
|
type: boolean
|
|
on: rule_present
|
|
- is_mut:
|
|
rule: Mut
|
|
build:
|
|
type: boolean
|
|
on: rule_present
|
|
- identifier
|
|
- type_use
|
|
|
|
# Statements
|
|
Statement:
|
|
rules:
|
|
- VariableDeclaration
|
|
- AssignmentStatement
|
|
- ExpressionStatement
|
|
- UseStatement
|
|
- IfElseStatement
|
|
- IfStatementStatement
|
|
- WhileStatement
|
|
- ForStatement
|
|
VariableDeclaration:
|
|
children:
|
|
- let_kw:
|
|
rule: Let
|
|
skip: true
|
|
- is_mut:
|
|
rule: Mut
|
|
build:
|
|
type: boolean
|
|
on: rule_present
|
|
- identifier
|
|
- type_use:
|
|
optional: true
|
|
- expression:
|
|
optional: true
|
|
AssignmentStatement:
|
|
children:
|
|
- left:
|
|
rule: Expression
|
|
- right:
|
|
rule: Expression
|
|
ExpressionStatement:
|
|
children:
|
|
- expression
|
|
IfStatement:
|
|
children:
|
|
- if_clause
|
|
- if_else_ifs:
|
|
rule: IfElseIf
|
|
vec: true
|
|
- if_else
|
|
- end_kw:
|
|
rule: End
|
|
skip: true
|
|
IfClause:
|
|
children:
|
|
- if_kw:
|
|
rule: If
|
|
skip: true
|
|
- expression
|
|
- then_kw:
|
|
rule: Then
|
|
skip: true
|
|
- statements:
|
|
rule: Statement
|
|
vec: true
|
|
IfElseIf:
|
|
children:
|
|
- else_kw:
|
|
rule: Else
|
|
skip: true
|
|
- if_clause
|
|
IfElse:
|
|
children:
|
|
- else_kw:
|
|
rule: Else
|
|
skip: true
|
|
- statements:
|
|
rule: Statement
|
|
vec: true
|
|
WhileStatement:
|
|
children:
|
|
- while_kw:
|
|
rule: While
|
|
skip: true
|
|
- expression
|
|
- do_kw:
|
|
rule: Do
|
|
skip: true
|
|
- statements:
|
|
rule: Statement
|
|
vec: true
|
|
- end_kw:
|
|
rule: End
|
|
skip: true
|
|
ForStatement:
|
|
children:
|
|
- for_kw:
|
|
rule: For
|
|
skip: true
|
|
- identifier
|
|
- in_kw:
|
|
rule: In
|
|
skip: true
|
|
- expression
|
|
- do_kw:
|
|
rule: Do
|
|
skip: true
|
|
- statement:
|
|
rule: Statement
|
|
vec: true
|
|
- end_kw:
|
|
rule: End
|
|
vec: true
|
|
|
|
# Expressions
|
|
Expression:
|
|
children:
|
|
- ternary_expression
|
|
TernaryExpression:
|
|
children:
|
|
- or_expression
|
|
- ternary_alternatives:
|
|
optional: true
|
|
TernaryAlternatives:
|
|
children:
|
|
- ternary_true_alternative
|
|
- ternary_false_alternative
|
|
TernaryTrueAlternative:
|
|
children:
|
|
- expression
|
|
TernaryFalseAlternative:
|
|
children:
|
|
- expression
|
|
OrExpression:
|
|
children:
|
|
- left:
|
|
rule: AndExpression
|
|
- or_sym:
|
|
rule: Or
|
|
skip: true
|
|
- right:
|
|
rule: Expression
|
|
optional: true
|
|
AndExpression:
|
|
children:
|
|
- left:
|
|
rule: ComparisonExpression
|
|
- and_sym:
|
|
rule: And
|
|
skip: true
|
|
- right:
|
|
rule: Expression
|
|
optional: true
|
|
ComparisonExpression:
|
|
children:
|
|
- left:
|
|
rule: ShiftExpression
|
|
- operator:
|
|
rule: ComparisonOperator
|
|
optional: true
|
|
- right:
|
|
rule: Expression
|
|
optional: true
|
|
ComparisonOperator:
|
|
rules:
|
|
- Greater
|
|
- Less
|
|
- GreaterEqual
|
|
- LessEqual
|
|
- EqualTo
|
|
- NotEqualTo
|
|
ShiftExpression:
|
|
children:
|
|
- left:
|
|
rule: AdditiveExpression
|
|
- operator:
|
|
rule: ShiftOperator
|
|
optional: true
|
|
- right:
|
|
rule: Expression
|
|
ShiftOperator:
|
|
rules:
|
|
- LeftShift
|
|
- RightShift
|
|
AdditiveExpression:
|
|
children:
|
|
- left:
|
|
rule: MultiplicativeExpression
|
|
- operator:
|
|
rule: AdditiveOperator
|
|
optional: true
|
|
- right:
|
|
rule: Expression
|
|
optional: true
|
|
MultiplicativeExpression:
|
|
children:
|
|
- left:
|
|
rule: PrefixExpression
|
|
- operator:
|
|
rule: MultiplicativeOperator
|
|
optional: true
|
|
- right:
|
|
rule: Expression
|
|
MultiplicativeOperator:
|
|
type: leaf_enum
|
|
rules:
|
|
- Multiply
|
|
- Divide
|
|
- Modulo
|
|
PrefixExpression:
|
|
children:
|
|
- operators:
|
|
rule: PrefixOperator
|
|
vec: true
|
|
PrefixOperator:
|
|
type: leaf_enum
|
|
rules:
|
|
- Spread
|
|
- Not
|
|
- Negative
|
|
SuffixExpression:
|
|
children:
|
|
- left:
|
|
rule: PrimaryExpression
|
|
- operators:
|
|
rule: SuffixOperator
|
|
vec: true
|
|
SuffixOperator:
|
|
type: leaf_enum
|
|
rules:
|
|
- PlusPlus
|
|
- MinusMinus
|
|
- ObjectProperty:
|
|
child: true
|
|
- ObjectIndex:
|
|
child: true
|
|
- Call:
|
|
child: true
|
|
ObjectProperty:
|
|
children:
|
|
- identifier
|
|
ObjectIndex:
|
|
children:
|
|
- expression
|
|
PrimaryExpression:
|
|
rules:
|
|
- Literal
|
|
- FullyQualifiedName
|
|
- Closure
|
|
- ParenthesizedExpression
|
|
ParenthesizedExpression:
|
|
children:
|
|
- expression
|
|
|
|
# Calls
|
|
Call:
|
|
rules:
|
|
- ParenthesesCall
|
|
- NonParenthesesCall
|
|
ParenthesesCall:
|
|
children:
|
|
- turbo_fish:
|
|
optional: true
|
|
- expression_list:
|
|
optional: true
|
|
- closure:
|
|
optional: true
|
|
NonParenthesesCall:
|
|
children:
|
|
- turbo_fish:
|
|
optional: true
|
|
- expression_list:
|
|
optional: true
|
|
- closure:
|
|
optional: true
|
|
TurboFish:
|
|
children:
|
|
- generic_arguments
|
|
ExpressionList:
|
|
children:
|
|
- expressions:
|
|
rule: Expression
|
|
vec: true
|
|
|
|
# Closure
|
|
Closure:
|
|
children:
|
|
- closure_parameters:
|
|
build:
|
|
or_else_default: true
|
|
- statements:
|
|
rule: Statement
|
|
vec: true
|
|
ClosureParameters:
|
|
children:
|
|
- parameters:
|
|
rule: ClosureParameters
|
|
vec: true
|
|
ClosureParameter:
|
|
children:
|
|
- identifier
|
|
- type_use:
|
|
optional: true
|