| java.lang.Object org.antlr.runtime.tree.RewriteRuleElementStream
All known Subclasses: org.antlr.runtime.tree.RewriteRuleSubtreeStream, org.antlr.runtime.tree.RewriteRuleTokenStream,
RewriteRuleElementStream | abstract public class RewriteRuleElementStream (Code) | | A generic list of elements tracked in an alternative to be used in
a -> rewrite rule. We need to subclass to fill in the next() method,
which returns either an AST node wrapped around a token payload or
an existing subtree.
Once you start next()ing, do not try to add more elements. It will
break the cursor tracking I believe.
See Also: org.antlr.runtime.tree.RewriteRuleSubtreeStream See Also: org.antlr.runtime.tree.RewriteRuleTokenStream See Also: TODO: add mechanism to detect/puke on modification after reading from stream |
Method Summary | |
protected Object | _next() do the work of getting the next element, making sure that it's
a tree node or subtree. | public void | add(Object el) | abstract protected Object | dup(Object el) When constructing trees, sometimes we need to dup a token or AST
subtree. | public String | getDescription() | public boolean | hasNext() | public Object | next() Return the next element in the stream. | public void | reset() Reset the condition of this stream so that it appears we have
not consumed any of its elements. | public int | size() | protected Object | toTree(Object el) Ensure stream emits trees; tokens must be converted to AST nodes. |
cursor | protected int cursor(Code) | | Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(),
which bumps it to 1 meaning no more elements.
|
dirty | protected boolean dirty(Code) | | Once a node / subtree has been used in a stream, it must be dup'd
from then on. Streams are reset after subrules so that the streams
can be reused in future subrules. So, reset must set a dirty bit.
If dirty, then next() always returns a dup.
I wanted to use "naughty bit" here, but couldn't think of a way
to use "naughty".
|
elementDescription | protected String elementDescription(Code) | | The element or stream description; usually has name of the token or
rule reference that this list tracks. Can include rulename too, but
the exception would track that info.
|
elements | protected List elements(Code) | | The list of tokens or subtrees we are tracking
|
singleElement | protected Object singleElement(Code) | | Track single elements w/o creating a list. Upon 2nd add, alloc list
|
RewriteRuleElementStream | public RewriteRuleElementStream(TreeAdaptor adaptor, String elementDescription, Object oneElement)(Code) | | Create a stream with one element
|
RewriteRuleElementStream | public RewriteRuleElementStream(TreeAdaptor adaptor, String elementDescription, List elements)(Code) | | Create a stream, but feed off an existing list
|
_next | protected Object _next()(Code) | | do the work of getting the next element, making sure that it's
a tree node or subtree. Deal with the optimization of single-
element list versus list of size > 1. Throw an exception
if the stream is empty or we're out of elements and size>1.
protected so you can override in a subclass if necessary.
|
dup | abstract protected Object dup(Object el)(Code) | | When constructing trees, sometimes we need to dup a token or AST
subtree. Dup'ing a token means just creating another AST node
around it. For trees, you must call the adaptor.dupTree() unless
the element is for a tree root; then it must be a node dup.
|
hasNext | public boolean hasNext()(Code) | | |
next | public Object next()(Code) | | Return the next element in the stream. If out of elements, throw
an exception unless size()==1. If size is 1, then return elements[0].
Return a duplicate node/subtree if stream is out of elements and
size==1. If we've already used the element, dup (dirty bit set).
|
reset | public void reset()(Code) | | Reset the condition of this stream so that it appears we have
not consumed any of its elements. Elements themselves are untouched.
Once we reset the stream, any future use will need duplicates. Set
the dirty bit.
|
toTree | protected Object toTree(Object el)(Code) | | Ensure stream emits trees; tokens must be converted to AST nodes.
AST nodes can be passed through unmolested.
|
|
|