diff options
| author | Jan Tuomi <jan-sebastian.tuomi@aalto.fi> | 2016-07-31 22:50:34 +0300 |
|---|---|---|
| committer | Jan Tuomi <jan-sebastian.tuomi@aalto.fi> | 2016-07-31 22:50:34 +0300 |
| commit | 20a3fb57ae9ee1e70a2d57169742d481eac82fe9 (patch) | |
| tree | 7c464d9ecc6274a3b43762b17e2dacec2d267c30 /src/main/com/jantuomi/tunkki/Tunkki.java | |
| parent | ae7275e7ab7ea2b4599b613454d4c1149855bced (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.java | 83 |
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"; + } +} |
