aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/com/jantuomi/tunkki/Tunkki.java
diff options
context:
space:
mode:
authorJan Tuomi <jan-sebastian.tuomi@aalto.fi>2016-07-31 22:50:34 +0300
committerJan Tuomi <jan-sebastian.tuomi@aalto.fi>2016-07-31 22:50:34 +0300
commit20a3fb57ae9ee1e70a2d57169742d481eac82fe9 (patch)
tree7c464d9ecc6274a3b43762b17e2dacec2d267c30 /src/main/com/jantuomi/tunkki/Tunkki.java
parentae7275e7ab7ea2b4599b613454d4c1149855bced (diff)
Implement enhanced REPL, relates to #13
Add command history and welcome message
Diffstat (limited to 'src/main/com/jantuomi/tunkki/Tunkki.java')
-rw-r--r--src/main/com/jantuomi/tunkki/Tunkki.java83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/main/com/jantuomi/tunkki/Tunkki.java b/src/main/com/jantuomi/tunkki/Tunkki.java
new file mode 100644
index 0000000..a4120a8
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/Tunkki.java
@@ -0,0 +1,83 @@
+package com.jantuomi.tunkki;
+
+import com.jantuomi.tunkki.core.CommandLineArgumentContainer;
+import com.jantuomi.tunkki.core.parser.ASTGenerator;
+import com.jantuomi.tunkki.core.parser.Parser;
+import com.jantuomi.tunkki.core.parser.ast.ASTNode;
+import com.jantuomi.tunkki.core.runtime.Interpreter;
+import com.jantuomi.tunkki.core.tokenizer.Tokenizer;
+import com.jantuomi.tunkki.core.tokenizer.token.Token;
+import com.jantuomi.tunkki.exception.TunkkiError;
+import com.jantuomi.tunkki.repl.Repl;
+import org.kohsuke.args4j.CmdLineException;
+import org.kohsuke.args4j.CmdLineParser;
+import sun.awt.X11.XToolkit;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Scanner;
+
+public class Tunkki {
+
+ private static Tunkki instance;
+
+ public Tunkki() {
+ instance = this;
+ }
+
+ public static Tunkki getInstance() {
+ return instance;
+ }
+
+ public void repl() throws InterruptedException, IOException {
+ Repl repl = new Repl(this);
+ repl.run();
+ }
+
+ public void run(String input) throws TunkkiError {
+ Tokenizer tokenizer = Tokenizer.getInstance();
+ List<Token> sequence = tokenizer.tokenize(input);
+
+ Collections.reverse(sequence);
+
+ List<Token> trees = Parser.getInstance().parse(sequence);
+ if (CommandLineArgumentContainer.getInstance().isDebugModeActive()) {
+ Parser.getInstance().printAllTrees(trees);
+ }
+
+ List<ASTNode> nodes = ASTGenerator.getInstance().generate(trees);
+ if (CommandLineArgumentContainer.getInstance().isDebugModeActive()) {
+ ASTGenerator.getInstance().printAllTrees(nodes);
+ }
+
+ String output = Interpreter.execute(nodes);
+
+ if (output.trim().length() > 0) {
+ System.out.println(output);
+ }
+ }
+
+ public boolean parseArguments(String[] args) {
+ CommandLineArgumentContainer container = CommandLineArgumentContainer.getInstance();
+ CmdLineParser parser = new CmdLineParser(container);
+
+
+ try {
+ if (args.length == 0) {
+ throw new CmdLineException("Please provide an argument.");
+ }
+ parser.parseArgument(args);
+ } catch (CmdLineException e) {
+ System.err.println(e.getMessage());
+ parser.printUsage(System.err);
+ return false;
+ }
+
+ return true;
+ }
+
+ public String versionString() {
+ return "ALPHA";
+ }
+}