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