1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  */
18 /* Generated By:JavaCC: Do not edit this line. ASCII_CharStream.java Version 0.7pre6 */
19 package Mini;
20 
21 /**
22  * An implementation of interface CharStream, where the stream is assumed to
23  * contain only ASCII characters (without unicode processing).
24  */
25 
26 public final class ASCII_CharStream
27 {
28   public static final boolean staticFlag = true;
29   static int bufsize;
30   static int available;
31   static int tokenBegin;
32   static public int bufpos = -1;
33   static private int bufline[];
34   static private int bufcolumn[];
35 
36   static private int column = 0;
37   static private int line = 1;
38 
39   static private boolean prevCharIsCR = false;
40   static private boolean prevCharIsLF = false;
41 
42   static private java.io.Reader inputStream;
43 
44   static private char[] buffer;
45   static private int maxNextCharInd = 0;
46   static private int inBuf = 0;
47 
ExpandBuff(boolean wrapAround)48   static private void ExpandBuff(boolean wrapAround)
49   {
50      char[] newbuffer = new char[bufsize + 2048];
51      int newbufline[] = new int[bufsize + 2048];
52      int newbufcolumn[] = new int[bufsize + 2048];
53 
54      try
55      {
56         if (wrapAround)
57         {
58            System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
59            System.arraycopy(buffer, 0, newbuffer,
60                                              bufsize - tokenBegin, bufpos);
61            buffer = newbuffer;
62 
63            System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
64            System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
65            bufline = newbufline;
66 
67            System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
68            System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
69            bufcolumn = newbufcolumn;
70 
71            maxNextCharInd = (bufpos += (bufsize - tokenBegin));
72         }
73         else
74         {
75            System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
76            buffer = newbuffer;
77 
78            System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
79            bufline = newbufline;
80 
81            System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
82            bufcolumn = newbufcolumn;
83 
84            maxNextCharInd = (bufpos -= tokenBegin);
85         }
86      }
87      catch (Throwable t)
88      {
89         throw new Error(t.getMessage());
90      }
91 
92 
93      bufsize += 2048;
94      available = bufsize;
95      tokenBegin = 0;
96   }
97 
FillBuff()98   static private void FillBuff() throws java.io.IOException
99   {
100      if (maxNextCharInd == available)
101      {
102         if (available == bufsize)
103         {
104            if (tokenBegin > 2048)
105            {
106               bufpos = maxNextCharInd = 0;
107               available = tokenBegin;
108            }
109            else if (tokenBegin < 0) {
110             bufpos = maxNextCharInd = 0;
111         } else {
112             ExpandBuff(false);
113         }
114         }
115         else if (available > tokenBegin) {
116             available = bufsize;
117         } else if ((tokenBegin - available) < 2048) {
118             ExpandBuff(true);
119         } else {
120             available = tokenBegin;
121         }
122      }
123 
124      int i;
125      try {
126         if ((i = inputStream.read(buffer, maxNextCharInd,
127                                     available - maxNextCharInd)) == -1)
128         {
129            inputStream.close();
130            throw new java.io.IOException();
131         } else {
132             maxNextCharInd += i;
133         }
134         return;
135      }
136      catch(java.io.IOException e) {
137         --bufpos;
138         backup(0);
139         if (tokenBegin == -1) {
140             tokenBegin = bufpos;
141         }
142         throw e;
143      }
144   }
145 
BeginToken()146   static public final char BeginToken() throws java.io.IOException
147   {
148      tokenBegin = -1;
149      char c = readChar();
150      tokenBegin = bufpos;
151 
152      return c;
153   }
154 
UpdateLineColumn(char c)155   static private void UpdateLineColumn(char c)
156   {
157      column++;
158 
159      if (prevCharIsLF)
160      {
161         prevCharIsLF = false;
162         line += (column = 1);
163      }
164      else if (prevCharIsCR)
165      {
166         prevCharIsCR = false;
167         if (c == '\n')
168         {
169            prevCharIsLF = true;
170         } else {
171             line += (column = 1);
172         }
173      }
174 
175      switch (c)
176      {
177         case '\r' :
178            prevCharIsCR = true;
179            break;
180         case '\n' :
181            prevCharIsLF = true;
182            break;
183         case '\t' :
184            column--;
185            column += (8 - (column & 07));
186            break;
187         default :
188            break;
189      }
190 
191      bufline[bufpos] = line;
192      bufcolumn[bufpos] = column;
193   }
194 
readChar()195   static public final char readChar() throws java.io.IOException
196   {
197      if (inBuf > 0)
198      {
199         --inBuf;
200         return (char)((char)0xff & buffer[(bufpos == bufsize - 1) ? (bufpos = 0) : ++bufpos]);
201      }
202 
203      if (++bufpos >= maxNextCharInd) {
204         FillBuff();
205     }
206 
207      char c = (char)((char)0xff & buffer[bufpos]);
208 
209      UpdateLineColumn(c);
210      return (c);
211   }
212 
getEndColumn()213   static public final int getEndColumn() {
214      return bufcolumn[bufpos];
215   }
216 
getEndLine()217   static public final int getEndLine() {
218      return bufline[bufpos];
219   }
220 
getBeginColumn()221   static public final int getBeginColumn() {
222      return bufcolumn[tokenBegin];
223   }
224 
getBeginLine()225   static public final int getBeginLine() {
226      return bufline[tokenBegin];
227   }
228 
backup(int amount)229   static public final void backup(int amount) {
230 
231     inBuf += amount;
232     if ((bufpos -= amount) < 0) {
233         bufpos += bufsize;
234     }
235   }
236 
ASCII_CharStream(java.io.Reader dstream, int startline, int startcolumn, int buffersize)237   public ASCII_CharStream(java.io.Reader dstream, int startline,
238   int startcolumn, int buffersize)
239   {
240     if (inputStream != null) {
241         throw new Error("\n   ERROR: Second call to the constructor of a static ASCII_CharStream.  You must\n" +
242            "       either use ReInit() or set the JavaCC option STATIC to false\n" +
243            "       during the generation of this class.");
244     }
245     inputStream = dstream;
246     line = startline;
247     column = startcolumn - 1;
248 
249     available = bufsize = buffersize;
250     buffer = new char[buffersize];
251     bufline = new int[buffersize];
252     bufcolumn = new int[buffersize];
253   }
254 
ASCII_CharStream(java.io.Reader dstream, int startline, int startcolumn)255   public ASCII_CharStream(java.io.Reader dstream, int startline,
256                                                            int startcolumn)
257   {
258      this(dstream, startline, startcolumn, 4096);
259   }
ReInit(java.io.Reader dstream, int startline, int startcolumn, int buffersize)260   static public void ReInit(java.io.Reader dstream, int startline,
261   int startcolumn, int buffersize)
262   {
263     inputStream = dstream;
264     line = startline;
265     column = startcolumn - 1;
266 
267     if (buffer == null || buffersize != buffer.length)
268     {
269       available = bufsize = buffersize;
270       buffer = new char[buffersize];
271       bufline = new int[buffersize];
272       bufcolumn = new int[buffersize];
273     }
274     prevCharIsLF = prevCharIsCR = false;
275     tokenBegin = inBuf = maxNextCharInd = 0;
276     bufpos = -1;
277   }
278 
ReInit(java.io.Reader dstream, int startline, int startcolumn)279   static public void ReInit(java.io.Reader dstream, int startline,
280                                                            int startcolumn)
281   {
282      ReInit(dstream, startline, startcolumn, 4096);
283   }
ASCII_CharStream(java.io.InputStream dstream, int startline, int startcolumn, int buffersize)284   public ASCII_CharStream(java.io.InputStream dstream, int startline,
285   int startcolumn, int buffersize)
286   {
287      this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
288   }
289 
ASCII_CharStream(java.io.InputStream dstream, int startline, int startcolumn)290   public ASCII_CharStream(java.io.InputStream dstream, int startline,
291                                                            int startcolumn)
292   {
293      this(dstream, startline, startcolumn, 4096);
294   }
295 
ReInit(java.io.InputStream dstream, int startline, int startcolumn, int buffersize)296   static public void ReInit(java.io.InputStream dstream, int startline,
297   int startcolumn, int buffersize)
298   {
299      ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
300   }
ReInit(java.io.InputStream dstream, int startline, int startcolumn)301   static public void ReInit(java.io.InputStream dstream, int startline,
302                                                            int startcolumn)
303   {
304      ReInit(dstream, startline, startcolumn, 4096);
305   }
GetImage()306   static public final String GetImage()
307   {
308      if (bufpos >= tokenBegin) {
309         return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
310     } else {
311         return new String(buffer, tokenBegin, bufsize - tokenBegin) +
312                               new String(buffer, 0, bufpos + 1);
313     }
314   }
315 
GetSuffix(int len)316   static public final char[] GetSuffix(int len)
317   {
318      char[] ret = new char[len];
319 
320      if ((bufpos + 1) >= len) {
321         System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
322     } else
323      {
324         System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
325                                                           len - bufpos - 1);
326         System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
327      }
328 
329      return ret;
330   }
331 
Done()332   static public void Done()
333   {
334      buffer = null;
335      bufline = null;
336      bufcolumn = null;
337   }
338 
339   /**
340    * Method to adjust line and column numbers for the start of a token.<BR>
341    */
adjustBeginLineColumn(int newLine, int newCol)342   static public void adjustBeginLineColumn(int newLine, int newCol)
343   {
344      int start = tokenBegin;
345      int len;
346 
347      if (bufpos >= tokenBegin)
348      {
349         len = bufpos - tokenBegin + inBuf + 1;
350      }
351      else
352      {
353         len = bufsize - tokenBegin + bufpos + 1 + inBuf;
354      }
355 
356      int i = 0, j = 0, k = 0;
357      int nextColDiff = 0, columnDiff = 0;
358 
359      while (i < len &&
360             bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
361      {
362         bufline[j] = newLine;
363         nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
364         bufcolumn[j] = newCol + columnDiff;
365         columnDiff = nextColDiff;
366         i++;
367      }
368 
369      if (i < len)
370      {
371         bufline[j] = newLine++;
372         bufcolumn[j] = newCol + columnDiff;
373 
374         while (i++ < len)
375         {
376            if (bufline[j = start % bufsize] != bufline[++start % bufsize]) {
377             bufline[j] = newLine++;
378         } else {
379             bufline[j] = newLine;
380         }
381         }
382      }
383 
384      line = bufline[j];
385      column = bufcolumn[j];
386   }
387 
388 }
389