org.antlr.runtime.misc
Class LookaheadStream<T>

java.lang.Object
  extended by org.antlr.runtime.misc.FastQueue<T>
      extended by org.antlr.runtime.misc.LookaheadStream<T>
Direct Known Subclasses:
CommonTreeNodeStream, UnbufferedTokenStream

public abstract class LookaheadStream<T>
extends FastQueue<T>

A lookahead queue that knows how to mark/release locations in the buffer for backtracking purposes. Any markers force the FastQueue superclass to keep all tokens until no more markers; then can reset to avoid growing a huge buffer.


Field Summary
protected  int currentElementIndex
          Absolute token index.
 T eof
          Track object returned by nextElement upon end of stream; Return it later when they ask for LT passed end of input.
protected  int lastMarker
          Track the last mark() call result value for use in rewind().
protected  int markDepth
          tracks how deep mark() calls are nested
protected  T prevElement
           
static int UNINITIALIZED_EOF_ELEMENT_INDEX
           
 
Fields inherited from class org.antlr.runtime.misc.FastQueue
data, p, range
 
Constructor Summary
LookaheadStream()
           
 
Method Summary
 void consume()
          Make sure we have at least one element to remove, even if EOF
 void fill(int n)
          add n elements to buffer
 int index()
           
abstract  boolean isEOF(T o)
           
protected  T LB(int k)
           
 T LT(int k)
           
 int mark()
           
abstract  T nextElement()
          Implement nextElement to supply a stream of elements to this lookahead buffer.
 void release(int marker)
           
 T remove()
          Get and remove first element in queue; override FastQueue.remove(); it's the same, just checks for backtracking.
 void reset()
           
 void rewind()
           
 void rewind(int marker)
           
 void seek(int index)
          Seek to a 0-indexed position within data buffer.
 int size()
          Size of entire stream is unknown; we only know buffer size from FastQueue
protected  void syncAhead(int need)
          Make sure we have 'need' elements from current position p.
 
Methods inherited from class org.antlr.runtime.misc.FastQueue
add, clear, elementAt, head, range, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

UNINITIALIZED_EOF_ELEMENT_INDEX

public static final int UNINITIALIZED_EOF_ELEMENT_INDEX
See Also:
Constant Field Values

currentElementIndex

protected int currentElementIndex
Absolute token index. It's the index of the symbol about to be read via LT(1). Goes from 0 to numtokens.


prevElement

protected T prevElement

eof

public T eof
Track object returned by nextElement upon end of stream; Return it later when they ask for LT passed end of input.


lastMarker

protected int lastMarker
Track the last mark() call result value for use in rewind().


markDepth

protected int markDepth
tracks how deep mark() calls are nested

Constructor Detail

LookaheadStream

public LookaheadStream()
Method Detail

reset

public void reset()
Overrides:
reset in class FastQueue<T>

nextElement

public abstract T nextElement()
Implement nextElement to supply a stream of elements to this lookahead buffer. Return eof upon end of the stream we're pulling from.


isEOF

public abstract boolean isEOF(T o)

remove

public T remove()
Get and remove first element in queue; override FastQueue.remove(); it's the same, just checks for backtracking.

Overrides:
remove in class FastQueue<T>

consume

public void consume()
Make sure we have at least one element to remove, even if EOF


syncAhead

protected void syncAhead(int need)
Make sure we have 'need' elements from current position p. Last valid p index is data.size()-1. p+need-1 is the data index 'need' elements ahead. If we need 1 element, (p+1-1)==p must be < data.size().


fill

public void fill(int n)
add n elements to buffer


size

public int size()
Size of entire stream is unknown; we only know buffer size from FastQueue

Overrides:
size in class FastQueue<T>

LT

public T LT(int k)

index

public int index()

mark

public int mark()

release

public void release(int marker)

rewind

public void rewind(int marker)

rewind

public void rewind()

seek

public void seek(int index)
Seek to a 0-indexed position within data buffer. Can't handle case where you seek beyond end of existing buffer. Normally used to seek backwards in the buffer. Does not force loading of nodes. Doesn't see to absolute position in input stream since this stream is unbuffered. Seeks only into our moving window of elements.


LB

protected T LB(int k)


Copyright © 2011. All Rights Reserved.