mirror of
https://github.com/GayPizzaSpecifications/pork.git
synced 2025-08-03 21:21:33 +00:00
parser: rewrite to be able to parse any node type on demand
This commit is contained in:
66
ast/src/main/kotlin/gay/pizza/pork/ast/NodeParser.kt
Normal file
66
ast/src/main/kotlin/gay/pizza/pork/ast/NodeParser.kt
Normal file
@ -0,0 +1,66 @@
|
||||
// GENERATED CODE FROM PORK AST CODEGEN
|
||||
package gay.pizza.pork.ast
|
||||
|
||||
interface NodeParser {
|
||||
fun parseBlock(): Block
|
||||
|
||||
fun parseExpression(): Expression
|
||||
|
||||
fun parseBooleanLiteral(): BooleanLiteral
|
||||
|
||||
fun parseBreak(): Break
|
||||
|
||||
fun parseCompilationUnit(): CompilationUnit
|
||||
|
||||
fun parseContinue(): Continue
|
||||
|
||||
fun parseDeclaration(): Declaration
|
||||
|
||||
fun parseDefinition(): Definition
|
||||
|
||||
fun parseDoubleLiteral(): DoubleLiteral
|
||||
|
||||
fun parseForIn(): ForIn
|
||||
|
||||
fun parseFunctionCall(): FunctionCall
|
||||
|
||||
fun parseFunctionDefinition(): FunctionDefinition
|
||||
|
||||
fun parseIf(): If
|
||||
|
||||
fun parseImportDeclaration(): ImportDeclaration
|
||||
|
||||
fun parseInfixOperation(): InfixOperation
|
||||
|
||||
fun parseIntegerLiteral(): IntegerLiteral
|
||||
|
||||
fun parseLetAssignment(): LetAssignment
|
||||
|
||||
fun parseLetDefinition(): LetDefinition
|
||||
|
||||
fun parseListLiteral(): ListLiteral
|
||||
|
||||
fun parseLongLiteral(): LongLiteral
|
||||
|
||||
fun parseNative(): Native
|
||||
|
||||
fun parseNoneLiteral(): NoneLiteral
|
||||
|
||||
fun parseParentheses(): Parentheses
|
||||
|
||||
fun parsePrefixOperation(): PrefixOperation
|
||||
|
||||
fun parseSetAssignment(): SetAssignment
|
||||
|
||||
fun parseStringLiteral(): StringLiteral
|
||||
|
||||
fun parseSuffixOperation(): SuffixOperation
|
||||
|
||||
fun parseSymbol(): Symbol
|
||||
|
||||
fun parseSymbolReference(): SymbolReference
|
||||
|
||||
fun parseVarAssignment(): VarAssignment
|
||||
|
||||
fun parseWhile(): While
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
// GENERATED CODE FROM PORK AST CODEGEN
|
||||
package gay.pizza.pork.ast
|
||||
|
||||
fun NodeParser.parse(type: NodeType): Node =
|
||||
when (type) {
|
||||
NodeType.Expression -> parseExpression()
|
||||
NodeType.Symbol -> parseSymbol()
|
||||
NodeType.Declaration -> parseDeclaration()
|
||||
NodeType.Definition -> parseDefinition()
|
||||
NodeType.Block -> parseBlock()
|
||||
NodeType.CompilationUnit -> parseCompilationUnit()
|
||||
NodeType.LetAssignment -> parseLetAssignment()
|
||||
NodeType.VarAssignment -> parseVarAssignment()
|
||||
NodeType.SetAssignment -> parseSetAssignment()
|
||||
NodeType.InfixOperation -> parseInfixOperation()
|
||||
NodeType.BooleanLiteral -> parseBooleanLiteral()
|
||||
NodeType.FunctionCall -> parseFunctionCall()
|
||||
NodeType.FunctionDefinition -> parseFunctionDefinition()
|
||||
NodeType.LetDefinition -> parseLetDefinition()
|
||||
NodeType.If -> parseIf()
|
||||
NodeType.ImportDeclaration -> parseImportDeclaration()
|
||||
NodeType.IntegerLiteral -> parseIntegerLiteral()
|
||||
NodeType.LongLiteral -> parseLongLiteral()
|
||||
NodeType.DoubleLiteral -> parseDoubleLiteral()
|
||||
NodeType.ListLiteral -> parseListLiteral()
|
||||
NodeType.Parentheses -> parseParentheses()
|
||||
NodeType.PrefixOperation -> parsePrefixOperation()
|
||||
NodeType.SuffixOperation -> parseSuffixOperation()
|
||||
NodeType.StringLiteral -> parseStringLiteral()
|
||||
NodeType.SymbolReference -> parseSymbolReference()
|
||||
NodeType.While -> parseWhile()
|
||||
NodeType.ForIn -> parseForIn()
|
||||
NodeType.Break -> parseBreak()
|
||||
NodeType.Continue -> parseContinue()
|
||||
NodeType.NoneLiteral -> parseNoneLiteral()
|
||||
NodeType.Native -> parseNative()
|
||||
else -> throw RuntimeException("Unable to automatically parse type: ${type.name}")
|
||||
}
|
Reference in New Issue
Block a user