Package org.antlr.runtime.misc
Class LookaheadStream<T>
- java.lang.Object
-
- org.antlr.runtime.misc.FastQueue<T>
-
- org.antlr.runtime.misc.LookaheadStream<T>
-
- Direct Known Subclasses:
CommonTreeNodeStream
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
Fields Modifier and Type Field Description T
eof
Returned by nextElement upon end of stream; we add to buffer alsoprotected int
eofElementIndex
Set to buffer index of eof when nextElement returns eofprotected int
lastMarker
Track the last mark() call result value for use in rewind().protected int
markDepth
tracks how deep mark() calls are nestedstatic int
UNINITIALIZED_EOF_ELEMENT_INDEX
-
Constructor Summary
Constructors Constructor Description LookaheadStream(T eof)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
consume()
Make sure we have at least one element to remove, even if EOFvoid
fill(int n)
add n elements to bufferObject
getCurrentSymbol()
int
index()
protected Object
LB(int k)
Look backwards k nodesObject
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()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 FastQueuevoid
sync(int need)
Make sure we have 'need' elements from current position p.
-
-
-
Field Detail
-
UNINITIALIZED_EOF_ELEMENT_INDEX
public static final int UNINITIALIZED_EOF_ELEMENT_INDEX
- See Also:
- Constant Field Values
-
eofElementIndex
protected int eofElementIndex
Set to buffer index of eof when nextElement returns eof
-
eof
public T eof
Returned by nextElement upon end of stream; we add to buffer also
-
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(T eof)
-
-
Method Detail
-
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.
-
remove
public T remove()
Get and remove first element in queue; override FastQueue.remove()
-
consume
public void consume()
Make sure we have at least one element to remove, even if EOF
-
sync
public void sync(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
-
LT
public Object LT(int k)
-
LB
protected Object LB(int k)
Look backwards k nodes
-
getCurrentSymbol
public Object getCurrentSymbol()
-
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.
-
-