KickJava   Java API By Example, From Geeks To Geeks.

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


1 package ro.infoiasi.donald.compiler.cfg;
2
3 import java.util.*;
4
5 public class NonTerminals {
6     private Map varByName = new HashMap();
7     private List varByIndex = new ArrayList();
8
9     public NonTerminal addNew(String JavaDoc name, String JavaDoc type) {
10         NonTerminal var = new NonTerminal(name, count(), type);
11         if (varByName.containsKey(name)) {
12             throw new RuntimeException JavaDoc("Duplicate Non-Terminal ("+name+")");
13         }
14         varByName.put(name, var);
15         varByIndex.add(var);
16         return var;
17     }
18
19     public NonTerminal addNew(String JavaDoc name) {
20         return addNew(name, null);
21     }
22     
23     public int count() {
24         return varByIndex.size();
25     }
26
27     public Iterator iterator() {
28         return Collections.unmodifiableList(varByIndex).iterator();
29     }
30
31     public NonTerminal find(String JavaDoc name) {
32         return (NonTerminal)varByName.get(name);
33     }
34
35     public NonTerminal find(int index) {
36         if (index < 0 || index >= count()) {
37             return null;
38         } else {
39             return (NonTerminal)varByIndex.get(index);
40         }
41     }
42
43     public void clear() {
44         varByName.clear();
45         varByIndex.clear();
46     }
47     
48     /** Used to remove useless nonterminals (package access) */
49     void removeUseless(List s) {
50         Iterator it = s.iterator();
51         while (it.hasNext()) {
52             NonTerminal a = (NonTerminal)it.next();
53             varByName.remove(a.getName());
54         }
55         
56         List tmp = new ArrayList();
57         for (int i = 0; i<varByIndex.size(); i++) {
58             NonTerminal a = (NonTerminal)varByIndex.get(i);
59             if (!s.contains(a)) {
60                 a.setIndex(tmp.size());
61                 tmp.add(a);
62             }
63         }
64         varByIndex = tmp;
65     }
66
67     public String JavaDoc toString() {
68         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
69         Iterator it = iterator();
70         while (it.hasNext()) {
71             sb.append(it.next());
72             if (it.hasNext()) {
73                 sb.append(", ");
74             }
75         }
76         return sb.toString();
77     }
78 }
79
Popular Tags