1// 2// ANTLRUnbufferedTokenStream.m 3// ANTLR 4// 5// Created by Alan Condit on 7/12/10. 6// [The "BSD licence"] 7// Copyright (c) 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 "ANTLRUnbufferedTokenStream.h" 33 34@implementation ANTLRUnbufferedTokenStream 35 36@synthesize tokenSource; 37@synthesize tokenIndex; 38@synthesize channel; 39 40+ (ANTLRUnbufferedTokenStream *)newANTLRUnbufferedTokenStream:(id<ANTLRTokenSource>)aTokenSource 41{ 42 return [[ANTLRUnbufferedTokenStream alloc] initWithTokenSource:aTokenSource]; 43} 44 45- (id) init 46{ 47 if ((self = [super init]) != nil) { 48 tokenSource = nil; 49 tokenIndex = 0; 50 channel = ANTLRTokenChannelDefault; 51 } 52 return self; 53} 54 55- (id) initWithTokenSource:(id<ANTLRTokenSource>)aTokenSource 56{ 57 if ((self = [super init]) != nil) { 58 tokenSource = aTokenSource; 59 if ( tokenSource ) [tokenSource retain]; 60 tokenIndex = 0; 61 channel = ANTLRTokenChannelDefault; 62 } 63 return self; 64} 65 66- (void) dealloc 67{ 68#ifdef DEBUG_DEALLOC 69 NSLog( @"called dealloc in ANTLRUnbufferedTokenStream" ); 70#endif 71 if ( tokenSource ) [tokenSource release]; 72 [super dealloc]; 73} 74 75- (id<ANTLRToken>)nextElement 76{ 77 id<ANTLRToken> t = [tokenSource nextToken]; 78 [t setTokenIndex:tokenIndex++]; 79 return t; 80} 81 82- (BOOL)isEOF:(id<ANTLRToken>)aToken 83{ 84 return (aToken.type == ANTLRTokenTypeEOF); 85} 86 87- (id<ANTLRTokenSource>)getTokenSource 88{ 89 return tokenSource; 90} 91 92- (NSString *)toStringFromStart:(NSInteger)aStart ToEnd:(NSInteger)aStop 93{ 94 return @"n/a"; 95} 96 97- (NSString *)toStringFromToken:(id<ANTLRToken>)aStart ToEnd:(id<ANTLRToken>)aStop 98{ 99 return @"n/a"; 100} 101 102- (NSInteger)LA:(NSInteger)anIdx 103{ 104 return [[self LT:anIdx] type]; 105} 106 107- (id<ANTLRToken>)objectAtIndex:(NSInteger)anIdx 108{ 109 @throw [ANTLRRuntimeException newException:@"Absolute token indexes are meaningless in an unbuffered stream"]; 110} 111 112- (NSString *)getSourceName 113{ 114 return [tokenSource getSourceName]; 115} 116 117 118@end 119