summaryrefslogtreecommitdiff
path: root/base/src/bjc/dicelang/Parser.java
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2020-12-03 19:22:06 -0500
committerBen Culkin <scorpress@gmail.com>2020-12-03 19:22:06 -0500
commit28895cad07c7aec1b324a2c75e5da5ce728cad91 (patch)
tree840b63e27d746a1079be29b0249e53321784f6a6 /base/src/bjc/dicelang/Parser.java
parent32fec8be6a22789002cf92d4b86ed73c7ff8ab6b (diff)
Adapt to esodata changes
Diffstat (limited to 'base/src/bjc/dicelang/Parser.java')
-rw-r--r--base/src/bjc/dicelang/Parser.java46
1 files changed, 23 insertions, 23 deletions
diff --git a/base/src/bjc/dicelang/Parser.java b/base/src/bjc/dicelang/Parser.java
index 49cc312..6879c4f 100644
--- a/base/src/bjc/dicelang/Parser.java
+++ b/base/src/bjc/dicelang/Parser.java
@@ -17,9 +17,9 @@ import java.util.Deque;
import java.util.LinkedList;
import bjc.dicelang.tokens.Token;
-import bjc.data.ITree;
import bjc.data.Tree;
-import bjc.funcdata.IList;
+import bjc.data.SimpleTree;
+import bjc.funcdata.ListEx;
/**
* Parse a series of tree into tokens.
@@ -44,15 +44,15 @@ public class Parser {
*
* @return Whether or not the parse was successful.
*/
- public static boolean parseTokens(final IList<Token> tokens, final IList<ITree<Node>> results) {
- final Deque<ITree<Node>> working = new LinkedList<>();
+ public static boolean parseTokens(final ListEx<Token> tokens, final ListEx<Tree<Node>> results) {
+ final Deque<Tree<Node>> working = new LinkedList<>();
for(final Token tk : tokens) {
switch(tk.type) {
case OBRACKET:
case OBRACE:
/* Parse opening delims. */
- working.push(new Tree<>(new Node(OGROUP, tk)));
+ working.push(new SimpleTree<>(new Node(OGROUP, tk)));
break;
case CBRACKET:
@@ -90,8 +90,8 @@ public class Parser {
Errors.inst.printError(EK_PARSE_UNOPERAND, tk.toString());
return false;
} else if(working.size() == 1) {
- final ITree<Node> operand = working.pop();
- final ITree<Node> opNode = new Tree<>(new Node(UNARYOP, tk.type));
+ final Tree<Node> operand = working.pop();
+ final Tree<Node> opNode = new SimpleTree<>(new Node(UNARYOP, tk.type));
opNode.addChild(operand);
@@ -108,8 +108,8 @@ public class Parser {
if(working.size() == 0) {
Errors.inst.printError(EK_PARSE_UNOPERAND, tk.toString());
} else {
- final ITree<Node> operand = working.pop();
- final ITree<Node> opNode = new Tree<>(new Node(UNARYOP, tk.type));
+ final Tree<Node> operand = working.pop();
+ final Tree<Node> opNode = new SimpleTree<>(new Node(UNARYOP, tk.type));
opNode.addChild(operand);
@@ -123,7 +123,7 @@ public class Parser {
case VREF:
case DICE_LIT:
/* Handle literals. */
- working.push(new Tree<>(new Node(TOKREF, tk)));
+ working.push(new SimpleTree<>(new Node(TOKREF, tk)));
break;
default:
Errors.inst.printError(EK_PARSE_INVTOKEN, tk.type.toString());
@@ -135,7 +135,7 @@ public class Parser {
* Collect the remaining nodes as the roots of the trees in the
* AST forest.
*/
- for(final ITree<Node> ast : working) {
+ for(final Tree<Node> ast : working) {
/* Make sure that the tree are well-formed */
if(ast.containsMatching((val) -> {
switch(val.type) {
@@ -157,11 +157,11 @@ public class Parser {
}
/* Handle a binary operator. */
- private static void handleBinaryNode(final Deque<ITree<Node>> working, final Token tk) {
- final ITree<Node> right = working.pop();
- final ITree<Node> left = working.pop();
+ private static void handleBinaryNode(final Deque<Tree<Node>> working, final Token tk) {
+ final Tree<Node> right = working.pop();
+ final Tree<Node> left = working.pop();
- final ITree<Node> opNode = new Tree<>(new Node(BINOP, tk.type));
+ final Tree<Node> opNode = new SimpleTree<>(new Node(BINOP, tk.type));
opNode.addChild(left);
opNode.addChild(right);
@@ -170,20 +170,20 @@ public class Parser {
}
/* Parse a closing delimiter. */
- private static boolean parseClosingGrouper(final Deque<ITree<Node>> working, final Token tk) {
+ private static boolean parseClosingGrouper(final Deque<Tree<Node>> working, final Token tk) {
if(working.size() == 0) {
Errors.inst.printError(EK_PARSE_NOCLOSE);
return false;
}
- ITree<Node> groupNode = null;
+ Tree<Node> groupNode = null;
switch(tk.type) {
case CBRACE:
- groupNode = new Tree<>(new Node(GROUP, Node.GroupType.CODE));
+ groupNode = new SimpleTree<>(new Node(GROUP, Node.GroupType.CODE));
break;
case CBRACKET:
- groupNode = new Tree<>(new Node(GROUP, Node.GroupType.ARRAY));
+ groupNode = new SimpleTree<>(new Node(GROUP, Node.GroupType.ARRAY));
break;
default:
Errors.inst.printError(EK_PARSE_UNCLOSE, tk.type.toString());
@@ -198,7 +198,7 @@ public class Parser {
matching = new Token(Token.Type.OBRACE, tk.intValue);
}
- final ITree<Node> matchNode = new Tree<>(new Node(OGROUP, matching));
+ final Tree<Node> matchNode = new SimpleTree<>(new Node(OGROUP, matching));
if(!working.contains(matchNode)) {
Errors.inst.printError(EK_PARSE_UNCLOSE, tk.toString(), matchNode.toString());
@@ -207,14 +207,14 @@ public class Parser {
int treeNo = 1;
- for(final ITree<Node> ast : working) {
+ for(final Tree<Node> ast : working) {
System.out.println("Tree " + treeNo++ + ": " + ast.toString());
}
return false;
}
- final Deque<ITree<Node>> childs = new LinkedList<>();
+ final Deque<Tree<Node>> childs = new LinkedList<>();
while(!working.peek().equals(matchNode)) {
childs.push(working.pop());
@@ -223,7 +223,7 @@ public class Parser {
/* Discard opener */
working.pop();
- for(final ITree<Node> child : childs) {
+ for(final Tree<Node> child : childs) {
groupNode.addChild(child);
}