aboutsummaryrefslogtreecommitdiffstats
path: root/main/Main.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/Main.java')
-rw-r--r--main/Main.java32
1 files changed, 29 insertions, 3 deletions
diff --git a/main/Main.java b/main/Main.java
index 488b9fd..b2d29e9 100644
--- a/main/Main.java
+++ b/main/Main.java
@@ -2,10 +2,15 @@ package com.jantuomi.interpreter.main;
import com.jantuomi.interpreter.main.core.CommandLineArgumentContainer;
import com.jantuomi.interpreter.main.core.parser.Parser;
+import com.jantuomi.interpreter.main.core.parser.ast.ASTNode;
+import com.jantuomi.interpreter.main.core.runtime.Interpreter;
import com.jantuomi.interpreter.main.core.tokenizer.Tokenizer;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
+import java.util.List;
+import java.util.Scanner;
+
public class Main {
public static void main(String[] args) throws Exception {
@@ -14,10 +19,31 @@ public class Main {
throw new Exception("Argument files could not be parsed successfully.");
}
- String sourceFileContents = CommandLineArgumentContainer.getInstance().getSourceFileContents();
+ 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();
+
+ run(input);
+ }
+ }
+
+ public static void run(String input) {
Tokenizer tokenizer = Tokenizer.getInstance();
- tokenizer.tokenize(sourceFileContents);
- Parser.getInstance().parse(tokenizer.getTokens());
+ tokenizer.tokenize(input);
+ List<ASTNode> nodes = Parser.getInstance().parse(tokenizer.getTokens());
+ String output = Interpreter.execute(nodes);
+ System.out.println(output);
}
public static boolean parseArguments(String[] args) {