summaryrefslogtreecommitdiff
path: root/base/src/bjc/dicelang/expr/ExprREPL.java
diff options
context:
space:
mode:
authorstudent <student@localhost>2018-02-12 13:56:22 -0500
committerstudent <student@localhost>2018-02-12 13:56:22 -0500
commit5115f1d2a7eab41436debc696870953e18a1b236 (patch)
treedbb2453580038b9f8102bb5bc53c60d2410f0f00 /base/src/bjc/dicelang/expr/ExprREPL.java
parent4c8639f361983d97a7b46282b12528b550fff946 (diff)
General update
Diffstat (limited to 'base/src/bjc/dicelang/expr/ExprREPL.java')
-rw-r--r--base/src/bjc/dicelang/expr/ExprREPL.java96
1 files changed, 96 insertions, 0 deletions
diff --git a/base/src/bjc/dicelang/expr/ExprREPL.java b/base/src/bjc/dicelang/expr/ExprREPL.java
new file mode 100644
index 0000000..84149a0
--- /dev/null
+++ b/base/src/bjc/dicelang/expr/ExprREPL.java
@@ -0,0 +1,96 @@
+package bjc.dicelang.expr;
+
+import java.util.Scanner;
+
+import bjc.utils.data.ITree;
+import bjc.utils.funcdata.IList;
+import bjc.utils.parserutils.TreeConstructor;
+
+public class ExprREPL {
+
+ /*
+ * @TODO 10/08/17 Ben Culkin :MainSeperation
+ *
+ * This main method should be moved to its own class.
+ */
+ /**
+ * Main method.
+ *
+ * @param args
+ * Unused CLI args.
+ */
+ public static void main(final String[] args) {
+ /* Create our objects. */
+ final Tokens toks = new Tokens();
+ final Lexer lex = new Lexer();
+
+ /* Prepare our input source. */
+ final Scanner scan = new Scanner(System.in);
+
+ /* Read initial command. */
+ System.out.print("Enter a math expression (blank line to quit): ");
+ String ln = scan.nextLine().trim();
+
+ /* Enter REPL loop. */
+ while (!ln.equals("")) {
+ /* Print raw command. */
+ System.out.println("Raw command: " + ln);
+ System.out.println();
+
+ /* Lex command to infix tokens. */
+ final Token[] infixTokens = lex.lexString(ln, toks);
+ System.out.println("Lexed tokens: ");
+ for (final Token tok : infixTokens) {
+ System.out.println("\t" + tok);
+ }
+
+ /* Print out infix expression. */
+ System.out.print("Lexed expression: ");
+ for (final Token tok : infixTokens) {
+ System.out.print(tok.toExpr() + " ");
+ }
+
+ /* Space stages. */
+ System.out.println();
+ System.out.println();
+
+ /* Shunt infix tokens to postfix tokens. */
+ final IList<Token> postfixTokens = Shunter.shuntTokens(infixTokens);
+ System.out.println("Lexed tokens: ");
+ for (final Token tok : postfixTokens) {
+ System.out.println("\t" + tok);
+ }
+
+ /* Print out postfix tokens. */
+ System.out.print("Shunted expression: ");
+ for (final Token tok : postfixTokens) {
+ System.out.print(tok.toExpr() + " ");
+ }
+
+ /* Space stages. */
+ System.out.println();
+ System.out.println();
+
+ /* Construct a tree from the list of postfixed tokens. */
+ final ITree<Token> ast = TreeConstructor.constructTree(postfixTokens, tok -> tok.typ.isOperator);
+
+ /* Print the tree, then the canonical expression for it. */
+ System.out.println("Parsed tree");
+ System.out.println(ast.toString());
+ System.out.println("\nCanonical expr: " + Parser.toCanonicalExpr(ast));
+
+ /* Space stages. */
+ System.out.println();
+ System.out.println();
+
+ /* Prompt for a new expression. */
+ System.out.print("Enter a math expression (blank line to quit): ");
+ /* Read it. */
+ ln = scan.nextLine().trim();
+ }
+
+ /* Cleanup after ourselves. */
+ scan.close();
+ }
+
+}