From 8234767203a7f673b12c8f51b83762c511274366 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Tue, 26 Jul 2016 19:43:13 +0300 Subject: Rename project to tunkki --- src/main/com/jantuomi/tunkki/Main.java | 90 ++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/main/com/jantuomi/tunkki/Main.java (limited to 'src/main/com/jantuomi/tunkki/Main.java') diff --git a/src/main/com/jantuomi/tunkki/Main.java b/src/main/com/jantuomi/tunkki/Main.java new file mode 100644 index 0000000..76f1d40 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/Main.java @@ -0,0 +1,90 @@ +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.BorkError; +import org.kohsuke.args4j.CmdLineException; +import org.kohsuke.args4j.CmdLineParser; + +import java.util.Collections; +import java.util.List; +import java.util.Scanner; + +public class Main { + + public static void main(String[] args) throws Exception { + boolean parseSuccess = parseArguments(args); + if (!parseSuccess) { + return; + } + + if (CommandLineArgumentContainer.getInstance().isInteractive()) { + repl(); + } else { + String sourceFileContents = CommandLineArgumentContainer.getInstance().getSourceFileContents(); + run(sourceFileContents); + } + } + + public static void repl() { + Scanner scanner = new Scanner(System.in); + String input; + while (true) { + System.out.print(">> "); + input = scanner.nextLine(); + + try { + run(input); + } catch (BorkError e) { + e.printStackTrace(); + } + } + } + + public static void run(String input) throws BorkError { + Tokenizer tokenizer = Tokenizer.getInstance(); + List sequence = tokenizer.tokenize(input); + + Collections.reverse(sequence); + + List trees = Parser.getInstance().parse(sequence); + if (CommandLineArgumentContainer.getInstance().isDebugModeActive()) { + Parser.getInstance().printAllTrees(trees); + } + + List 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; + } +} -- cgit v1.3