Migrate root parser to Kotlin
This commit is contained in:
@@ -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() {} }")
|
||||
}
|
||||
5
src/main/kotlin/dsl/ast/model/node/RootNode.kt
Normal file
5
src/main/kotlin/dsl/ast/model/node/RootNode.kt
Normal 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)
|
||||
20
src/main/kotlin/dsl/ast/parser/RootParser.kt
Normal file
20
src/main/kotlin/dsl/ast/parser/RootParser.kt
Normal 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)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user