summaryrefslogtreecommitdiff
path: root/base/src/bjc/dicelang/expr/Parser.java
diff options
context:
space:
mode:
Diffstat (limited to 'base/src/bjc/dicelang/expr/Parser.java')
-rw-r--r--base/src/bjc/dicelang/expr/Parser.java94
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) {