forked from jasder/antlr
no more line/col in string stream
[git-p4: depot-paths = "//depot/code/antlr4/main/": change = 9417]
This commit is contained in:
parent
4cc8a8e501
commit
2c98cae751
|
@ -28,8 +28,6 @@
|
|||
*/
|
||||
package org.antlr.v4.runtime;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/** A pretty quick CharStream that pulls all data from an array
|
||||
* directly. Every method call counts in the lexer. Java's
|
||||
* strings aren't very good so I'm avoiding.
|
||||
|
@ -44,25 +42,6 @@ public class ANTLRStringStream implements CharStream {
|
|||
/** 0..n-1 index into string of next char */
|
||||
protected int p=0;
|
||||
|
||||
/** line number 1..n within the input */
|
||||
protected int line = 1;
|
||||
|
||||
/** The index of the character relative to the beginning of the line 0..n-1 */
|
||||
protected int charPositionInLine = 0;
|
||||
|
||||
/** tracks how deep mark() calls are nested */
|
||||
protected int markDepth = 0;
|
||||
|
||||
/** A list of CharStreamState objects that tracks the stream state
|
||||
* values line, charPositionInLine, and p that can change as you
|
||||
* move through the input stream. Indexed from 1..markDepth.
|
||||
* A null is kept @ index 0. Create upon first call to mark().
|
||||
*/
|
||||
protected List<CharStreamState> markers;
|
||||
|
||||
/** Track the last mark() call result value for use in rewind(). */
|
||||
protected int lastMarker;
|
||||
|
||||
/** What is name or source of this char stream? */
|
||||
public String name;
|
||||
|
||||
|
@ -89,24 +68,12 @@ public class ANTLRStringStream implements CharStream {
|
|||
*/
|
||||
public void reset() {
|
||||
p = 0;
|
||||
line = 1;
|
||||
charPositionInLine = 0;
|
||||
markDepth = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void consume() {
|
||||
//System.out.println("prev p="+p+", c="+(char)data[p]);
|
||||
if ( p < n ) {
|
||||
charPositionInLine++;
|
||||
if ( data[p]=='\n' ) {
|
||||
/*
|
||||
System.out.println("newline char found on line: "+line+
|
||||
"@ pos="+charPositionInLine);
|
||||
*/
|
||||
line++;
|
||||
charPositionInLine=0;
|
||||
}
|
||||
p++;
|
||||
//System.out.println("p moves to "+p+" (c='"+(char)data[p]+"')");
|
||||
}
|
||||
|
@ -151,47 +118,14 @@ public class ANTLRStringStream implements CharStream {
|
|||
return n;
|
||||
}
|
||||
|
||||
/** mark/release do nothing; we have entire buffer */
|
||||
@Override
|
||||
public int mark() {
|
||||
if ( markers==null ) {
|
||||
markers = new ArrayList<CharStreamState>();
|
||||
markers.add(null); // depth 0
|
||||
}
|
||||
markDepth++;
|
||||
CharStreamState state;
|
||||
if ( markDepth>=markers.size() ) {
|
||||
state = new CharStreamState();
|
||||
markers.add(state);
|
||||
}
|
||||
else {
|
||||
state = markers.get(markDepth);
|
||||
}
|
||||
state.p = p;
|
||||
state.line = line;
|
||||
state.charPositionInLine = charPositionInLine;
|
||||
lastMarker = markDepth;
|
||||
return markDepth;
|
||||
return p;
|
||||
}
|
||||
|
||||
public void rewind(int m) {
|
||||
CharStreamState state = markers.get(m);
|
||||
// restore stream state
|
||||
seek(state.p);
|
||||
line = state.line;
|
||||
charPositionInLine = state.charPositionInLine;
|
||||
release(m);
|
||||
}
|
||||
|
||||
public void rewind() {
|
||||
rewind(lastMarker);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void release(int marker) {
|
||||
// unwind any other markers made after m and release m
|
||||
markDepth = marker;
|
||||
// release this marker
|
||||
markDepth--;
|
||||
}
|
||||
|
||||
/** consume() ahead until p==index; can't just set p=index as we must
|
||||
|
@ -220,22 +154,6 @@ public class ANTLRStringStream implements CharStream {
|
|||
return new String(data, start, count);
|
||||
}
|
||||
|
||||
public int getLine() {
|
||||
return line;
|
||||
}
|
||||
|
||||
public int getCharPositionInLine() {
|
||||
return charPositionInLine;
|
||||
}
|
||||
|
||||
public void setLine(int line) {
|
||||
this.line = line;
|
||||
}
|
||||
|
||||
public void setCharPositionInLine(int pos) {
|
||||
this.charPositionInLine = pos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSourceName() {
|
||||
return name;
|
||||
|
|
|
@ -1,46 +0,0 @@
|
|||
/*
|
||||
[The "BSD license"]
|
||||
Copyright (c) 2011 Terence Parr
|
||||
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.
|
||||
*/
|
||||
package org.antlr.v4.runtime;
|
||||
|
||||
/** When walking ahead with cyclic DFA or for syntactic predicates,
|
||||
* we need to record the state of the input stream (char index,
|
||||
* line, etc...) so that we can rewind the state after scanning ahead.
|
||||
*
|
||||
* This is the complete state of a stream.
|
||||
*/
|
||||
public class CharStreamState {
|
||||
/** Index into the char stream of next lookahead char */
|
||||
public int p;
|
||||
|
||||
/** What line number is the scanner at before processing buffer[p]? */
|
||||
public int line;
|
||||
|
||||
/** What char position 0..n-1 in line is scanner before processing buffer[p]? */
|
||||
public int charPositionInLine;
|
||||
}
|
Loading…
Reference in New Issue