| // [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. |
| |
| #ifndef DEBUG_DEALLOC |
| #define DEBUG_DEALLOC |
| #endif |
| |
| @protocol ANTLRIntStream < NSObject, NSCopying > |
| |
| - (void) consume; |
| |
| // Get unichar at current input pointer + i ahead where i=1 is next character as int for including ANTLRCharStreamEOF (-1) in the data range |
| - (NSInteger) LA:(NSInteger) i; |
| |
| // Tell the stream to start buffering if it hasn't already. Return |
| // current input position, index(), or some other marker so that |
| // when passed to rewind() you get back to the same spot. |
| // rewind(mark()) should not affect the input cursor. |
| // TODO: problem in that lexer stream returns not index but some marker |
| |
| - (NSInteger) mark; |
| |
| // Return the current input symbol index 0..n where n indicates the |
| // last symbol has been read. |
| |
| - (NSInteger) index; |
| |
| - (NSUInteger) line; |
| |
| - (NSUInteger) charPositionInLine; |
| |
| // Reset the stream so that next call to index would return marker. |
| // The marker will usually be -index but it doesn't have to be. It's |
| // just a marker to indicate what state the stream was in. This is |
| // essentially calling -release: and -seek:. If there are markers |
| // created after this marker argument, this routine must unroll them |
| // like a stack. Assume the state the stream was in when this marker |
| // was created. |
| |
| - (void) rewind; |
| - (void) rewind:(NSInteger) marker; |
| |
| // You may want to commit to a backtrack but don't want to force the |
| // stream to keep bookkeeping objects around for a marker that is |
| // no longer necessary. This will have the same behavior as |
| // rewind() except it releases resources without the backward seek. |
| |
| - (void) release:(NSInteger) marker; |
| |
| // Set the input cursor to the position indicated by index. This is |
| // normally used to seek ahead in the input stream. No buffering is |
| // required to do this unless you know your stream will use seek to |
| // move backwards such as when backtracking. |
| // This is different from rewind in its multi-directional |
| // requirement and in that its argument is strictly an input cursor (index). |
| // |
| // For char streams, seeking forward must update the stream state such |
| // as line number. For seeking backwards, you will be presumably |
| // backtracking using the mark/rewind mechanism that restores state and |
| // so this method does not need to update state when seeking backwards. |
| // |
| // Currently, this method is only used for efficient backtracking, but |
| // in the future it may be used for incremental parsing. |
| |
| - (void) seek:(NSInteger) anIndex; |
| |
| /** Only makes sense for streams that buffer everything up probably, but |
| * might be useful to display the entire stream or for testing. This |
| * value includes a single EOF. |
| */ |
| - (NSUInteger) size; |
| /** Where are you getting symbols from? Normally, implementations will |
| * pass the buck all the way to the lexer who can ask its input stream |
| * for the file name or whatever. |
| */ |
| - (NSString *)getSourceName; |
| |
| //@property (assign) NSInteger index; |
| //@property (assign) NSUInteger line; |
| //@property (assign) NSUInteger charPositionInLine; |
| |
| |
| @end |