1// [The "BSD licence"] 2// Copyright (c) 2006-2007 Kay Roepke 3// All rights reserved. 4// 5// Redistribution and use in source and binary forms, with or without 6// modification, are permitted provided that the following conditions 7// are met: 8// 1. Redistributions of source code must retain the above copyright 9// notice, this list of conditions and the following disclaimer. 10// 2. Redistributions in binary form must reproduce the above copyright 11// notice, this list of conditions and the following disclaimer in the 12// documentation and/or other materials provided with the distribution. 13// 3. The name of the author may not be used to endorse or promote products 14// derived from this software without specific prior written permission. 15// 16// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 27#import "ANTLRTree.h" 28#import "ANTLRToken.h" 29// TODO: this shouldn't be here...but needed for invalidNode 30#import "ANTLRCommonTree.h" 31 32@implementation ANTLRTree 33 34@synthesize isEmpty; 35@synthesize isEmptyNode; 36@synthesize invalidNode; 37@synthesize children; 38 39#pragma mark ANTLRTree protocol conformance 40 41+ (id<ANTLRTree>) invalidNode 42{ 43 static id<ANTLRTree> invalidNode = nil; 44 if (!invalidNode) { 45 invalidNode = [[ANTLRCommonTree alloc] initWithTokenType:ANTLRTokenTypeInvalid]; 46 } 47 return invalidNode; 48} 49 50- (id<ANTLRTree>) init 51{ 52 self = [super init]; 53 if ( self != nil ) { 54 isEmptyNode = NO; 55 } 56 return self; 57} 58 59- (void) dealloc 60{ 61 [super dealloc]; 62} 63 64- (id<ANTLRTree>) getChild:(NSUInteger) index 65{ 66 return nil; 67} 68 69- (NSUInteger) getChildCount 70{ 71 return 0; 72} 73 74- (NSArray *) getChildren 75{ 76 return nil; 77} 78 79 // Add tree as a child to this node. If tree is nil, do nothing. If tree 80 // is an empty node, add all children of tree to our children. 81 82- (void) addChild:(id<ANTLRTree>) tree 83{ 84} 85 86- (void) addChildren:(NSArray *) theChildren 87{ 88} 89 90- (void) removeAllChildren 91{ 92} 93 94 // Indicates the node is an empty node but may still have children, meaning 95 // the tree is a flat list. 96 97- (BOOL) isEmpty 98{ 99 return isEmptyNode; 100} 101 102- (void) setIsEmpty:(BOOL)emptyFlag 103{ 104 isEmptyNode = emptyFlag; 105} 106 107#pragma mark ANTLRTree abstract base class 108 109 // Return a token type; needed for tree parsing 110- (NSInteger) getType 111{ 112 return 0; 113} 114 115- (NSString *) getText 116{ 117 return [self description]; 118} 119 120 // In case we don't have a token payload, what is the line for errors? 121- (NSInteger) getLine 122{ 123 return 0; 124} 125 126- (NSInteger) getCharPositionInLine 127{ 128 return 0; 129} 130 131- (NSString *) treeDescription 132{ 133 return @""; 134} 135 136- (NSString *) description 137{ 138 return @""; 139} 140 141- (void) _createChildrenList 142{ 143 if ( children == nil ) 144 children = [[NSMutableArray alloc] init]; 145} 146 147@end 148 149@end