1 package antlr; 2 3 9 10 import java.util.Hashtable ; 11 12 import antlr.collections.impl.LList; 13 import antlr.collections.Stack; 14 15 import java.io.IOException ; 16 17 24 public class TokenStreamSelector implements TokenStream { 25 26 protected Hashtable inputStreamNames; 27 28 29 protected TokenStream input; 30 31 32 protected Stack streamStack = new LList(); 33 34 public TokenStreamSelector() { 35 super(); 36 inputStreamNames = new Hashtable (); 37 } 38 39 public void addInputStream(TokenStream stream, String key) { 40 inputStreamNames.put(key, stream); 41 } 42 43 46 public TokenStream getCurrentStream() { 47 return input; 48 } 49 50 public TokenStream getStream(String sname) { 51 TokenStream stream = (TokenStream)inputStreamNames.get(sname); 52 if (stream == null) { 53 throw new IllegalArgumentException ("TokenStream " + sname + " not found"); 54 } 55 return stream; 56 } 57 58 public Token nextToken() throws TokenStreamException { 59 for (; ;) { 63 try { 64 return input.nextToken(); 65 } 66 catch (TokenStreamRetryException r) { 67 } 69 } 70 } 71 72 public TokenStream pop() { 73 TokenStream stream = (TokenStream)streamStack.pop(); 74 select(stream); 75 return stream; 76 } 77 78 public void push(TokenStream stream) { 79 streamStack.push(input); select(stream); 81 } 82 83 public void push(String sname) { 84 streamStack.push(input); 85 select(sname); 86 } 87 88 95 public void retry() throws TokenStreamRetryException { 96 throw new TokenStreamRetryException(); 97 } 98 99 100 public void select(TokenStream stream) { 101 input = stream; 102 } 103 104 public void select(String sname) throws IllegalArgumentException { 105 input = getStream(sname); 106 } 107 } 108 | Popular Tags |