From 4226c6d9baae9367afd0b05693dd9fc36e36b29a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Fri, 13 Mar 2020 10:07:19 +0100 Subject: [PATCH] Improve interpreter --- .../kotlin/io/smnp/interpreter/Interpreter.kt | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/app/src/main/kotlin/io/smnp/interpreter/Interpreter.kt b/app/src/main/kotlin/io/smnp/interpreter/Interpreter.kt index 9649189..53deb54 100644 --- a/app/src/main/kotlin/io/smnp/interpreter/Interpreter.kt +++ b/app/src/main/kotlin/io/smnp/interpreter/Interpreter.kt @@ -13,16 +13,25 @@ class Interpreter { private val parser = RootParser() private val evaluator = RootEvaluator() - fun run(code: String) { + fun run(code: String, printTokens: Boolean = false, printAst: Boolean = false, dryRun: Boolean = false) { val lines = code.split("\n") + run(lines, printTokens, printAst, dryRun) + } + + private fun run(lines: List, printTokens: Boolean = false, printAst: Boolean = false, dryRun: Boolean = false) { val tokens = tokenizer.tokenize(lines) val ast = parser.parse(tokens) - val environment = createEnvironment() - val result = evaluator.evaluate(ast.node, environment) + if(printTokens) println(tokens) + if(printAst) ast.node.pretty() - if(result.result == EvaluationResult.FAILED) { - throw RuntimeException("Evaluation failed") + if(!dryRun) { + val environment = createEnvironment() + val result = evaluator.evaluate(ast.node, environment) + + if(result.result == EvaluationResult.FAILED) { + throw RuntimeException("Evaluation failed") + } } } @@ -33,12 +42,8 @@ class Interpreter { return environment } - fun run(file: File) { + fun run(file: File, printTokens: Boolean = false, printAst: Boolean = false, dryRun: Boolean = false) { val lines = file.readLines() - val tokens = tokenizer.tokenize(lines) - val ast = parser.parse(tokens) - - val environment = createEnvironment() - evaluator.evaluate(ast.node, environment) + run(lines, printTokens, printAst, dryRun) } } \ No newline at end of file