1 package antlr; 2 3 9 10 import antlr.collections.impl.BitSet; 11 12 19 public class TokenStreamHiddenTokenFilter extends TokenStreamBasicFilter implements TokenStream { 20 protected BitSet hideMask; 22 23 private CommonHiddenStreamToken nextMonitoredToken; 24 25 28 protected CommonHiddenStreamToken lastHiddenToken; 29 30 protected CommonHiddenStreamToken firstHidden = null; 31 32 public TokenStreamHiddenTokenFilter(TokenStream input) { 33 super(input); 34 hideMask = new BitSet(); 35 } 36 37 protected void consume() throws TokenStreamException { 38 nextMonitoredToken = (CommonHiddenStreamToken)input.nextToken(); 39 } 40 41 private void consumeFirst() throws TokenStreamException { 42 consume(); 44 CommonHiddenStreamToken p = null; 47 while (hideMask.member(LA(1).getType()) || discardMask.member(LA(1).getType())) { 49 if (hideMask.member(LA(1).getType())) { 50 if (p == null) { 51 p = LA(1); 52 } 53 else { 54 p.setHiddenAfter(LA(1)); 55 LA(1).setHiddenBefore(p); p = LA(1); 57 } 58 lastHiddenToken = p; 59 if (firstHidden == null) { 60 firstHidden = p; } 62 } 63 consume(); 64 } 65 } 66 67 public BitSet getDiscardMask() { 68 return discardMask; 69 } 70 71 74 public CommonHiddenStreamToken getHiddenAfter(CommonHiddenStreamToken t) { 75 return t.getHiddenAfter(); 76 } 77 78 81 public CommonHiddenStreamToken getHiddenBefore(CommonHiddenStreamToken t) { 82 return t.getHiddenBefore(); 83 } 84 85 public BitSet getHideMask() { 86 return hideMask; 87 } 88 89 92 public CommonHiddenStreamToken getInitialHiddenToken() { 93 return firstHidden; 94 } 95 96 public void hide(int m) { 97 hideMask.add(m); 98 } 99 100 public void hide(BitSet mask) { 101 hideMask = mask; 102 } 103 104 protected CommonHiddenStreamToken LA(int i) { 105 return nextMonitoredToken; 106 } 107 108 118 public Token nextToken() throws TokenStreamException { 119 if (LA(1) == null) { 122 consumeFirst(); 123 } 124 125 CommonHiddenStreamToken monitored = LA(1); 128 monitored.setHiddenBefore(lastHiddenToken); 130 lastHiddenToken = null; 131 132 consume(); 135 CommonHiddenStreamToken p = monitored; 136 while (hideMask.member(LA(1).getType()) || discardMask.member(LA(1).getType())) { 138 if (hideMask.member(LA(1).getType())) { 139 p.setHiddenAfter(LA(1)); 142 if (p != monitored) { LA(1).setHiddenBefore(p); 145 } 146 p = lastHiddenToken = LA(1); 147 } 148 consume(); 149 } 150 return monitored; 151 } 152 } 153 | Popular Tags |