1 package ro.infoiasi.donald.compiler.lexer; 2 3 import ro.infoiasi.donald.compiler.lexer.exceptions.*; 4 import java.util.*; 5 6 7 public class Alphabet implements Cloneable { 8 9 private ArrayList arr; 10 12 private HashMap map; 13 14 15 public Alphabet() { 16 map = new HashMap(); 17 arr = new ArrayList(); 18 } 19 20 22 public Alphabet(String s) { 23 this(); 24 for (int i = 0; i<s.length(); i++) { 25 addSymbol(s.charAt(i)); 26 } 27 } 28 29 30 public Alphabet(Alphabet alpha) { 31 arr = (ArrayList)alpha.arr.clone(); 32 map = (HashMap)alpha.map.clone(); 33 } 34 35 36 public Object clone() { 37 return new Alphabet(this); 38 } 39 40 41 public boolean equals(Object obj) { 42 Alphabet alpha = (Alphabet)obj; 43 if (size() != alpha.size()) { 44 return false; 45 } 46 for (int i = 0; i<size(); i++) { 47 if (getSymbol(i).charValue() != getSymbol(i).charValue()) { 48 return false; 49 } 50 } 51 return true; 52 } 53 54 55 public int size() { 56 return arr.size(); 57 } 58 59 60 public void clear() { 61 arr.clear(); 62 map.clear(); 63 } 64 65 67 public void addSymbol(char ch) { 68 if (!containsSymbol(ch)) { 69 Character cObj = new Character (ch); 70 arr.add(cObj); 71 map.put(cObj, new Integer (map.size())); 72 } 73 } 74 75 76 public Character getSymbol(int index) { 77 return (Character ) arr.get(index); 78 } 79 80 81 public boolean containsSymbol(char ch) { 82 return map.containsKey(new Character (ch)); 83 } 84 85 86 public int idxSymbol(char ch) { 87 Integer i = (Integer )map.get(new Character (ch)); 88 return i.intValue(); 89 } 90 91 93 public String toString() { 94 StringBuffer sb = new StringBuffer (size()); 95 for (int i=0; i<size(); i++) { 96 sb.append((Character )arr.get(i)); 97 } 98 return new String (sb); 99 } 100 101 102 public void print() { 103 System.out.println("Size: " + size()); 104 System.out.print("Array: "); 105 System.out.println(arr); 106 System.out.print("Map: "); 107 System.out.println(map.entrySet()); 108 } 109 } 110 | Popular Tags |