deimos-lang/src/parser/ast.yaml
2025-09-07 18:42:25 -05:00

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