1 /* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 4.0 */
5 * An implementation of interface CharStream, where the stream is assumed to
6 * contain only ASCII characters (without unicode processing).
9 public class SimpleCharStream
11 public static final boolean staticFlag
= false;
15 public int bufpos
= -1;
16 protected int bufline
[];
17 protected int bufcolumn
[];
19 protected int column
= 0;
20 protected int line
= 1;
22 protected boolean prevCharIsCR
= false;
23 protected boolean prevCharIsLF
= false;
25 protected java
.io
.Reader inputStream
;
27 protected char[] buffer
;
28 protected int maxNextCharInd
= 0;
29 protected int inBuf
= 0;
30 protected int tabSize
= 8;
32 protected void setTabSize(int i
) { tabSize
= i
; }
33 protected int getTabSize(int i
) { return tabSize
; }
36 protected void expandBuff(boolean wrapAround
)
38 char[] newbuffer
= new char[bufsize
+ 2048];
39 int newbufline
[] = new int[bufsize
+ 2048];
40 int newbufcolumn
[] = new int[bufsize
+ 2048];
46 System
.arraycopy(buffer
, tokenBegin
, newbuffer
, 0, bufsize
- tokenBegin
);
47 System
.arraycopy(buffer
, 0, newbuffer
,
48 bufsize
- tokenBegin
, bufpos
);
51 System
.arraycopy(bufline
, tokenBegin
, newbufline
, 0, bufsize
- tokenBegin
);
52 System
.arraycopy(bufline
, 0, newbufline
, bufsize
- tokenBegin
, bufpos
);
55 System
.arraycopy(bufcolumn
, tokenBegin
, newbufcolumn
, 0, bufsize
- tokenBegin
);
56 System
.arraycopy(bufcolumn
, 0, newbufcolumn
, bufsize
- tokenBegin
, bufpos
);
57 bufcolumn
= newbufcolumn
;
59 maxNextCharInd
= (bufpos
+= (bufsize
- tokenBegin
));
63 System
.arraycopy(buffer
, tokenBegin
, newbuffer
, 0, bufsize
- tokenBegin
);
66 System
.arraycopy(bufline
, tokenBegin
, newbufline
, 0, bufsize
- tokenBegin
);
69 System
.arraycopy(bufcolumn
, tokenBegin
, newbufcolumn
, 0, bufsize
- tokenBegin
);
70 bufcolumn
= newbufcolumn
;
72 maxNextCharInd
= (bufpos
-= tokenBegin
);
77 throw new Error(t
.getMessage());
86 protected void fillBuff() throws java
.io
.IOException
88 if (maxNextCharInd
== available
)
90 if (available
== bufsize
)
92 if (tokenBegin
> 2048)
94 bufpos
= maxNextCharInd
= 0;
95 available
= tokenBegin
;
97 else if (tokenBegin
< 0)
98 bufpos
= maxNextCharInd
= 0;
102 else if (available
> tokenBegin
)
104 else if ((tokenBegin
- available
) < 2048)
107 available
= tokenBegin
;
112 if ((i
= inputStream
.read(buffer
, maxNextCharInd
,
113 available
- maxNextCharInd
)) == -1)
116 throw new java
.io
.IOException();
122 catch(java
.io
.IOException e
) {
125 if (tokenBegin
== -1)
131 public char beginToken() throws java
.io
.IOException
140 protected void updateLineColumn(char c
)
146 prevCharIsLF
= false;
147 line
+= (column
= 1);
149 else if (prevCharIsCR
)
151 prevCharIsCR
= false;
157 line
+= (column
= 1);
170 column
+= (tabSize
- (column
% tabSize
));
176 bufline
[bufpos
] = line
;
177 bufcolumn
[bufpos
] = column
;
180 public char readChar() throws java
.io
.IOException
186 if (++bufpos
== bufsize
)
189 return buffer
[bufpos
];
192 if (++bufpos
>= maxNextCharInd
)
195 char c
= buffer
[bufpos
];
206 public int getColumn() {
207 return bufcolumn
[bufpos
];
215 public int getLine() {
216 return bufline
[bufpos
];
219 public int getEndColumn() {
220 return bufcolumn
[bufpos
];
223 public int getEndLine() {
224 return bufline
[bufpos
];
227 public int getBeginColumn() {
228 return bufcolumn
[tokenBegin
];
231 public int getBeginLine() {
232 return bufline
[tokenBegin
];
235 public void backup(int amount
) {
238 if ((bufpos
-= amount
) < 0)
242 public SimpleCharStream(java
.io
.Reader dstream
, int startline
,
243 int startcolumn
, int buffersize
)
245 inputStream
= dstream
;
247 column
= startcolumn
- 1;
249 available
= bufsize
= buffersize
;
250 buffer
= new char[buffersize
];
251 bufline
= new int[buffersize
];
252 bufcolumn
= new int[buffersize
];
255 public SimpleCharStream(java
.io
.Reader dstream
, int startline
,
258 this(dstream
, startline
, startcolumn
, 4096);
261 public SimpleCharStream(java
.io
.Reader dstream
)
263 this(dstream
, 1, 1, 4096);
265 public void reInit(java
.io
.Reader dstream
, int startline
,
266 int startcolumn
, int buffersize
)
268 inputStream
= dstream
;
270 column
= startcolumn
- 1;
272 if (buffer
== null || buffersize
!= buffer
.length
)
274 available
= bufsize
= buffersize
;
275 buffer
= new char[buffersize
];
276 bufline
= new int[buffersize
];
277 bufcolumn
= new int[buffersize
];
279 prevCharIsLF
= prevCharIsCR
= false;
280 tokenBegin
= inBuf
= maxNextCharInd
= 0;
284 public void reInit(java
.io
.Reader dstream
, int startline
,
287 reInit(dstream
, startline
, startcolumn
, 4096);
290 public void reInit(java
.io
.Reader dstream
)
292 reInit(dstream
, 1, 1, 4096);
294 public SimpleCharStream(java
.io
.InputStream dstream
, String encoding
, int startline
,
295 int startcolumn
, int buffersize
) throws java
.io
.UnsupportedEncodingException
297 this(encoding
== null ?
new java
.io
.InputStreamReader(dstream
) : new java
.io
.InputStreamReader(dstream
, encoding
), startline
, startcolumn
, buffersize
);
300 public SimpleCharStream(java
.io
.InputStream dstream
, int startline
,
301 int startcolumn
, int buffersize
)
303 this(new java
.io
.InputStreamReader(dstream
), startline
, startcolumn
, buffersize
);
306 public SimpleCharStream(java
.io
.InputStream dstream
, String encoding
, int startline
,
307 int startcolumn
) throws java
.io
.UnsupportedEncodingException
309 this(dstream
, encoding
, startline
, startcolumn
, 4096);
312 public SimpleCharStream(java
.io
.InputStream dstream
, int startline
,
315 this(dstream
, startline
, startcolumn
, 4096);
318 public SimpleCharStream(java
.io
.InputStream dstream
, String encoding
) throws java
.io
.UnsupportedEncodingException
320 this(dstream
, encoding
, 1, 1, 4096);
323 public SimpleCharStream(java
.io
.InputStream dstream
)
325 this(dstream
, 1, 1, 4096);
328 public void reInit(java
.io
.InputStream dstream
, String encoding
, int startline
,
329 int startcolumn
, int buffersize
) throws java
.io
.UnsupportedEncodingException
331 reInit(encoding
== null ?
new java
.io
.InputStreamReader(dstream
) : new java
.io
.InputStreamReader(dstream
, encoding
), startline
, startcolumn
, buffersize
);
334 public void reInit(java
.io
.InputStream dstream
, int startline
,
335 int startcolumn
, int buffersize
)
337 reInit(new java
.io
.InputStreamReader(dstream
), startline
, startcolumn
, buffersize
);
340 public void reInit(java
.io
.InputStream dstream
, String encoding
) throws java
.io
.UnsupportedEncodingException
342 reInit(dstream
, encoding
, 1, 1, 4096);
345 public void reInit(java
.io
.InputStream dstream
)
347 reInit(dstream
, 1, 1, 4096);
349 public void reInit(java
.io
.InputStream dstream
, String encoding
, int startline
,
350 int startcolumn
) throws java
.io
.UnsupportedEncodingException
352 reInit(dstream
, encoding
, startline
, startcolumn
, 4096);
354 public void reInit(java
.io
.InputStream dstream
, int startline
,
357 reInit(dstream
, startline
, startcolumn
, 4096);
359 public String
getImage()
361 if (bufpos
>= tokenBegin
)
362 return new String(buffer
, tokenBegin
, bufpos
- tokenBegin
+ 1);
364 return new String(buffer
, tokenBegin
, bufsize
- tokenBegin
) +
365 new String(buffer
, 0, bufpos
+ 1);
368 public char[] getSuffix(int len
)
370 char[] ret
= new char[len
];
372 if ((bufpos
+ 1) >= len
)
373 System
.arraycopy(buffer
, bufpos
- len
+ 1, ret
, 0, len
);
376 System
.arraycopy(buffer
, bufsize
- (len
- bufpos
- 1), ret
, 0,
378 System
.arraycopy(buffer
, 0, ret
, len
- bufpos
- 1, bufpos
+ 1);
392 * Method to adjust line and column numbers for the start of a token.
394 public void adjustBeginLineColumn(int newLine
, int newCol
)
396 int start
= tokenBegin
;
399 if (bufpos
>= tokenBegin
)
401 len
= bufpos
- tokenBegin
+ inBuf
+ 1;
405 len
= bufsize
- tokenBegin
+ bufpos
+ 1 + inBuf
;
408 int i
= 0, j
= 0, k
= 0;
409 int nextColDiff
= 0, columnDiff
= 0;
412 bufline
[j
= start
% bufsize
] == bufline
[k
= ++start
% bufsize
])
414 bufline
[j
] = newLine
;
415 nextColDiff
= columnDiff
+ bufcolumn
[k
] - bufcolumn
[j
];
416 bufcolumn
[j
] = newCol
+ columnDiff
;
417 columnDiff
= nextColDiff
;
423 bufline
[j
] = newLine
++;
424 bufcolumn
[j
] = newCol
+ columnDiff
;
428 if (bufline
[j
= start
% bufsize
] != bufline
[++start
% bufsize
])
429 bufline
[j
] = newLine
++;
431 bufline
[j
] = newLine
;
436 column
= bufcolumn
[j
];