diff options
| author | student <student@localhost> | 2018-02-12 13:56:22 -0500 |
|---|---|---|
| committer | student <student@localhost> | 2018-02-12 13:56:22 -0500 |
| commit | 5115f1d2a7eab41436debc696870953e18a1b236 (patch) | |
| tree | dbb2453580038b9f8102bb5bc53c60d2410f0f00 /base/src/bjc/dicelang/expr/ExprREPL.java | |
| parent | 4c8639f361983d97a7b46282b12528b550fff946 (diff) | |
General update
Diffstat (limited to 'base/src/bjc/dicelang/expr/ExprREPL.java')
| -rw-r--r-- | base/src/bjc/dicelang/expr/ExprREPL.java | 96 |
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(); + } + +} |
