1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/// \file 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/// Definition of the ANTLR3 base tree. 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/// 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifndef _ANTLR3_BASE_TREE_H 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define _ANTLR3_BASE_TREE_H 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// [The "BSD licence"] 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// http://www.temporal-wave.com 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// http://www.linkedin.com/in/jimidle 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// All rights reserved. 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Redistribution and use in source and binary forms, with or without 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// modification, are permitted provided that the following conditions 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// are met: 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 1. Redistributions of source code must retain the above copyright 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// notice, this list of conditions and the following disclaimer. 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 2. Redistributions in binary form must reproduce the above copyright 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// notice, this list of conditions and the following disclaimer in the 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// documentation and/or other materials provided with the distribution. 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 3. The name of the author may not be used to endorse or promote products 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// derived from this software without specific prior written permission. 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3defs.h> 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3collections.h> 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3string.h> 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifdef __cplusplus 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverextern "C" { 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/// A generic tree implementation with no payload. You must subclass to 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/// actually have any user data. ANTLR v3 uses a list of children approach 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/// instead of the child-sibling approach in v2. A flat tree (a list) is 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/// an empty node whose children represent the list. An empty (as in it does not 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/// have payload itself), but non-null node is called "nil". 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/// 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvertypedef struct ANTLR3_BASE_TREE_struct 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Implementers of this interface sometimes require a pointer to their selves. 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * super; 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Generic void pointer allows the grammar programmer to attach any structure they 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// like to a tree node, in many cases saving the need to create their own tree 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// and tree adaptors. ANTLR does not use this pointer, but will copy it for you and so on. 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * u; 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// The list of all the children that belong to this node. They are not part of the node 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// as they belong to the common tree node that implements this. 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_VECTOR children; 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// This is used to store the current child index position while descending 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// and ascending trees as the tree walk progresses. 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_MARKER savedIndex; 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// A string factory to produce strings for toString etc 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STRING_FACTORY strFactory; 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// A pointer to a function that returns the common token pointer 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// for the payload in the supplied tree. 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_COMMON_TOKEN (*getToken) (struct ANTLR3_BASE_TREE_struct * tree); 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*addChild) (struct ANTLR3_BASE_TREE_struct * tree, void * child); 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*addChildren) (struct ANTLR3_BASE_TREE_struct * tree, pANTLR3_LIST kids); 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*createChildrenList) (struct ANTLR3_BASE_TREE_struct * tree); 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * (*deleteChild) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 i); 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*replaceChildren) (struct ANTLR3_BASE_TREE_struct * parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, struct ANTLR3_BASE_TREE_struct * t); 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * (*dupNode) (struct ANTLR3_BASE_TREE_struct * dupNode); 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * (*dupTree) (struct ANTLR3_BASE_TREE_struct * tree); 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 (*getCharPositionInLine) (struct ANTLR3_BASE_TREE_struct * tree); 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * (*getChild) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 i); 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*setChildIndex) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_INT32 ); 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_INT32 (*getChildIndex) (struct ANTLR3_BASE_TREE_struct * tree ); 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 (*getChildCount) (struct ANTLR3_BASE_TREE_struct * tree); 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver struct ANTLR3_BASE_TREE_struct * (*getParent) (struct ANTLR3_BASE_TREE_struct * tree); 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*setParent) (struct ANTLR3_BASE_TREE_struct * tree, struct ANTLR3_BASE_TREE_struct * parent); 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 (*getType) (struct ANTLR3_BASE_TREE_struct * tree); 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * (*getFirstChildWithType) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 type); 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 (*getLine) (struct ANTLR3_BASE_TREE_struct * tree); 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STRING (*getText) (struct ANTLR3_BASE_TREE_struct * tree); 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_BOOLEAN (*isNilNode) (struct ANTLR3_BASE_TREE_struct * tree); 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*setChild) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 i, void * child); 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STRING (*toStringTree) (struct ANTLR3_BASE_TREE_struct * tree); 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STRING (*toString) (struct ANTLR3_BASE_TREE_struct * tree); 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*freshenPACIndexesAll) (struct ANTLR3_BASE_TREE_struct * tree); 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*freshenPACIndexes) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 offset); 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*reuse) (struct ANTLR3_BASE_TREE_struct * tree); 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*free) (struct ANTLR3_BASE_TREE_struct * tree); 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_BASE_TREE; 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifdef __cplusplus 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 144