314 lines
5.8 KiB
YAML
314 lines
5.8 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
|