aboutsummaryrefslogtreecommitdiff
path: root/antlr-3.4/runtime/ObjC/Framework/ANTLRTreeAdaptor.h
diff options
context:
space:
mode:
Diffstat (limited to 'antlr-3.4/runtime/ObjC/Framework/ANTLRTreeAdaptor.h')
-rw-r--r--antlr-3.4/runtime/ObjC/Framework/ANTLRTreeAdaptor.h157
1 files changed, 157 insertions, 0 deletions
diff --git a/antlr-3.4/runtime/ObjC/Framework/ANTLRTreeAdaptor.h b/antlr-3.4/runtime/ObjC/Framework/ANTLRTreeAdaptor.h
new file mode 100644
index 0000000..e0d94e0
--- /dev/null
+++ b/antlr-3.4/runtime/ObjC/Framework/ANTLRTreeAdaptor.h
@@ -0,0 +1,157 @@
+// [The "BSD licence"]
+// Copyright (c) 2006-2007 Kay Roepke 2010 Alan Condit
+// 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.
+
+#import "ANTLRToken.h"
+#import "ANTLRBaseTree.h"
+#import "ANTLRTokenStream.h"
+
+#pragma warning tree/node diction is broken.
+
+@protocol ANTLRTreeAdaptor <NSObject, NSCopying>
+
+#pragma mark Construction
+
+#pragma mark ANTLRTreeAdaptor implementation
+- (id)dupNode:(id)aNode; // copies just the node
+- (id)dupTree:(id)aTree; // copies the entire subtree, recursively
+
+/** Return a nil node (an empty but non-null node) that can hold
+ * a list of element as the children. If you want a flat tree (a list)
+ * use "t=adaptor.nil(); t.addChild(x); t.addChild(y);"
+ */
+- (id) emptyNode;
+
+/** Return a tree node representing an error. This node records the
+ * tokens consumed during error recovery. The start token indicates the
+ * input symbol at which the error was detected. The stop token indicates
+ * the last symbol consumed during recovery.
+ *
+ * You must specify the input stream so that the erroneous text can
+ * be packaged up in the error node. The exception could be useful
+ * to some applications; default implementation stores ptr to it in
+ * the CommonErrorNode.
+ *
+ * This only makes sense during token parsing, not tree parsing.
+ * Tree parsing should happen only when parsing and tree construction
+ * succeed.
+ */
+- (id) errorNode:(id<ANTLRTokenStream>)anInput
+ From:(id<ANTLRToken>)aStartToken
+ To:(id<ANTLRToken>)aStopToken
+ Exception:(NSException *) e;
+
+/** Is tree considered a nil node used to make lists of child nodes? */
+- (BOOL) isNil:(id)aTree;
+
+
+- (void) addChild:(id)child toTree:(id)aTree;
+
+/** If oldRoot is a nil root, just copy or move the children to newRoot.
+ * If not a nil root, make oldRoot a child of newRoot.
+ *
+ * old=^(nil a b c), new=r yields ^(r a b c)
+ * old=^(a b c), new=r yields ^(r ^(a b c))
+ *
+ * If newRoot is a nil-rooted single child tree, use the single
+ * child as the new root node.
+ *
+ * old=^(nil a b c), new=^(nil r) yields ^(r a b c)
+ * old=^(a b c), new=^(nil r) yields ^(r ^(a b c))
+ *
+ * If oldRoot was null, it's ok, just return newRoot (even if isNil).
+ *
+ * old=null, new=r yields r
+ * old=null, new=^(nil r) yields ^(nil r)
+ *
+ * Return newRoot. Throw an exception if newRoot is not a
+ * simple node or nil root with a single child node--it must be a root
+ * node. If newRoot is ^(nil x) return x as newRoot.
+ *
+ * Be advised that it's ok for newRoot to point at oldRoot's
+ * children; i.e., you don't have to copy the list. We are
+ * constructing these nodes so we should have this control for
+ * efficiency.
+ */
+- (id) becomeRoot:(id)newRoot old:(id)oldRoot;
+
+- (id) rulePostProcessing:(id)root;
+
+#pragma mark Rewrite Rules
+
+- (NSUInteger) getUniqueID:(id)aNode;
+
+- (id) create:(id<ANTLRToken>)payload;
+- (id) createTree:(NSInteger)tokenType FromToken:(id<ANTLRToken>)fromToken;
+- (id) createTree:(NSInteger)tokenType FromToken:(id<ANTLRToken>)fromToken Text:(NSString *)text;
+- (id) createTree:(NSInteger)tokenType Text:(NSString *)text;
+
+#pragma mark Content
+
+- (id)dupNode:(id)aNode;
+- (id)dupTree:(id)aTree;
+
+- (NSInteger) getType:(id)aNode;
+- (void) setType:(id)aNode Type:(NSInteger)tokenType;
+
+- (NSString *) getText:(id)aNode;
+- (void) setText:(id)aNode Text:(NSString *)tokenText;
+
+//- (id<ANTLRToken>) getToken:(id)t;
+
+- (void) setTokenBoundaries:(id)aTree From:(id<ANTLRToken>)startToken To:(id<ANTLRToken>)stopToken;
+- (NSInteger) getTokenStartIndex:(id)aTree;
+- (NSInteger) getTokenStopIndex:(id)aTree;
+
+#pragma mark Navigation / Tree Parsing
+
+/** Get a child 0..n-1 node */
+- (id) getChild:(id)aNode At:(NSInteger) i;
+/** Set ith child (0..n-1) to t; t must be non-null and non-nil node */
+- (void) setChild:(id)aTree At:(NSInteger)index Child:(id)child;
+/** Remove ith child and shift children down from right. */
+- (id) deleteChild:(id)t Index:(NSInteger)index;
+
+/** How many children? If 0, then this is a leaf node */
+- (NSInteger) getChildCount:(id) aTree;
+
+/** Who is the parent node of this node; if null, implies node is root.
+ * If your node type doesn't handle this, it's ok but the tree rewrites
+ * in tree parsers need this functionality.
+ */
+- (id)getParent:(id)t;
+- (void) setParent:(id)t With:(id)parent;
+
+/** What index is this node in the child list? Range: 0..n-1
+ * If your node type doesn't handle this, it's ok but the tree rewrites
+ * in tree parsers need this functionality.
+ */
+- (NSInteger) getChildIndex:(id)t;
+- (void) setChildIndex:(id)t With:(NSInteger)index;
+
+- (void) replaceChildren:(id)parent From:(NSInteger)startChildIndex To:(NSInteger)stopChildIndex With:(id)t;
+
+@end
+