1 package ro.infoiasi.donald.compiler.cfg; 2 3 import java.util.*; 4 5 public class Terminals { 6 private Map termByName = new HashMap(); 7 private List termByIndex = new ArrayList(); 8 9 public Terminal addNew(String name, String type) { 10 Terminal term = new Terminal(name, count(), type); 11 if (termByName.containsKey(name)) { 12 throw new RuntimeException ("Duplicate Terminal ("+name+")"); 13 } 14 termByName.put(name, term); 15 termByIndex.add(term); 16 return term; 17 } 18 19 public Terminal addNew(String name) { 20 return addNew(name, null); 21 } 22 23 24 public final Terminal EOF = find("EOF")!=null? find("EOF"): addNew("EOF"); 25 26 public int count() { 27 return termByIndex.size(); 28 } 29 30 public Iterator iterator() { 31 return Collections.unmodifiableList(termByIndex).iterator(); 32 } 33 34 public Terminal find(String name) { 35 return (Terminal)termByName.get(name); 36 } 37 38 public Terminal find(int index) { 39 if (index < 0 || index >= count()) { 40 return null; 41 } else { 42 return (Terminal)termByIndex.get(index); 43 } 44 } 45 46 public void clear() { 47 termByName.clear(); 48 termByIndex.clear(); 49 } 50 51 public String toString() { 52 StringBuffer sb = new StringBuffer (); 53 Iterator it = iterator(); 54 while (it.hasNext()) { 55 sb.append(it.next()); 56 if (it.hasNext()) { 57 sb.append(", "); 58 } 59 } 60 return sb.toString(); 61 } 62 } 63 | Popular Tags |