KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > ro > infoiasi > donald > compiler > cfg > Terminals


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 JavaDoc name, String JavaDoc type) {
10         Terminal term = new Terminal(name, count(), type);
11         if (termByName.containsKey(name)) {
12             throw new RuntimeException JavaDoc("Duplicate Terminal ("+name+")");
13         }
14         termByName.put(name, term);
15         termByIndex.add(term);
16         return term;
17     }
18
19     public Terminal addNew(String JavaDoc name) {
20         return addNew(name, null);
21     }
22
23     /** End of input. */
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 JavaDoc 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 JavaDoc toString() {
52         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
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