aboutsummaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
authorjantuomi <jans.tuomi@gmail.com>2016-08-30 16:50:00 +0300
committerjantuomi <jans.tuomi@gmail.com>2016-08-30 16:50:00 +0300
commit7abd9bde5724aaa95751bc9b69ee0cb49c4fd399 (patch)
treed8f2de5ade3ff92fbb2d43d03add02a4d63daf34 /src/main
parenta6bb3d4f3789fab2842600bed1816515de1b5aaf (diff)
Include calls now always return an object containing the library scopemaster
Resolves #15
Diffstat (limited to 'src/main')
-rw-r--r--src/main/com/jantuomi/tunkki/Main.java6
-rw-r--r--src/main/com/jantuomi/tunkki/Tunkki.java6
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/ast/ParameterListNode.java2
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java1
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/Function.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/ModuleContainerFunction.java50
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/UserDefinedFunction.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java4
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java2
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IfBuiltinFunction.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java21
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java2
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java4
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java4
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/InputBuiltinFunction.java4
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/OutputBuiltinFunction.java2
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java2
-rw-r--r--src/main/com/jantuomi/tunkki/repl/Repl.java7
20 files changed, 92 insertions, 50 deletions
diff --git a/src/main/com/jantuomi/tunkki/Main.java b/src/main/com/jantuomi/tunkki/Main.java
index 098f0ff..dd4b2ea 100644
--- a/src/main/com/jantuomi/tunkki/Main.java
+++ b/src/main/com/jantuomi/tunkki/Main.java
@@ -1,6 +1,9 @@
package com.jantuomi.tunkki;
import com.jantuomi.tunkki.core.CommandLineArgumentContainer;
+import com.jantuomi.tunkki.core.parser.ast.ASTNode;
+
+import java.util.List;
public class Main {
@@ -18,7 +21,8 @@ public class Main {
tunkki.repl();
} else {
String sourceFileContents = CommandLineArgumentContainer.getInstance().getSourceFileContents();
- tunkki.run(sourceFileContents);
+ List<ASTNode> nodes = tunkki.parseAndInterpret(sourceFileContents);
+ tunkki.executeAndOutput(nodes);
}
}
diff --git a/src/main/com/jantuomi/tunkki/Tunkki.java b/src/main/com/jantuomi/tunkki/Tunkki.java
index 3100d95..0b02d3e 100644
--- a/src/main/com/jantuomi/tunkki/Tunkki.java
+++ b/src/main/com/jantuomi/tunkki/Tunkki.java
@@ -34,7 +34,7 @@ public class Tunkki {
repl.run();
}
- public void run(String input) throws TunkkiError {
+ public List<ASTNode> parseAndInterpret(String input) throws TunkkiError {
Tokenizer tokenizer = Tokenizer.getInstance();
List<Token> sequence = tokenizer.tokenize(input);
@@ -50,6 +50,10 @@ public class Tunkki {
ASTGenerator.getInstance().printAllTrees(nodes);
}
+ return nodes;
+ }
+
+ public void executeAndOutput(List<ASTNode> nodes) throws TunkkiError {
String output = Interpreter.execute(nodes);
if (output.trim().length() > 0) {
diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/ParameterListNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/ParameterListNode.java
index a05eaee..fb67e68 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/ast/ParameterListNode.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/ast/ParameterListNode.java
@@ -27,7 +27,7 @@ public class ParameterListNode extends ASTNode {
@Override
public Datatype evaluate() {
- // TODO use State to evaluate function
+ // TODO use State to executeBlock function
return null;
}
diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java
index 8ee4148..2023993 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java
@@ -1,7 +1,6 @@
package com.jantuomi.tunkki.core.parser.datatype;
import com.jantuomi.tunkki.core.runtime.Function;
-import com.jantuomi.tunkki.core.runtime.UserDefinedFunction;
import com.jantuomi.tunkki.exception.types.TunkkiError;
import java.util.List;
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/Function.java b/src/main/com/jantuomi/tunkki/core/runtime/Function.java
index ad120f6..34bc06b 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/Function.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/Function.java
@@ -41,11 +41,14 @@ abstract public class Function {
throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
+ Datatype returnValue = executeBlock(params);
getState().popScope();
- return null;
+ return returnValue;
}
+ abstract public Datatype executeBlock(List<Datatype> params) throws TunkkiError;
+
protected boolean checkArgumentListValidity(List<Datatype> params) throws FunctionArgumentTunkkiError {
int argumentCount = getArgumentCount();
boolean isSizeCorrect;
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/ModuleContainerFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/ModuleContainerFunction.java
new file mode 100644
index 0000000..066cff7
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/core/runtime/ModuleContainerFunction.java
@@ -0,0 +1,50 @@
+package com.jantuomi.tunkki.core.runtime;
+
+import com.jantuomi.tunkki.core.parser.ast.ASTNode;
+import com.jantuomi.tunkki.core.parser.ast.BlockBodyNode;
+import com.jantuomi.tunkki.core.parser.datatype.Datatype;
+import com.jantuomi.tunkki.core.parser.datatype.VoidDatatype;
+import com.jantuomi.tunkki.exception.types.TunkkiError;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Created by jan on 30.8.2016.
+ */
+public class ModuleContainerFunction extends Function {
+
+ List<ASTNode> nodes;
+
+ public ModuleContainerFunction(List<ASTNode> nodes) {
+ super(Collections.emptyList(), null);
+ this.nodes = nodes;
+ }
+
+ @Override
+ public Datatype executeBlock(List<Datatype> params) throws TunkkiError {
+ Datatype returnValue = new VoidDatatype();
+
+ for (ASTNode node : nodes) {
+ returnValue = node.evaluate();
+ }
+
+ return returnValue;
+ }
+
+ @Override
+ public boolean hasVariableArgumentList() {
+ return false;
+ }
+
+ @Override
+ public boolean hasDynamicallyTypedArguments() {
+ return false;
+ }
+
+ @Override
+ public List<Set<Datatype.Type>> getArgumentTypes() {
+ return null;
+ }
+}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/UserDefinedFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/UserDefinedFunction.java
index c094d91..e923c27 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/UserDefinedFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/UserDefinedFunction.java
@@ -16,9 +16,7 @@ public class UserDefinedFunction extends Function {
}
@Override
- public Datatype evaluate(List<Datatype> params) throws TunkkiError {
-
- super.evaluate(params);
+ public Datatype executeBlock(List<Datatype> params) throws TunkkiError {
for (int i = 0; i < argumentNames.size(); i++) {
State.getGlobalState().addSymbolToScope(argumentNames.get(i));
@@ -26,7 +24,6 @@ public class UserDefinedFunction extends Function {
}
Datatype returnValue = body.evaluate();
- State.getGlobalState().popScope();
return returnValue;
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java
index bd0a627..4ddc7ac 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java
@@ -4,7 +4,6 @@ import com.jantuomi.tunkki.core.parser.datatype.Datatype;
import com.jantuomi.tunkki.core.parser.datatype.StringDatatype;
import com.jantuomi.tunkki.exception.types.TunkkiError;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
@@ -20,9 +19,7 @@ public class ConcatBuiltinFunction extends BuiltinFunction {
}
@Override
- public Datatype evaluate(List<Datatype> params) throws TunkkiError {
- super.evaluate(params);
-
+ public Datatype executeBlock(List<Datatype> params) throws TunkkiError {
StringBuilder sb = new StringBuilder();
for (Datatype d : params) {
sb.append(d.getData());
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java
index 5e1a9b0..6f1dc5e 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java
@@ -20,9 +20,7 @@ public class ContainsBuiltinFunction extends BuiltinFunction {
}
@Override
- public Datatype evaluate(List<Datatype> params) throws TunkkiError {
- super.evaluate(params);
-
+ public Datatype executeBlock(List<Datatype> params) throws TunkkiError {
if (params.get(0).getType() == Datatype.Type.List) {
return evaluateOnList(params);
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java
index 20e40fc..b38b2de 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java
@@ -2,7 +2,6 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals;
import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype;
import com.jantuomi.tunkki.core.parser.datatype.Datatype;
-import com.jantuomi.tunkki.exception.types.FunctionArgumentTunkkiError;
import com.jantuomi.tunkki.exception.types.TunkkiError;
import com.jantuomi.tunkki.exception.types.TypeTunkkiError;
@@ -20,9 +19,7 @@ public class EqualsBuiltinFunction extends BuiltinFunction {
}
@Override
- public Datatype evaluate(List<Datatype> params) throws TunkkiError {
- super.evaluate(params);
-
+ public Datatype executeBlock(List<Datatype> params) throws TunkkiError {
Datatype lhs = params.get(0);
Datatype rhs = params.get(1);
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java
index 33a9170..af0ac8a 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java
@@ -20,7 +20,7 @@ public class GetBuiltinFunction extends BuiltinFunction {
}
@Override
- public Datatype evaluate(List<Datatype> params) throws TunkkiError {
+ public Datatype executeBlock(List<Datatype> params) throws TunkkiError {
if (params.size() != 2) {
throw new FunctionArgumentTunkkiError(-1, params.toString());
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IfBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IfBuiltinFunction.java
index 1156958..2b999a9 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IfBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IfBuiltinFunction.java
@@ -4,7 +4,6 @@ import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype;
import com.jantuomi.tunkki.core.parser.datatype.CallableDatatype;
import com.jantuomi.tunkki.core.parser.datatype.Datatype;
import com.jantuomi.tunkki.core.parser.datatype.VoidDatatype;
-import com.jantuomi.tunkki.core.runtime.Function;
import com.jantuomi.tunkki.exception.types.FunctionArgumentTunkkiError;
import com.jantuomi.tunkki.exception.types.TunkkiError;
@@ -22,9 +21,7 @@ public class IfBuiltinFunction extends BuiltinFunction {
}
@Override
- public Datatype evaluate(List<Datatype> params) throws TunkkiError {
- super.evaluate(params);
-
+ public Datatype executeBlock(List<Datatype> params) throws TunkkiError {
if (params.size() != 2) {
throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java
index d2c6f31..d27ef91 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java
@@ -3,8 +3,10 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals;
import com.jantuomi.tunkki.Tunkki;
import com.jantuomi.tunkki.core.CommandLineArgumentContainer;
+import com.jantuomi.tunkki.core.parser.ast.ASTNode;
+import com.jantuomi.tunkki.core.parser.ast.ObjectPrototypeNode;
import com.jantuomi.tunkki.core.parser.datatype.*;
-import com.jantuomi.tunkki.core.runtime.State;
+import com.jantuomi.tunkki.core.runtime.ModuleContainerFunction;
import com.jantuomi.tunkki.core.runtime.builtins.BuiltinManager;
import com.jantuomi.tunkki.exception.types.*;
@@ -25,9 +27,7 @@ public class IncludeBuiltinFunction extends BuiltinFunction {
}
@Override
- public Datatype evaluate(List<Datatype> params) throws TunkkiError {
- super.evaluate(params);
-
+ public Datatype executeBlock(List<Datatype> params) throws TunkkiError {
StringDatatype param = (StringDatatype) params.get(0);
String filename = param.getData();
@@ -38,9 +38,7 @@ public class IncludeBuiltinFunction extends BuiltinFunction {
for (String funcName : funcs.keySet()) {
namespace.getData().addAndSetVariable(funcName, funcs.get(funcName));
}
- State.getGlobalState().addSymbolToScope(filename);
- State.getGlobalState().setSymbolValueToScope(filename, namespace);
-
+ return namespace;
}
else {
String contents = CommandLineArgumentContainer.getInstance().readFileContents(filename);
@@ -56,10 +54,13 @@ public class IncludeBuiltinFunction extends BuiltinFunction {
throw new RecursiveIncludeTunkkiError(-1, filename);
}
- Tunkki.getInstance().run(contents);
+ List<ASTNode> nodes = Tunkki.getInstance().parseAndInterpret(contents);
+ ModuleContainerFunction func = new ModuleContainerFunction(nodes);
+ ObjectPrototypeDatatype proto = new ObjectPrototypeDatatype();
+ proto.setData(func);
+ ObjectDatatype namespace = proto.instantiate();
+ return namespace;
}
-
- return new VoidDatatype();
}
@Override
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java
index 58629fc..e223956 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java
@@ -18,7 +18,7 @@ public class ListBuiltinFunction extends BuiltinFunction {
}
@Override
- public Datatype evaluate(List<Datatype> params) throws TunkkiError {
+ public Datatype executeBlock(List<Datatype> params) throws TunkkiError {
ListDatatype data = new ListDatatype(params);
return data;
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java
index e46b88c..b45e6af 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java
@@ -20,9 +20,7 @@ public class AsBooleanBuiltinFunction extends BuiltinFunction {
}
@Override
- public BooleanDatatype evaluate(List<Datatype> params) throws TunkkiError {
- super.evaluate(params);
-
+ public BooleanDatatype executeBlock(List<Datatype> params) throws TunkkiError {
Datatype param = params.get(0);
switch (param.getType()) {
case Integer:
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java
index 6bd45ca..255c068 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java
@@ -20,9 +20,7 @@ public class AsIntBuiltinFunction extends BuiltinFunction {
}
@Override
- public IntegerDatatype evaluate(List<Datatype> params) throws TunkkiError {
- super.evaluate(params);
-
+ public IntegerDatatype executeBlock(List<Datatype> params) throws TunkkiError {
Datatype param = params.get(0);
int i;
switch (param.getType()) {
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/InputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/InputBuiltinFunction.java
index 47e6f23..3f5b7a6 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/InputBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/InputBuiltinFunction.java
@@ -21,9 +21,7 @@ public class InputBuiltinFunction extends BuiltinFunction {
}
@Override
- public Datatype evaluate(List<Datatype> params) throws TunkkiError {
- super.evaluate(params);
-
+ public Datatype executeBlock(List<Datatype> params) throws TunkkiError {
Datatype param = params.get(0);
System.out.print(param.getData().toString());
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/OutputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/OutputBuiltinFunction.java
index 682c69f..175f5c0 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/OutputBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/OutputBuiltinFunction.java
@@ -21,7 +21,7 @@ public class OutputBuiltinFunction extends BuiltinFunction {
}
@Override
- public Datatype evaluate(List<Datatype> params) throws TunkkiError {
+ public Datatype executeBlock(List<Datatype> params) throws TunkkiError {
Datatype param = params.get(0);
//IO.getInstance().printLine(param.toString());
System.out.println(param.toString());
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java
index f426456..f8b4eb0 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java
@@ -20,7 +20,7 @@ public class PowerBuiltinFunction extends BuiltinFunction {
}
@Override
- public Datatype evaluate(List<Datatype> params) throws TunkkiError {
+ public Datatype executeBlock(List<Datatype> params) throws TunkkiError {
if (params.size() != 2) {
throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
diff --git a/src/main/com/jantuomi/tunkki/repl/Repl.java b/src/main/com/jantuomi/tunkki/repl/Repl.java
index 0b415b8..e960894 100644
--- a/src/main/com/jantuomi/tunkki/repl/Repl.java
+++ b/src/main/com/jantuomi/tunkki/repl/Repl.java
@@ -1,12 +1,12 @@
package com.jantuomi.tunkki.repl;
import com.jantuomi.tunkki.Tunkki;
+import com.jantuomi.tunkki.core.parser.ast.ASTNode;
import com.jantuomi.tunkki.exception.types.TunkkiError;
import com.jantuomi.tunkki.utils.IO;
-import jline.console.*;
import java.io.IOException;
-import java.io.PrintWriter;
+import java.util.List;
/**
* Created by jan on 31.7.2016.
@@ -39,7 +39,8 @@ public class Repl {
try {
isMultilineInput = false;
command += line;
- tunkki.run(command);
+ List<ASTNode> nodes = tunkki.parseAndInterpret(command);
+ tunkki.executeAndOutput(nodes);
} catch (TunkkiError ex) {
ex.printStackTrace();
Thread.sleep(50);