]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/cpp/DataBoardTest/libantlr3c-3.2/include/antlr3commontreenodestream.h
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.databoard / cpp / DataBoardTest / libantlr3c-3.2 / include / antlr3commontreenodestream.h
index 952959e09a39173b02f0aca848f544d0ca793159..beb0534b625a8ee2b4de97a40bf3143f62746f0e 100644 (file)
-/// \file\r
-/// Definition of the ANTLR3 common tree node stream.\r
-///\r
-\r
-#ifndef        _ANTLR3_COMMON_TREE_NODE_STREAM__H\r
-#define        _ANTLR3_COMMON_TREE_NODE_STREAM__H\r
-\r
-// [The "BSD licence"]\r
-// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC\r
-// http://www.temporal-wave.com\r
-// http://www.linkedin.com/in/jimidle\r
-//\r
-// All rights reserved.\r
-//\r
-// Redistribution and use in source and binary forms, with or without\r
-// modification, are permitted provided that the following conditions\r
-// are met:\r
-// 1. Redistributions of source code must retain the above copyright\r
-//    notice, this list of conditions and the following disclaimer.\r
-// 2. Redistributions in binary form must reproduce the above copyright\r
-//    notice, this list of conditions and the following disclaimer in the\r
-//    documentation and/or other materials provided with the distribution.\r
-// 3. The name of the author may not be used to endorse or promote products\r
-//    derived from this software without specific prior written permission.\r
-//\r
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\r
-// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\r
-// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r
-// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\r
-// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r
-// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r
-// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-\r
-#include    <antlr3defs.h>\r
-#include    <antlr3commontreeadaptor.h>\r
-#include    <antlr3commontree.h>\r
-#include    <antlr3collections.h>\r
-#include    <antlr3intstream.h>\r
-#include    <antlr3string.h>\r
-\r
-/// Token buffer initial size settings ( will auto increase)\r
-///\r
-#define        DEFAULT_INITIAL_BUFFER_SIZE             100\r
-#define        INITIAL_CALL_STACK_SIZE                 10\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-typedef        struct ANTLR3_TREE_NODE_STREAM_struct\r
-{\r
-    /// Any interface that implements this interface (is a \r
-    ///  super structure containing this structure), may store the pointer\r
-    ///  to itself here in the super pointer, which is not used by \r
-    ///  the tree node stream. This will point to an implementation\r
-    ///  of ANTLR3_COMMON_TREE_NODE_STREAM in this case.\r
-    ///\r
-    pANTLR3_COMMON_TREE_NODE_STREAM    ctns;\r
-\r
-    /// All input streams implement the ANTLR3_INT_STREAM interface...\r
-    ///\r
-    pANTLR3_INT_STREAM                 istream;\r
-\r
-       /// Get tree node at current input pointer + i ahead where i=1 is next node.\r
-       /// i<0 indicates nodes in the past.  So LT(-1) is previous node, but\r
-       /// implementations are not required to provide results for k < -1.\r
-       /// LT(0) is undefined.  For i>=n, return null.\r
-       /// Return NULL for LT(0) and any index that results in an absolute address\r
-       /// that is negative (beyond the start of the list).\r
-       ///\r
-       /// This is analogous to the LT() method of the TokenStream, but this\r
-       /// returns a tree node instead of a token.  Makes code gen identical\r
-       /// for both parser and tree grammars. :)\r
-       ///\r
-    pANTLR3_BASE_TREE                  (*_LT)                                                  (struct ANTLR3_TREE_NODE_STREAM_struct * tns, ANTLR3_INT32 k);\r
-\r
-       /// Where is this stream pulling nodes from?  This is not the name, but\r
-       /// the object that provides node objects.\r
-       ///\r
-    pANTLR3_BASE_TREE                  (*getTreeSource)                                (struct ANTLR3_TREE_NODE_STREAM_struct * tns);\r
-\r
-       /// What adaptor can tell me how to interpret/navigate nodes and\r
-       /// trees.  E.g., get text of a node.\r
-       ///\r
-    pANTLR3_BASE_TREE_ADAPTOR  (*getTreeAdaptor)                               (struct ANTLR3_TREE_NODE_STREAM_struct * tns);\r
-\r
-       /// As we flatten the tree, we use UP, DOWN nodes to represent\r
-       /// the tree structure.  When debugging we need unique nodes\r
-       /// so we have to instantiate new ones.  When doing normal tree\r
-       /// parsing, it's slow and a waste of memory to create unique\r
-       /// navigation nodes.  Default should be false;\r
-       ///\r
-    void                                               (*setUniqueNavigationNodes)             (struct ANTLR3_TREE_NODE_STREAM_struct * tns, ANTLR3_BOOLEAN uniqueNavigationNodes);\r
-\r
-    pANTLR3_STRING                             (*toString)                                             (struct ANTLR3_TREE_NODE_STREAM_struct * tns);\r
-\r
-       /// Return the text of all nodes from start to stop, inclusive.\r
-       /// If the stream does not buffer all the nodes then it can still\r
-       /// walk recursively from start until stop.  You can always return\r
-       /// null or "" too, but users should not access $ruleLabel.text in\r
-       /// an action of course in that case.\r
-       ///\r
-    pANTLR3_STRING                             (*toStringSS)                                   (struct ANTLR3_TREE_NODE_STREAM_struct * tns, pANTLR3_BASE_TREE start, pANTLR3_BASE_TREE stop);\r
-\r
-       /// Return the text of all nodes from start to stop, inclusive, into the\r
-       /// supplied buffer.\r
-       /// If the stream does not buffer all the nodes then it can still\r
-       /// walk recursively from start until stop.  You can always return\r
-       /// null or "" too, but users should not access $ruleLabel.text in\r
-       /// an action of course in that case.\r
-       ///\r
-    void                                               (*toStringWork)                                 (struct ANTLR3_TREE_NODE_STREAM_struct * tns, pANTLR3_BASE_TREE start, pANTLR3_BASE_TREE stop, pANTLR3_STRING buf);\r
-\r
-       /// Release up any and all space the the interface allocate, including for this structure.\r
-       ///\r
-    void                                               (*free)                                                 (struct ANTLR3_TREE_NODE_STREAM_struct * tns);\r
-\r
-       /// Get a tree node at an absolute index i; 0..n-1.\r
-       /// If you don't want to buffer up nodes, then this method makes no\r
-       /// sense for you.\r
-       ///\r
-       pANTLR3_BASE_TREE                       (*get)                                                  (struct ANTLR3_TREE_NODE_STREAM_struct * tns, ANTLR3_INT32 i);\r
-\r
-       // REWRITING TREES (used by tree parser)\r
-\r
-       /// Replace from start to stop child index of parent with t, which might\r
-       /// be a list.  Number of children may be different\r
-       /// after this call.  The stream is notified because it is walking the\r
-       /// tree and might need to know you are monkeying with the underlying\r
-       /// tree.  Also, it might be able to modify the node stream to avoid\r
-       /// restreaming for future phases.\r
-       ///\r
-       /// If parent is null, don't do anything; must be at root of overall tree.\r
-       /// Can't replace whatever points to the parent externally.  Do nothing.\r
-       ///\r
-       void                                            (*replaceChildren)                              (struct ANTLR3_TREE_NODE_STREAM_struct * tns, pANTLR3_BASE_TREE parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, pANTLR3_BASE_TREE t);\r
-\r
-}\r
-    ANTLR3_TREE_NODE_STREAM;\r
-\r
-typedef        struct ANTLR3_COMMON_TREE_NODE_STREAM_struct\r
-{\r
-    /// Any interface that implements this interface (is a \r
-    /// super structure containing this structure), may store the pointer\r
-    /// to itself here in the super pointer, which is not used by \r
-    /// the common tree node stream.\r
-    ///\r
-    void                                               * super;\r
-\r
-    /// Pointer to the tree node stream interface\r
-    ///\r
-    pANTLR3_TREE_NODE_STREAM   tnstream;\r
-\r
-    /// String factory for use by anything that wishes to create strings\r
-    /// such as a tree representation or some copy of the text etc.\r
-    ///\r
-    pANTLR3_STRING_FACTORY             stringFactory;\r
-\r
-    /// Dummy tree node that indicates a descent into a child\r
-    /// tree. Initialized by a call to create a new interface.\r
-    ///\r
-    ANTLR3_COMMON_TREE                 DOWN;\r
-\r
-    /// Dummy tree node that indicates a descent up to a parent\r
-    /// tree. Initialized by a call to create a new interface.\r
-    ///\r
-    ANTLR3_COMMON_TREE                 UP;\r
-\r
-    /// Dummy tree node that indicates the termination point of the\r
-    /// tree. Initialized by a call to create a new interface.\r
-    ///\r
-    ANTLR3_COMMON_TREE                 EOF_NODE;\r
-\r
-    /// Dummy node that is returned if we need to indicate an invalid node\r
-    /// for any reason.\r
-    ///\r
-    ANTLR3_COMMON_TREE                 INVALID_NODE;\r
-\r
-       /// The complete mapping from stream index to tree node.\r
-       /// This buffer includes pointers to DOWN, UP, and EOF nodes.\r
-       /// It is built upon ctor invocation.  The elements are type\r
-       /// Object as we don't what the trees look like.\r
-       ///\r
-       /// Load upon first need of the buffer so we can set token types\r
-       /// of interest for reverseIndexing.  Slows us down a wee bit to\r
-       /// do all of the if p==-1 testing everywhere though, though in C\r
-       /// you won't really be able to measure this.\r
-       ///\r
-       /// Must be freed when the tree node stream is torn down.\r
-       ///\r
-       pANTLR3_VECTOR                          nodes;\r
-\r
-    /// If set to ANTLR3_TRUE then the navigation nodes UP, DOWN are\r
-    /// duplicated rather than reused within the tree.\r
-    ///\r
-    ANTLR3_BOOLEAN                             uniqueNavigationNodes;\r
-\r
-    /// Which tree are we navigating ?\r
-    ///\r
-    pANTLR3_BASE_TREE                  root;\r
-\r
-    /// Pointer to tree adaptor interface that manipulates/builds\r
-    /// the tree.\r
-    ///\r
-    pANTLR3_BASE_TREE_ADAPTOR  adaptor;\r
-\r
-    /// As we walk down the nodes, we must track parent nodes so we know\r
-    /// where to go after walking the last child of a node.  When visiting\r
-    /// a child, push current node and current index (current index\r
-    /// is first stored in the tree node structure to avoid two stacks.\r
-    ///\r
-    pANTLR3_STACK                              nodeStack;\r
-\r
-       /// The current index into the nodes vector of the current tree\r
-       /// we are parsing and possibly rewriting.\r
-       ///\r
-       ANTLR3_INT32                            p;\r
-\r
-    /// Which node are we currently visiting?\r
-    ///\r
-    pANTLR3_BASE_TREE                  currentNode;\r
-\r
-    /// Which node did we last visit? Used for LT(-1)\r
-    ///\r
-    pANTLR3_BASE_TREE                  previousNode;\r
-\r
-    /// Which child are we currently visiting?  If -1 we have not visited\r
-    /// this node yet; next consume() request will set currentIndex to 0.\r
-    ///\r
-    ANTLR3_INT32                               currentChildIndex;\r
-\r
-    /// What node index did we just consume?  i=0..n-1 for n node trees.\r
-    /// IntStream.next is hence 1 + this value.  Size will be same.\r
-    ///\r
-    ANTLR3_MARKER                              absoluteNodeIndex;\r
-\r
-    /// Buffer tree node stream for use with LT(i).  This list grows\r
-    /// to fit new lookahead depths, but consume() wraps like a circular\r
-    /// buffer.\r
-    ///\r
-    pANTLR3_BASE_TREE        * lookAhead;\r
-\r
-    /// Number of elements available in the lookahead buffer at any point in\r
-    ///  time. This is the current size of the array.\r
-    ///\r
-    ANTLR3_UINT32                              lookAheadLength;\r
-\r
-    /// lookAhead[head] is the first symbol of lookahead, LT(1). \r
-    ///\r
-    ANTLR3_UINT32                              head;\r
-\r
-    /// Add new lookahead at lookahead[tail].  tail wraps around at the\r
-    /// end of the lookahead buffer so tail could be less than head.\r
-    ///\r
-    ANTLR3_UINT32                              tail;\r
-\r
-    /// Calls to mark() may be nested so we have to track a stack of\r
-    /// them.  The marker is an index into this stack.  Index 0 is\r
-    /// the first marker.  This is a List<TreeWalkState>\r
-    ///\r
-    pANTLR3_VECTOR                             markers;\r
-\r
-    // INTERFACE\r
-       //\r
-    void                               (*fill)                                         (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, ANTLR3_INT32 k);\r
-\r
-    void                               (*addLookahead)                         (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, pANTLR3_BASE_TREE node);\r
-\r
-    ANTLR3_BOOLEAN         (*hasNext)                                  (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);\r
-\r
-    pANTLR3_BASE_TREE  (*next)                                         (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);\r
-\r
-    pANTLR3_BASE_TREE  (*handleRootnode)                       (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);\r
-\r
-    pANTLR3_BASE_TREE  (*visitChild)                           (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, ANTLR3_UINT32 child);\r
-\r
-    void                               (*addNavigationNode)            (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, ANTLR3_UINT32 ttype);\r
-\r
-    pANTLR3_BASE_TREE  (*newDownNode)                          (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);\r
-\r
-       pANTLR3_BASE_TREE       (*newUpNode)                            (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);\r
-\r
-    void                               (*walkBackToMostRecentNodeWithUnvisitedChildren)\r
-                                                                                                       (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);\r
-\r
-    ANTLR3_BOOLEAN         (*hasUniqueNavigationNodes) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);\r
-\r
-    ANTLR3_UINT32          (*getLookaheadSize)                 (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);\r
-\r
-       void                            (*push)                                         (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, ANTLR3_INT32 index);\r
-\r
-       ANTLR3_INT32            (*pop)                                          (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);\r
-\r
-    void                               (*reset)                                        (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);\r
-\r
-    void                               (*free)                                         (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);\r
-\r
-       /// Indicates whether this node stream was derived from a prior\r
-       /// node stream to be used by a rewriting tree parser for instance.\r
-       /// If this flag is set to ANTLR3_TRUE, then when this stream is\r
-       /// closed it will not free the root tree as this tree always\r
-       /// belongs to the origniating node stream.\r
-       ///\r
-       ANTLR3_BOOLEAN                          isRewriter;\r
-\r
-}\r
-    ANTLR3_COMMON_TREE_NODE_STREAM;\r
-\r
-/** This structure is used to save the state information in the treenodestream\r
- *  when walking ahead with cyclic DFA or for syntactic predicates,\r
- *  we need to record the state of the tree node stream.  This\r
- *  class wraps up the current state of the CommonTreeNodeStream.\r
- *  Calling mark() will push another of these on the markers stack.\r
- */\r
-typedef struct ANTLR3_TREE_WALK_STATE_struct\r
-{\r
-    ANTLR3_UINT32                        currentChildIndex;\r
-    ANTLR3_MARKER                        absoluteNodeIndex;\r
-    pANTLR3_BASE_TREE            currentNode;\r
-    pANTLR3_BASE_TREE            previousNode;\r
-    ANTLR3_UINT32                        nodeStackSize;\r
-    pANTLR3_BASE_TREE      * lookAhead;\r
-    ANTLR3_UINT32                        lookAheadLength;\r
-    ANTLR3_UINT32                        tail;\r
-    ANTLR3_UINT32                        head;\r
-}\r
-    ANTLR3_TREE_WALK_STATE;\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif\r
+/// \file
+/// Definition of the ANTLR3 common tree node stream.
+///
+
+#ifndef        _ANTLR3_COMMON_TREE_NODE_STREAM__H
+#define        _ANTLR3_COMMON_TREE_NODE_STREAM__H
+
+// [The "BSD licence"]
+// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
+// http://www.temporal-wave.com
+// http://www.linkedin.com/in/jimidle
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the distribution.
+// 3. The name of the author may not be used to endorse or promote products
+//    derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include    <antlr3defs.h>
+#include    <antlr3commontreeadaptor.h>
+#include    <antlr3commontree.h>
+#include    <antlr3collections.h>
+#include    <antlr3intstream.h>
+#include    <antlr3string.h>
+
+/// Token buffer initial size settings ( will auto increase)
+///
+#define        DEFAULT_INITIAL_BUFFER_SIZE             100
+#define        INITIAL_CALL_STACK_SIZE                 10
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef        struct ANTLR3_TREE_NODE_STREAM_struct
+{
+    /// Any interface that implements this interface (is a 
+    ///  super structure containing this structure), may store the pointer
+    ///  to itself here in the super pointer, which is not used by 
+    ///  the tree node stream. This will point to an implementation
+    ///  of ANTLR3_COMMON_TREE_NODE_STREAM in this case.
+    ///
+    pANTLR3_COMMON_TREE_NODE_STREAM    ctns;
+
+    /// All input streams implement the ANTLR3_INT_STREAM interface...
+    ///
+    pANTLR3_INT_STREAM                 istream;
+
+       /// Get tree node at current input pointer + i ahead where i=1 is next node.
+       /// i<0 indicates nodes in the past.  So LT(-1) is previous node, but
+       /// implementations are not required to provide results for k < -1.
+       /// LT(0) is undefined.  For i>=n, return null.
+       /// Return NULL for LT(0) and any index that results in an absolute address
+       /// that is negative (beyond the start of the list).
+       ///
+       /// This is analogous to the LT() method of the TokenStream, but this
+       /// returns a tree node instead of a token.  Makes code gen identical
+       /// for both parser and tree grammars. :)
+       ///
+    pANTLR3_BASE_TREE                  (*_LT)                                                  (struct ANTLR3_TREE_NODE_STREAM_struct * tns, ANTLR3_INT32 k);
+
+       /// Where is this stream pulling nodes from?  This is not the name, but
+       /// the object that provides node objects.
+       ///
+    pANTLR3_BASE_TREE                  (*getTreeSource)                                (struct ANTLR3_TREE_NODE_STREAM_struct * tns);
+
+       /// What adaptor can tell me how to interpret/navigate nodes and
+       /// trees.  E.g., get text of a node.
+       ///
+    pANTLR3_BASE_TREE_ADAPTOR  (*getTreeAdaptor)                               (struct ANTLR3_TREE_NODE_STREAM_struct * tns);
+
+       /// As we flatten the tree, we use UP, DOWN nodes to represent
+       /// the tree structure.  When debugging we need unique nodes
+       /// so we have to instantiate new ones.  When doing normal tree
+       /// parsing, it's slow and a waste of memory to create unique
+       /// navigation nodes.  Default should be false;
+       ///
+    void                                               (*setUniqueNavigationNodes)             (struct ANTLR3_TREE_NODE_STREAM_struct * tns, ANTLR3_BOOLEAN uniqueNavigationNodes);
+
+    pANTLR3_STRING                             (*toString)                                             (struct ANTLR3_TREE_NODE_STREAM_struct * tns);
+
+       /// Return the text of all nodes from start to stop, inclusive.
+       /// If the stream does not buffer all the nodes then it can still
+       /// walk recursively from start until stop.  You can always return
+       /// null or "" too, but users should not access $ruleLabel.text in
+       /// an action of course in that case.
+       ///
+    pANTLR3_STRING                             (*toStringSS)                                   (struct ANTLR3_TREE_NODE_STREAM_struct * tns, pANTLR3_BASE_TREE start, pANTLR3_BASE_TREE stop);
+
+       /// Return the text of all nodes from start to stop, inclusive, into the
+       /// supplied buffer.
+       /// If the stream does not buffer all the nodes then it can still
+       /// walk recursively from start until stop.  You can always return
+       /// null or "" too, but users should not access $ruleLabel.text in
+       /// an action of course in that case.
+       ///
+    void                                               (*toStringWork)                                 (struct ANTLR3_TREE_NODE_STREAM_struct * tns, pANTLR3_BASE_TREE start, pANTLR3_BASE_TREE stop, pANTLR3_STRING buf);
+
+       /// Release up any and all space the the interface allocate, including for this structure.
+       ///
+    void                                               (*free)                                                 (struct ANTLR3_TREE_NODE_STREAM_struct * tns);
+
+       /// Get a tree node at an absolute index i; 0..n-1.
+       /// If you don't want to buffer up nodes, then this method makes no
+       /// sense for you.
+       ///
+       pANTLR3_BASE_TREE                       (*get)                                                  (struct ANTLR3_TREE_NODE_STREAM_struct * tns, ANTLR3_INT32 i);
+
+       // REWRITING TREES (used by tree parser)
+
+       /// Replace from start to stop child index of parent with t, which might
+       /// be a list.  Number of children may be different
+       /// after this call.  The stream is notified because it is walking the
+       /// tree and might need to know you are monkeying with the underlying
+       /// tree.  Also, it might be able to modify the node stream to avoid
+       /// restreaming for future phases.
+       ///
+       /// If parent is null, don't do anything; must be at root of overall tree.
+       /// Can't replace whatever points to the parent externally.  Do nothing.
+       ///
+       void                                            (*replaceChildren)                              (struct ANTLR3_TREE_NODE_STREAM_struct * tns, pANTLR3_BASE_TREE parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, pANTLR3_BASE_TREE t);
+
+}
+    ANTLR3_TREE_NODE_STREAM;
+
+typedef        struct ANTLR3_COMMON_TREE_NODE_STREAM_struct
+{
+    /// Any interface that implements this interface (is a 
+    /// super structure containing this structure), may store the pointer
+    /// to itself here in the super pointer, which is not used by 
+    /// the common tree node stream.
+    ///
+    void                                               * super;
+
+    /// Pointer to the tree node stream interface
+    ///
+    pANTLR3_TREE_NODE_STREAM   tnstream;
+
+    /// String factory for use by anything that wishes to create strings
+    /// such as a tree representation or some copy of the text etc.
+    ///
+    pANTLR3_STRING_FACTORY             stringFactory;
+
+    /// Dummy tree node that indicates a descent into a child
+    /// tree. Initialized by a call to create a new interface.
+    ///
+    ANTLR3_COMMON_TREE                 DOWN;
+
+    /// Dummy tree node that indicates a descent up to a parent
+    /// tree. Initialized by a call to create a new interface.
+    ///
+    ANTLR3_COMMON_TREE                 UP;
+
+    /// Dummy tree node that indicates the termination point of the
+    /// tree. Initialized by a call to create a new interface.
+    ///
+    ANTLR3_COMMON_TREE                 EOF_NODE;
+
+    /// Dummy node that is returned if we need to indicate an invalid node
+    /// for any reason.
+    ///
+    ANTLR3_COMMON_TREE                 INVALID_NODE;
+
+       /// The complete mapping from stream index to tree node.
+       /// This buffer includes pointers to DOWN, UP, and EOF nodes.
+       /// It is built upon ctor invocation.  The elements are type
+       /// Object as we don't what the trees look like.
+       ///
+       /// Load upon first need of the buffer so we can set token types
+       /// of interest for reverseIndexing.  Slows us down a wee bit to
+       /// do all of the if p==-1 testing everywhere though, though in C
+       /// you won't really be able to measure this.
+       ///
+       /// Must be freed when the tree node stream is torn down.
+       ///
+       pANTLR3_VECTOR                          nodes;
+
+    /// If set to ANTLR3_TRUE then the navigation nodes UP, DOWN are
+    /// duplicated rather than reused within the tree.
+    ///
+    ANTLR3_BOOLEAN                             uniqueNavigationNodes;
+
+    /// Which tree are we navigating ?
+    ///
+    pANTLR3_BASE_TREE                  root;
+
+    /// Pointer to tree adaptor interface that manipulates/builds
+    /// the tree.
+    ///
+    pANTLR3_BASE_TREE_ADAPTOR  adaptor;
+
+    /// As we walk down the nodes, we must track parent nodes so we know
+    /// where to go after walking the last child of a node.  When visiting
+    /// a child, push current node and current index (current index
+    /// is first stored in the tree node structure to avoid two stacks.
+    ///
+    pANTLR3_STACK                              nodeStack;
+
+       /// The current index into the nodes vector of the current tree
+       /// we are parsing and possibly rewriting.
+       ///
+       ANTLR3_INT32                            p;
+
+    /// Which node are we currently visiting?
+    ///
+    pANTLR3_BASE_TREE                  currentNode;
+
+    /// Which node did we last visit? Used for LT(-1)
+    ///
+    pANTLR3_BASE_TREE                  previousNode;
+
+    /// Which child are we currently visiting?  If -1 we have not visited
+    /// this node yet; next consume() request will set currentIndex to 0.
+    ///
+    ANTLR3_INT32                               currentChildIndex;
+
+    /// What node index did we just consume?  i=0..n-1 for n node trees.
+    /// IntStream.next is hence 1 + this value.  Size will be same.
+    ///
+    ANTLR3_MARKER                              absoluteNodeIndex;
+
+    /// Buffer tree node stream for use with LT(i).  This list grows
+    /// to fit new lookahead depths, but consume() wraps like a circular
+    /// buffer.
+    ///
+    pANTLR3_BASE_TREE        * lookAhead;
+
+    /// Number of elements available in the lookahead buffer at any point in
+    ///  time. This is the current size of the array.
+    ///
+    ANTLR3_UINT32                              lookAheadLength;
+
+    /// lookAhead[head] is the first symbol of lookahead, LT(1). 
+    ///
+    ANTLR3_UINT32                              head;
+
+    /// Add new lookahead at lookahead[tail].  tail wraps around at the
+    /// end of the lookahead buffer so tail could be less than head.
+    ///
+    ANTLR3_UINT32                              tail;
+
+    /// Calls to mark() may be nested so we have to track a stack of
+    /// them.  The marker is an index into this stack.  Index 0 is
+    /// the first marker.  This is a List<TreeWalkState>
+    ///
+    pANTLR3_VECTOR                             markers;
+
+    // INTERFACE
+       //
+    void                               (*fill)                                         (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, ANTLR3_INT32 k);
+
+    void                               (*addLookahead)                         (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, pANTLR3_BASE_TREE node);
+
+    ANTLR3_BOOLEAN         (*hasNext)                                  (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);
+
+    pANTLR3_BASE_TREE  (*next)                                         (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);
+
+    pANTLR3_BASE_TREE  (*handleRootnode)                       (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);
+
+    pANTLR3_BASE_TREE  (*visitChild)                           (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, ANTLR3_UINT32 child);
+
+    void                               (*addNavigationNode)            (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, ANTLR3_UINT32 ttype);
+
+    pANTLR3_BASE_TREE  (*newDownNode)                          (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);
+
+       pANTLR3_BASE_TREE       (*newUpNode)                            (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);
+
+    void                               (*walkBackToMostRecentNodeWithUnvisitedChildren)
+                                                                                                       (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);
+
+    ANTLR3_BOOLEAN         (*hasUniqueNavigationNodes) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);
+
+    ANTLR3_UINT32          (*getLookaheadSize)                 (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);
+
+       void                            (*push)                                         (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, ANTLR3_INT32 index);
+
+       ANTLR3_INT32            (*pop)                                          (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);
+
+    void                               (*reset)                                        (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);
+
+    void                               (*free)                                         (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns);
+
+       /// Indicates whether this node stream was derived from a prior
+       /// node stream to be used by a rewriting tree parser for instance.
+       /// If this flag is set to ANTLR3_TRUE, then when this stream is
+       /// closed it will not free the root tree as this tree always
+       /// belongs to the origniating node stream.
+       ///
+       ANTLR3_BOOLEAN                          isRewriter;
+
+}
+    ANTLR3_COMMON_TREE_NODE_STREAM;
+
+/** This structure is used to save the state information in the treenodestream
+ *  when walking ahead with cyclic DFA or for syntactic predicates,
+ *  we need to record the state of the tree node stream.  This
+ *  class wraps up the current state of the CommonTreeNodeStream.
+ *  Calling mark() will push another of these on the markers stack.
+ */
+typedef struct ANTLR3_TREE_WALK_STATE_struct
+{
+    ANTLR3_UINT32                        currentChildIndex;
+    ANTLR3_MARKER                        absoluteNodeIndex;
+    pANTLR3_BASE_TREE            currentNode;
+    pANTLR3_BASE_TREE            previousNode;
+    ANTLR3_UINT32                        nodeStackSize;
+    pANTLR3_BASE_TREE      * lookAhead;
+    ANTLR3_UINT32                        lookAheadLength;
+    ANTLR3_UINT32                        tail;
+    ANTLR3_UINT32                        head;
+}
+    ANTLR3_TREE_WALK_STATE;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif