diff options
Diffstat (limited to 'base/src/bjc/dicelang/expr/Parser.java')
| -rw-r--r-- | base/src/bjc/dicelang/expr/Parser.java | 94 |
1 files changed, 1 insertions, 93 deletions
diff --git a/base/src/bjc/dicelang/expr/Parser.java b/base/src/bjc/dicelang/expr/Parser.java index 72f7bbe..1156334 100644 --- a/base/src/bjc/dicelang/expr/Parser.java +++ b/base/src/bjc/dicelang/expr/Parser.java @@ -1,11 +1,6 @@ package bjc.dicelang.expr; -import java.util.Arrays; -import java.util.Scanner; - import bjc.utils.data.ITree; -import bjc.utils.funcdata.FunctionalList; -import bjc.utils.parserutils.TreeConstructor; /** * Parser for simple math expressions. @@ -14,97 +9,10 @@ import bjc.utils.parserutils.TreeConstructor; */ public class Parser { /* - * @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 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 list from the array of tokens. */ - final FunctionalList<Token> tokList = new FunctionalList<>(Arrays.asList(postfixTokens)); - - /* Construct a tree from the list of postfixed tokens. */ - final ITree<Token> ast = TreeConstructor.constructTree(tokList, 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: " + 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(); - } - - /* * Convert an expression to one that uses the smallest necessary amount of * parens. */ - private static String toCanonicalExpr(final ITree<Token> ast) { + public static String toCanonicalExpr(final ITree<Token> ast) { final Token data = ast.getHead(); if (ast.getChildrenCount() == 0) { |
