org.antlr.runtime.tree.RewriteRuleElementStream Class Reference

Inheritance diagram for org.antlr.runtime.tree.RewriteRuleElementStream:

Inheritance graph
[legend]
Collaboration diagram for org.antlr.runtime.tree.RewriteRuleElementStream:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 RewriteRuleElementStream (TreeAdaptor adaptor, String elementDescription)
 RewriteRuleElementStream (TreeAdaptor adaptor, String elementDescription, Object oneElement)
 RewriteRuleElementStream (TreeAdaptor adaptor, String elementDescription, List elements)
void reset ()
void add (Object el)
Object nextTree ()
boolean hasNext ()
int size ()
String getDescription ()

Protected Member Functions

Object _next ()
abstract Object dup (Object el)
Object toTree (Object el)

Protected Attributes

int cursor = 0
Object singleElement
List elements
boolean dirty = false
String elementDescription
TreeAdaptor adaptor


Detailed Description

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

org.antlr.runtime.tree.RewriteRuleTokenStream

TODO: add mechanism to detect/puke on modification after reading from stream

Definition at line 46 of file RewriteRuleElementStream.java.


Constructor & Destructor Documentation

org.antlr.runtime.tree.RewriteRuleElementStream.RewriteRuleElementStream ( TreeAdaptor  adaptor,
String  elementDescription 
)

Definition at line 77 of file RewriteRuleElementStream.java.

org.antlr.runtime.tree.RewriteRuleElementStream.RewriteRuleElementStream ( TreeAdaptor  adaptor,
String  elementDescription,
Object  oneElement 
)

Create a stream with one element

Definition at line 83 of file RewriteRuleElementStream.java.

org.antlr.runtime.tree.RewriteRuleElementStream.RewriteRuleElementStream ( TreeAdaptor  adaptor,
String  elementDescription,
List  elements 
)

Create a stream, but feed off an existing list

Definition at line 92 of file RewriteRuleElementStream.java.


Member Function Documentation

void org.antlr.runtime.tree.RewriteRuleElementStream.reset (  ) 

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.

Definition at line 106 of file RewriteRuleElementStream.java.

void org.antlr.runtime.tree.RewriteRuleElementStream.add ( Object  el  ) 

Definition at line 111 of file RewriteRuleElementStream.java.

Object org.antlr.runtime.tree.RewriteRuleElementStream.nextTree (  ) 

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).

Definition at line 136 of file RewriteRuleElementStream.java.

Object org.antlr.runtime.tree.RewriteRuleElementStream._next (  )  [protected]

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.

Definition at line 154 of file RewriteRuleElementStream.java.

abstract Object org.antlr.runtime.tree.RewriteRuleElementStream.dup ( Object  el  )  [protected, pure virtual]

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.

Implemented in org.antlr.runtime.tree.RewriteRuleNodeStream, org.antlr.runtime.tree.RewriteRuleSubtreeStream, and org.antlr.runtime.tree.RewriteRuleTokenStream.

Object org.antlr.runtime.tree.RewriteRuleElementStream.toTree ( Object  el  )  [protected]

Ensure stream emits trees; tokens must be converted to AST nodes. AST nodes can be passed through unmolested.

Reimplemented in org.antlr.runtime.tree.RewriteRuleNodeStream, and org.antlr.runtime.tree.RewriteRuleTokenStream.

Definition at line 187 of file RewriteRuleElementStream.java.

boolean org.antlr.runtime.tree.RewriteRuleElementStream.hasNext (  ) 

Definition at line 191 of file RewriteRuleElementStream.java.

int org.antlr.runtime.tree.RewriteRuleElementStream.size (  ) 

Definition at line 196 of file RewriteRuleElementStream.java.

String org.antlr.runtime.tree.RewriteRuleElementStream.getDescription (  ) 

Definition at line 207 of file RewriteRuleElementStream.java.


Member Data Documentation

Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), which bumps it to 1 meaning no more elements.

Definition at line 50 of file RewriteRuleElementStream.java.

Track single elements w/o creating a list. Upon 2nd add, alloc list

Definition at line 53 of file RewriteRuleElementStream.java.

The list of tokens or subtrees we are tracking

Definition at line 56 of file RewriteRuleElementStream.java.

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".

TODO: unused?

Definition at line 68 of file RewriteRuleElementStream.java.

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.

Definition at line 74 of file RewriteRuleElementStream.java.

Definition at line 75 of file RewriteRuleElementStream.java.


The documentation for this class was generated from the following file:

Generated on Tue Jul 19 11:42:10 2011 for ANTLR API by  doxygen 1.5.5