summaryrefslogtreecommitdiff
path: root/dice-lang/src/bjc/dicelang/v2/Parser.java
diff options
context:
space:
mode:
authorbjculkin <bjculkin@WIT-136XG42.wvu-ad.wvu.edu>2017-02-24 10:50:53 -0500
committerbjculkin <bjculkin@WIT-136XG42.wvu-ad.wvu.edu>2017-02-24 10:50:53 -0500
commit07d8b9547a654021d8c56021779f4cdaa5f03f1b (patch)
treed80330d7fe4d308469acc006563b9ab5c905d213 /dice-lang/src/bjc/dicelang/v2/Parser.java
parent73371535e723f84db048abbc4837c8b32facf6a7 (diff)
Update
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v2/Parser.java')
-rw-r--r--dice-lang/src/bjc/dicelang/v2/Parser.java112
1 files changed, 59 insertions, 53 deletions
diff --git a/dice-lang/src/bjc/dicelang/v2/Parser.java b/dice-lang/src/bjc/dicelang/v2/Parser.java
index 7151e0e..c939a8b 100644
--- a/dice-lang/src/bjc/dicelang/v2/Parser.java
+++ b/dice-lang/src/bjc/dicelang/v2/Parser.java
@@ -28,59 +28,8 @@ public class Parser {
break;
case CBRACKET:
case CBRACE:
- if(working.size() == 0) {
- Errors.inst.printError(EK_PARSE_NOCLOSE);
- return false;
- }
-
- ITree<Node> groupNode = null;
- switch(tk.type) {
- case CBRACE:
- groupNode = new Tree<>(new Node(GROUP, Node.GroupType.CODE));
- break;
- case CBRACKET:
- groupNode = new Tree<>(new Node(GROUP, Node.GroupType.ARRAY));
- break;
- default:
- break;
- }
- Token matching = null;
-
- if(tk.type == CBRACKET) {
- matching = new Token(Token.Type.OBRACKET, tk.intValue);
- } else if(tk.type == CBRACE) {
- matching = new Token(Token.Type.OBRACE, tk.intValue);
- }
-
- ITree<Node> matchNode = new Tree<>(new Node(OGROUP, matching));
-
- if(!working.contains(matchNode)) {
- Errors.inst.printError(EK_PARSE_UNCLOSE, tk.toString(), matchNode.toString());
-
- System.out.println("\tCurrent forest is: ");
-
- int treeNo = 1;
- for(ITree<Node> ast : working) {
- System.out.println("Tree " + treeNo++ + ": " + ast.toString());
- }
-
- return false;
- } else {
- Deque<ITree<Node>> childs = new LinkedList<>();
-
- while(!working.peek().equals(matchNode)) {
- childs.push(working.pop());
- }
-
- // Discard opener
- working.pop();
-
- for(ITree<Node> child : childs) {
- groupNode.addChild(child);
- }
-
- working.push(groupNode);
- }
+ boolean sc = parseClosingGrouper(working, tk);
+ if(!sc) return false;
break;
case LET:
case BIND:
@@ -158,4 +107,61 @@ public class Parser {
return true;
}
+
+ private boolean parseClosingGrouper(Deque<ITree<Node>> working, Token tk) {
+ if(working.size() == 0) {
+ Errors.inst.printError(EK_PARSE_NOCLOSE);
+ return false;
+ }
+
+ ITree<Node> groupNode = null;
+ switch(tk.type) {
+ case CBRACE:
+ groupNode = new Tree<>(new Node(GROUP, Node.GroupType.CODE));
+ break;
+ case CBRACKET:
+ groupNode = new Tree<>(new Node(GROUP, Node.GroupType.ARRAY));
+ break;
+ default:
+ break;
+ }
+
+ Token matching = null;
+ if(tk.type == CBRACKET) {
+ matching = new Token(Token.Type.OBRACKET, tk.intValue);
+ } else if(tk.type == CBRACE) {
+ matching = new Token(Token.Type.OBRACE, tk.intValue);
+ }
+
+ ITree<Node> matchNode = new Tree<>(new Node(OGROUP, matching));
+ if(!working.contains(matchNode)) {
+ Errors.inst.printError(EK_PARSE_UNCLOSE, tk.toString(), matchNode.toString());
+
+ System.out.println("\tCurrent forest is: ");
+
+ int treeNo = 1;
+ for(ITree<Node> ast : working) {
+ System.out.println("Tree " + treeNo++ + ": " + ast.toString());
+ }
+
+ return false;
+ } else {
+ Deque<ITree<Node>> childs = new LinkedList<>();
+
+ while(!working.peek().equals(matchNode)) {
+ childs.push(working.pop());
+ }
+
+ // Discard opener
+ working.pop();
+
+ for(ITree<Node> child : childs) {
+ groupNode.addChild(child);
+ }
+
+ working.push(groupNode);
+ }
+
+ return true;
+ }
}