1 package fri.patterns.interpreter.parsergenerator.semantics; 2 3 import java.util.List ; 4 import fri.patterns.interpreter.parsergenerator.Semantic; 5 import fri.patterns.interpreter.parsergenerator.syntax.Rule; 6 7 15 16 public class TreeBuilderSemantic implements Semantic 17 { 18 21 public Object doSemantic(Rule rule, List inputTokens, List ranges) { 22 return new Node(rule, inputTokens, ranges); 23 } 24 25 26 29 public static class Node 30 { 31 private Rule rule; 32 private List inputTokens, ranges; 33 34 public Node(Rule rule, List inputTokens, List ranges) { 35 this.rule = rule; 36 this.inputTokens = inputTokens; 37 this.ranges = ranges; 38 } 39 40 41 public Rule getRule() { 42 return rule; 43 } 44 45 46 public List getInputTokens() { 47 return inputTokens; 48 } 49 50 51 public List getRanges() { 52 return ranges; 53 } 54 55 56 public String toString() { 57 return getRule().getNonterminal()+"@"+hashCode(); 58 } 59 60 64 public String toString(int indent) { 65 StringBuffer sb = new StringBuffer (); 66 for (int i = 0; i < indent; i++) 67 sb.append(" "); 68 69 sb.append(toString()); 70 sb.append(" ::= "); 71 72 if (getRule().rightSize() <= 0) 73 sb.append("/*nothing*/"); 74 else 75 for (int i = 0; i < getRule().rightSize(); i++) 76 sb.append(getRule().getRightSymbol(i)+" "); 77 78 sb.append("\t=>\t"); 79 sb.append(getInputTokens()); 80 sb.append("\n"); 81 82 for (int i = 0; i < getInputTokens().size(); i++) { 83 Object o = getInputTokens().get(i); 84 85 if (o instanceof Node) { 86 sb.append(((Node)o).toString(indent + 1)); 87 } 88 } 89 90 return sb.toString(); 91 } 92 } 93 94 } 95 | Popular Tags |