aboutsummaryrefslogtreecommitdiffstats
path: root/main/Main.java
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2016-06-15 21:56:03 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2016-07-26 19:46:51 +0300
commitf441022881945db08846e09a8f3bfee2f8cfa95d (patch)
tree3b565c6902e5b5b6c351df89fe1d58b00d79f091 /main/Main.java
parent12eeefcdba1ee392f033f51e6b9826eaae3c4de6 (diff)
Add interpreter and AST
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) {