diff --git a/src/main/kotlin/SMNP.kt b/src/main/kotlin/SMNP.kt index 169d47a..c39ae61 100644 --- a/src/main/kotlin/SMNP.kt +++ b/src/main/kotlin/SMNP.kt @@ -2,5 +2,5 @@ import interpreter.Interpreter fun main(args: Array) { 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 as this { function play() { play(this); return null; } function x() {} }") } \ No newline at end of file diff --git a/src/main/kotlin/dsl/ast/model/node/RootNode.kt b/src/main/kotlin/dsl/ast/model/node/RootNode.kt new file mode 100644 index 0000000..d52e56a --- /dev/null +++ b/src/main/kotlin/dsl/ast/model/node/RootNode.kt @@ -0,0 +1,5 @@ +package dsl.ast.model.node + +import dsl.token.model.entity.TokenPosition + +class RootNode(nodes: List, position: TokenPosition) : Node(nodes, position) \ No newline at end of file diff --git a/src/main/kotlin/dsl/ast/parser/RootParser.kt b/src/main/kotlin/dsl/ast/parser/RootParser.kt new file mode 100644 index 0000000..35eefc0 --- /dev/null +++ b/src/main/kotlin/dsl/ast/parser/RootParser.kt @@ -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) + } +} \ No newline at end of file diff --git a/src/main/kotlin/interpreter/Interpreter.kt b/src/main/kotlin/interpreter/Interpreter.kt index b092933..f98d0ac 100644 --- a/src/main/kotlin/interpreter/Interpreter.kt +++ b/src/main/kotlin/interpreter/Interpreter.kt @@ -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)