Migrate root parser to Kotlin

This commit is contained in:
2020-03-06 23:01:24 +01:00
parent 6c77d02f32
commit e2934ef2b6
4 changed files with 29 additions and 5 deletions

View File

@@ -2,5 +2,5 @@ import interpreter.Interpreter
fun main(args: Array<String>) {
val interpreter = Interpreter()
interpreter.run("{ a = b = c = [2, 3, 4] as (i, j, k) ^ { x y z(1, 2, c(), {a -> b() }) } % i == 2 [1, xyz, [true, { 1 -> false, 2 -> { @c -> @d, @e -> false } }, [@c], 4, \"h\"]] 2 @c @d * 3.14 }")
interpreter.run("extend list<note, int> as this { function play() { play(this); return null; } function x() {} }")
}

View File

@@ -0,0 +1,5 @@
package dsl.ast.model.node
import dsl.token.model.entity.TokenPosition
class RootNode(nodes: List<Node>, position: TokenPosition) : Node(nodes, position)

View File

@@ -0,0 +1,20 @@
package dsl.ast.parser
import dsl.ast.model.entity.ParserOutput
import dsl.ast.model.node.RootNode
import dsl.token.model.entity.TokenList
class RootParser : Parser() {
override fun tryToParse(input: TokenList): ParserOutput {
return repeat(
oneOf(
ImportParser(),
FunctionDefinitionParser(),
ExtendParser(),
StatementParser()
)
) { list, tokenPosition ->
RootNode(list, tokenPosition)
}.parse(input)
}
}

View File

@@ -1,18 +1,17 @@
package interpreter
import dsl.ast.model.node.Node
import dsl.ast.parser.Parser
import dsl.ast.parser.StatementParser
import dsl.ast.parser.RootParser
import dsl.token.tokenizer.DefaultTokenizer
import java.io.File
class Interpreter {
fun run(code: String) {
val tokenizer = DefaultTokenizer()
val parser = RootParser()
val lines = code.split("\n")
val tokens = tokenizer.tokenize(lines)
val ast = Parser.repeat(StatementParser()) { nodes, pos -> object : Node(nodes, pos) {} }.parse(tokens)
val ast = parser.parse(tokens)
ast.node.pretty()
println(tokens)