1 package fri.patterns.interpreter.parsergenerator.lexer; 2 3 import java.util.*; 4 import fri.patterns.interpreter.parsergenerator.Token; 5 import fri.patterns.interpreter.parsergenerator.syntax.Rule; 6 7 12 13 public class ResultTree 14 { 15 private Rule rule; 16 private List sequenceList; 17 private Token.Range range; 18 private StringBuffer buffer; 19 private String stringResult; 20 21 ResultTree(Rule rule) { 22 this.rule = rule; 23 } 24 25 26 public Token.Range getRange() { 27 return range; 28 } 29 30 void setRange(Token.Range range) { 31 this.range = range; 32 } 33 34 35 public boolean hasText() { 36 for (int i = 0; sequenceList != null && i < sequenceList.size(); i++) { 37 Object o = sequenceList.get(i); 38 if (o instanceof ResultTree == false) 39 return true; else 41 if (((ResultTree)o).hasText()) 42 return true; 43 } 44 return false; 45 } 46 47 48 public String toString() { 49 if (stringResult == null) { 50 StringBuffer sb = new StringBuffer (); 51 for (int i = 0; sequenceList != null && i < sequenceList.size(); i++) { 52 Object o = sequenceList.get(i); 53 if (o instanceof ResultTree) 54 sb.append(((ResultTree)o).toString()); 55 else 56 sb.append(o.toString()); 57 } 59 stringResult = sb.toString(); 60 } 61 return stringResult; 62 } 63 64 65 public Rule getRule() { 66 return rule; 67 } 68 69 70 public Object getChild(int i) { 71 Object o = sequenceList.get(i); 72 return o instanceof StringBuffer ? o.toString() : o; } 74 75 76 public int getChildCount() { 77 return sequenceList != null ? sequenceList.size() : 0; 78 } 79 80 ResultTree append(char c) { 81 ensureStringBuffer(null).append(c); 82 return this; 83 } 84 85 ResultTree append(String s) { 86 ensureStringBuffer(s); 87 return this; 88 } 89 90 ResultTree addChild(ResultTree r) { 91 if (r.hasText()) { 92 ensureSequenceList().add(r); 93 buffer = null; } 95 return this; 96 } 97 98 private List ensureSequenceList() { 99 if (sequenceList == null) 100 sequenceList = new ArrayList(rule != null ? rule.rightSize() : 1); 101 return sequenceList; 102 } 103 104 private StringBuffer ensureStringBuffer(String toStore) { 105 if (buffer == null) { 106 if (toStore == null) 107 buffer = new StringBuffer (8); 108 else 109 buffer = new StringBuffer (toStore); 110 ensureSequenceList().add(buffer); 111 } 112 else 113 if (toStore != null) { 114 buffer.append(toStore); 115 } 116 return buffer; 117 } 118 119 } 120 | Popular Tags |