Files
pork/ast/src/main/ast/pork.yml
2023-09-12 02:03:41 -04:00

289 lines
5.2 KiB
YAML

root: Node
types:
Expression:
parent: Node
Symbol:
parent: Node
values:
- name: id
type: String
Declaration:
parent: Node
Definition:
parent: Node
values:
- name: symbol
type: Symbol
required: true
- name: modifiers
type: DefinitionModifiers
required: true
DefinitionModifiers:
values:
- name: export
type: Boolean
Block:
parent: Node
values:
- name: expressions
type: List<Expression>
CompilationUnit:
parent: Node
values:
- name: declarations
type: List<Declaration>
- name: definitions
type: List<Definition>
LetAssignment:
parent: Expression
values:
- name: symbol
type: Symbol
- name: value
type: Expression
VarAssignment:
parent: Expression
values:
- name: symbol
type: Symbol
- name: value
type: Expression
SetAssignment:
parent: Expression
values:
- name: symbol
type: Symbol
- name: value
type: Expression
InfixOperator:
values:
- name: token
type: String
enums:
- name: Plus
values:
token: "+"
- name: Minus
values:
token: "-"
- name: Multiply
values:
token: "*"
- name: Divide
values:
token: "/"
- name: Equals
values:
token: "=="
- name: NotEquals
values:
token: "!="
- name: EuclideanModulo
values:
token: "mod"
- name: Remainder
values:
token: "rem"
- name: Lesser
values:
token: "<"
- name: Greater
values:
token: ">"
- name: GreaterEqual
values:
token: ">="
- name: LesserEqual
values:
token: "<="
- name: BooleanAnd
values:
token: "and"
- name: BooleanOr
values:
token: "or"
- name: BinaryAnd
values:
token: "&"
- name: BinaryOr
values:
token: "|"
- name: BinaryExclusiveOr
values:
token: "^"
InfixOperation:
parent: Expression
values:
- name: left
type: Expression
- name: op
type: InfixOperator
- name: right
type: Expression
BooleanLiteral:
parent: Expression
values:
- name: value
type: Boolean
FunctionCall:
parent: Expression
values:
- name: symbol
type: Symbol
- name: arguments
type: List<Expression>
ArgumentSpec:
values:
- name: symbol
type: Symbol
- name: multiple
type: Boolean
defaultValue: "false"
FunctionDefinition:
parent: Definition
values:
- name: modifiers
type: DefinitionModifiers
- name: symbol
type: Symbol
- name: arguments
type: List<ArgumentSpec>
- name: block
type: Block?
- name: native
type: Native?
LetDefinition:
parent: Definition
values:
- name: modifiers
type: DefinitionModifiers
- name: symbol
type: Symbol
- name: value
type: Expression
If:
parent: Expression
values:
- name: condition
type: Expression
- name: thenBlock
type: Block
- name: elseBlock
type: Block?
ImportDeclaration:
parent: Declaration
values:
- name: form
type: Symbol
- name: components
type: List<Symbol>
IntegerLiteral:
parent: Expression
values:
- name: value
type: Int
LongLiteral:
parent: Expression
values:
- name: value
type: Long
DoubleLiteral:
parent: Expression
values:
- name: value
type: Double
ListLiteral:
parent: Expression
values:
- name: items
type: List<Expression>
Parentheses:
parent: Expression
values:
- name: expression
type: Expression
PrefixOperator:
values:
- name: token
type: String
enums:
- name: BooleanNot
values:
token: "not"
- name: UnaryPlus
values:
token: "+"
- name: UnaryMinus
values:
token: "-"
- name: BinaryNot
values:
token: "~"
PrefixOperation:
parent: Expression
values:
- name: op
type: PrefixOperator
- name: expression
type: Expression
SuffixOperator:
values:
- name: token
type: String
enums:
- name: Increment
values:
token: "++"
- name: Decrement
values:
token: "--"
SuffixOperation:
parent: Expression
values:
- name: op
type: SuffixOperator
- name: reference
type: SymbolReference
StringLiteral:
parent: Expression
values:
- name: text
type: String
SymbolReference:
parent: Expression
values:
- name: symbol
type: Symbol
While:
parent: Expression
values:
- name: condition
type: Expression
- name: block
type: Block
ForIn:
parent: Expression
values:
- name: symbol
type: Symbol
- name: expression
type: Expression
- name: block
type: Block
Break:
parent: Expression
values: []
Continue:
parent: Expression
values: []
NoneLiteral:
parent: Expression
values: []
Native:
parent: Node
values:
- name: form
type: Symbol
- name: definition
type: StringLiteral