private Node makeNewLiteralNode(String s) { return new Node(Node.Type.LITERAL, s); }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Node node = (Node) o; if (type != node.type) return false; if (payload != null ? !payload.equals(node.payload) : node.payload != null) return false; if (defaultPart != null ? !defaultPart.equals(node.defaultPart) : node.defaultPart != null) return false; if (next != null ? !next.equals(node.next) : node.next != null) return false; return true; }
void recursive(Node n, StringBuilder sb) { Node c = n; while (c != null) { sb.append(c.toString()).append(" --> "); c = c.next; } sb.append("null "); }
private Node E() throws ScanException { Node t = T(); if (t == null) { return null; } Node eOpt = Eopt(); if (eOpt != null) { t.append(eOpt); } return t; }
@Test public void literalWithTwoAccolades() throws ScanException { Tokenizer tokenizer = new Tokenizer("%x{y} %a{b} c"); Parser parser = new Parser(tokenizer.tokenize()); Node node = parser.parse(); Node witness = new Node(Node.Type.LITERAL, "%x"); Node t = witness.next = new Node(Node.Type.LITERAL, "{"); t.next = new Node(Node.Type.LITERAL, "y"); t = t.next; t.next = new Node(Node.Type.LITERAL, "}"); t = t.next; t.next = new Node(Node.Type.LITERAL, " %a"); t = t.next; t.next = new Node(Node.Type.LITERAL, "{"); t = t.next; t.next = new Node(Node.Type.LITERAL, "b"); t = t.next; t.next = new Node(Node.Type.LITERAL, "}"); t = t.next; t.next = new Node(Node.Type.LITERAL, " c"); node.dump(); System.out.println(""); assertEquals(witness, node); }
@Override public int hashCode() { int result = type != null ? type.hashCode() : 0; result = 31 * result + (payload != null ? payload.hashCode() : 0); result = 31 * result + (defaultPart != null ? defaultPart.hashCode() : 0); result = 31 * result + (next != null ? next.hashCode() : 0); return result; } }
@Override public String toString() { switch (type) { case LITERAL: return "Node{" + "type=" + type + ", payload='" + payload + "'}"; case VARIABLE: StringBuilder payloadBuf = new StringBuilder(); StringBuilder defaultPartBuf2 = new StringBuilder(); if (defaultPart != null) recursive((Node) defaultPart, defaultPartBuf2); recursive((Node) payload, payloadBuf); String r = "Node{" + "type=" + type + ", payload='" + payloadBuf.toString()+"'"; if (defaultPart != null) r += ", defaultPart=" + defaultPartBuf2.toString(); r += '}'; return r; } return null; }
void recursive(Node n, StringBuilder sb) { Node c = n; while (c != null) { sb.append(c.toString()).append(" --> "); c = c.next; } sb.append("null "); }
@Override public int hashCode() { int result = type != null ? type.hashCode() : 0; result = 31 * result + (payload != null ? payload.hashCode() : 0); result = 31 * result + (defaultPart != null ? defaultPart.hashCode() : 0); result = 31 * result + (next != null ? next.hashCode() : 0); return result; } }
@Override public String toString() { switch (type) { case LITERAL: return "Node{" + "type=" + type + ", payload='" + payload + "'}"; case VARIABLE: StringBuilder payloadBuf = new StringBuilder(); StringBuilder defaultPartBuf2 = new StringBuilder(); if (defaultPart != null) recursive((Node) defaultPart, defaultPartBuf2); recursive((Node) payload, payloadBuf); String r = "Node{" + "type=" + type + ", payload='" + payloadBuf.toString() + "'"; if (defaultPart != null) r += ", defaultPart=" + defaultPartBuf2.toString(); r += '}'; return r; } return null; }
private Node V() throws ScanException { Node e = E(); Node variable = new Node(Node.Type.VARIABLE, e); Token t = peekAtCurentToken(); if (isDefaultToken(t)) { advanceTokenPointer(); Node def = E(); variable.defaultPart = def; } return variable; }
void recursive(Node n, StringBuilder sb) { Node c = n; while (c != null) { sb.append(c.toString()).append(" --> "); c = c.next; } sb.append("null "); }
private Node T() throws ScanException { Token t = peekAtCurentToken(); switch (t.type) { case LITERAL: advanceTokenPointer(); return makeNewLiteralNode(t.payload); case CURLY_LEFT: advanceTokenPointer(); Node innerNode = C(); Token right = peekAtCurentToken(); expectCurlyRight(right); advanceTokenPointer(); Node curlyLeft = makeNewLiteralNode(CoreConstants.LEFT_ACCOLADE); curlyLeft.append(innerNode); curlyLeft.append(makeNewLiteralNode(CoreConstants.RIGHT_ACCOLADE)); return curlyLeft; case START: advanceTokenPointer(); Node v = V(); Token w = peekAtCurentToken(); expectCurlyRight(w); advanceTokenPointer(); return v; default: return null; } }
@Override public int hashCode() { int result = type != null ? type.hashCode() : 0; result = 31 * result + (payload != null ? payload.hashCode() : 0); result = 31 * result + (defaultPart != null ? defaultPart.hashCode() : 0); result = 31 * result + (next != null ? next.hashCode() : 0); return result; } }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Node node = (Node) o; if (type != node.type) return false; if (payload != null ? !payload.equals(node.payload) : node.payload != null) return false; if (defaultPart != null ? !defaultPart.equals(node.defaultPart) : node.defaultPart != null) return false; if (next != null ? !next.equals(node.next) : node.next != null) return false; return true; }
@Override public String toString() { switch (type) { case LITERAL: return "Node{" + "type=" + type + ", payload='" + payload + "'}"; case VARIABLE: StringBuilder payloadBuf = new StringBuilder(); StringBuilder defaultPartBuf2 = new StringBuilder(); if (defaultPart != null) recursive((Node) defaultPart, defaultPartBuf2); recursive((Node) payload, payloadBuf); String r = "Node{" + "type=" + type + ", payload='" + payloadBuf.toString() + "'"; if (defaultPart != null) r += ", defaultPart=" + defaultPartBuf2.toString(); r += '}'; return r; } return null; }