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