1 3 package ro.infoiasi.donald.compiler.parser; 4 5 import ro.infoiasi.donald.compiler.cfg.*; 6 7 public class LR1Item { 8 private LR0Item lr0item; 9 private Terminal lookahead; 10 11 public LR1Item(LR0Item lr0item, Terminal lookahead) { 12 this.lr0item = lr0item; 13 this.lookahead = lookahead; 14 } 15 16 public boolean equals(Object o) { 17 return (o instanceof LR1Item && 18 lr0item.equals(((LR1Item)o).lr0item) && 19 lookahead == ((LR1Item)o).lookahead); 20 } 21 22 public int hashCode() { 23 return 17+lr0item.hashCode()*37+lookahead.hashCode(); 24 } 25 26 public LR1Item nextItem() { 27 return new LR1Item(lr0item.nextItem(), lookahead); 28 } 29 30 public boolean isComplete() { 31 return lr0item.isComplete(); 32 } 33 34 public boolean isNew() { 35 return lr0item.isNew(); 36 } 37 38 public Symbol getNextSymbol() { 39 return lr0item.getNextSymbol(); 40 } 41 42 public Word getSufixAndLookahead() { 43 if (!getNextSymbol().isTerminal()) { 44 Word w = new Word(lr0item.suffix()); 45 w.removeFirst(); 46 w.addLast(lookahead); 47 return w; 48 } else { 49 throw new UnsupportedOperationException (); 50 } 51 } 52 53 public LR0Item getLR0Item() { 54 return lr0item; 55 } 56 57 public Production getProduction() { 58 return lr0item.getProduction(); 59 } 60 61 public int getPosition() { 62 return lr0item.getPosition(); 63 } 64 65 public Terminal getLookahead() { 66 return lookahead; 67 } 68 69 public String toString() { 70 return "("+lr0item+", "+lookahead+")"; 71 } 72 } 73 | Popular Tags |