1// 2// RewriteRuleTokenStream.m 3// ANTLR 4// 5// Created by Kay Röpke on 7/16/07. 6// [The "BSD licence"] 7// Copyright (c) 2006-2007 Kay Roepke 2010 Alan Condit 8// All rights reserved. 9// 10// Redistribution and use in source and binary forms, with or without 11// modification, are permitted provided that the following conditions 12// are met: 13// 1. Redistributions of source code must retain the above copyright 14// notice, this list of conditions and the following disclaimer. 15// 2. Redistributions in binary form must reproduce the above copyright 16// notice, this list of conditions and the following disclaimer in the 17// documentation and/or other materials provided with the distribution. 18// 3. The name of the author may not be used to endorse or promote products 19// derived from this software without specific prior written permission. 20// 21// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 32#import "RewriteRuleTokenStream.h" 33#import "RuntimeException.h" 34#import "HashMap.h" 35#import "MapElement.h" 36 37@implementation RewriteRuleTokenStream 38 39+ (id) newRewriteRuleTokenStream:(id<TreeAdaptor>)anAdaptor 40 description:(NSString *)elementDescription 41{ 42 return [[RewriteRuleTokenStream alloc] initWithTreeAdaptor:anAdaptor 43 description:elementDescription]; 44} 45 46/** Create a stream with one element */ 47+ (id) newRewriteRuleTokenStream:(id<TreeAdaptor>)adaptor 48 description:(NSString *)elementDescription 49 element:(id) oneElement 50{ 51 return [[RewriteRuleTokenStream alloc] initWithTreeAdaptor:adaptor 52 description:elementDescription 53 element:oneElement]; 54} 55 56/** Create a stream, but feed off an existing list */ 57+ (id) newRewriteRuleTokenStream:(id<TreeAdaptor>)adaptor 58 description:(NSString *)elementDescription 59 elements:(AMutableArray *)elements 60{ 61 return [[RewriteRuleTokenStream alloc] initWithTreeAdaptor:adaptor 62 description:elementDescription 63 elements:elements]; 64} 65 66- (id) init 67{ 68 if ((self = [super init]) != nil ) { 69 } 70 return self; 71} 72 73- (id) initWithTreeAdaptor:(id<TreeAdaptor>)anAdaptor 74 description:(NSString *)aDescription 75{ 76 if ((self = [super initWithTreeAdaptor:anAdaptor 77 description:aDescription]) != nil ) { 78 } 79 return self; 80} 81 82- (id) initWithTreeAdaptor:(id<TreeAdaptor>)anAdaptor 83 description:(NSString *)aDescription 84 element:(id)anElement 85{ 86 if ((self = [super initWithTreeAdaptor:anAdaptor 87 description:aDescription 88 element:anElement]) != nil ) { 89 } 90 return self; 91} 92 93- (id) initWithTreeAdaptor:(id<TreeAdaptor>)anAdaptor 94 description:(NSString *)aDescription 95 elements:(AMutableArray *)elementList 96{ 97 if ((self = [super initWithTreeAdaptor:anAdaptor 98 description:aDescription 99 elements:elementList]) != nil ) { 100 } 101 return self; 102} 103 104- (id<BaseTree>) nextNode 105{ 106 id<Token> t = (id<Token>)[self _next]; 107 return [treeAdaptor create:t]; 108} 109 110- (id) nextToken 111{ 112 return [self _next]; 113} 114 115/** Don't convert to a tree unless they explicitly call nextTree. 116 * This way we can do hetero tree nodes in rewrite. 117 */ 118- (id<BaseTree>) toTree:(id<Token>)element 119{ 120 return (id<BaseTree>)element; 121} 122 123- (id) copyElement:(id)element 124{ 125 @throw [RuntimeException newException:@"copy can't be called for a token stream."]; 126} 127 128@end 129