aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/com/jantuomi/tunkki/Main.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/Main.java
parentae7275e7ab7ea2b4599b613454d4c1149855bced (diff)
Implement enhanced REPL, relates to #13
Add command history and welcome message
Diffstat (limited to 'src/main/com/jantuomi/tunkki/Main.java')
-rw-r--r--src/main/com/jantuomi/tunkki/Main.java68
1 files changed, 8 insertions, 60 deletions
diff --git a/src/main/com/jantuomi/tunkki/Main.java b/src/main/com/jantuomi/tunkki/Main.java
index 5148b68..37979ab 100644
--- a/src/main/com/jantuomi/tunkki/Main.java
+++ b/src/main/com/jantuomi/tunkki/Main.java
@@ -8,6 +8,7 @@ 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;
@@ -17,75 +18,22 @@ import java.util.Scanner;
public class Main {
+ private static Tunkki tunkki;
+
public static void main(String[] args) throws Exception {
- boolean parseSuccess = parseArguments(args);
+ tunkki = new Tunkki();
+
+ boolean parseSuccess = tunkki.parseArguments(args);
if (!parseSuccess) {
return;
}
if (CommandLineArgumentContainer.getInstance().isInteractive()) {
- repl();
+ tunkki.repl();
} else {
String sourceFileContents = CommandLineArgumentContainer.getInstance().getSourceFileContents();
- run(sourceFileContents);
- }
- }
-
- public static void repl() throws InterruptedException {
- Scanner scanner = new Scanner(System.in);
- String input;
- while (true) {
- System.out.print(">> ");
- input = scanner.nextLine();
-
- try {
- run(input);
- } catch (TunkkiError e) {
- e.printStackTrace();
- Thread.sleep(50);
- }
+ tunkki.run(sourceFileContents);
}
}
- public static 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 static 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;
- }
}