Files
pork/ast/src/main/ast/pork.yml

214 lines
3.8 KiB
YAML
Raw Normal View History

root: Node
types:
Expression:
parent: Node
Symbol:
parent: Node
2023-09-04 18:38:09 -07:00
values:
- name: id
type: String
Declaration:
parent: Node
Definition:
parent: Node
values:
- name: symbol
type: Symbol
2023-09-04 18:38:09 -07:00
required: true
- name: modifiers
type: DefinitionModifiers
2023-09-04 18:38:09 -07:00
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
2023-09-04 21:50:27 -07:00
type: List<Definition>
2023-09-04 18:38:09 -07:00
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
2023-09-04 18:38:09 -07:00
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: "<="
2023-09-04 18:38:09 -07:00
InfixOperation:
parent: Expression
values:
- name: left
type: Expression
- name: op
type: InfixOperator
- name: right
type: Expression
BooleanLiteral:
parent: Expression
values:
2023-09-04 18:38:09 -07:00
- name: value
type: Boolean
FunctionCall:
parent: Expression
values:
- name: symbol
type: Symbol
- name: arguments
type: List<Expression>
FunctionDefinition:
parent: Definition
values:
- name: modifiers
type: DefinitionModifiers
- name: symbol
type: Symbol
2023-09-04 18:38:09 -07:00
- name: arguments
type: List<Symbol>
- name: block
type: Block?
- name: native
type: Native?
2023-09-04 18:38:09 -07:00
If:
parent: Expression
values:
- name: condition
type: Expression
- name: thenBlock
type: Block
- name: elseBlock
type: Block?
2023-09-04 18:38:09 -07:00
ImportDeclaration:
parent: Declaration
values:
- name: form
type: Symbol
- name: components
type: List<Symbol>
2023-09-09 00:08:30 -04:00
IntegerLiteral:
2023-09-04 18:38:09 -07:00
parent: Expression
values:
- name: value
2023-09-04 18:38:09 -07:00
type: Int
2023-09-09 00:08:30 -04:00
DoubleLiteral:
parent: Expression
values:
- name: value
type: Double
2023-09-04 18:38:09 -07:00
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: Negate
values:
token: "!"
PrefixOperation:
parent: Expression
values:
- name: op
type: PrefixOperator
- name: expression
type: Expression
2023-09-04 18:38:09 -07:00
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
Break:
parent: Expression
values: []
Continue:
parent: Expression
values: []
Native:
parent: Node
values:
- name: form
type: Symbol
- name: definition
type: StringLiteral