a54f3eef6f6ed761f1d657bdbea4caf74f97553a
[nemo.git] / nemo-impl / src / main / java / org / opendaylight / nemo / user / vnspacemanager / languagestyle / NEMOParse / SimpleCharStream.java
1 /*\r
2  * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 /* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 5.0 */\r
9 /* JavaCCOptions:STATIC=true,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */\r
10 package org.opendaylight.nemo.user.vnspacemanager.languagestyle.NEMOParse;\r
11 \r
12 /**\r
13  * An implementation of interface CharStream, where the stream is assumed to\r
14  * contain only ASCII characters (without unicode processing).\r
15  */\r
16 \r
17 public class SimpleCharStream\r
18 {\r
19 /** Whether parser is static. */\r
20   public static final boolean staticFlag = true;\r
21   static int bufsize;\r
22   static int available;\r
23   static int tokenBegin;\r
24 /** Position in buffer. */\r
25   static public int bufpos = -1;\r
26   static protected int bufline[];\r
27   static protected int bufcolumn[];\r
28 \r
29   static protected int column = 0;\r
30   static protected int line = 1;\r
31 \r
32   static protected boolean prevCharIsCR = false;\r
33   static protected boolean prevCharIsLF = false;\r
34 \r
35   static protected java.io.Reader inputStream;\r
36 \r
37   static protected char[] buffer;\r
38   static protected int maxNextCharInd = 0;\r
39   static protected int inBuf = 0;\r
40   static protected int tabSize = 8;\r
41 \r
42   static protected void setTabSize(int i) { tabSize = i; }\r
43   static protected int getTabSize(int i) { return tabSize; }\r
44 \r
45 \r
46   static protected void ExpandBuff(boolean wrapAround)\r
47   {\r
48     char[] newbuffer = new char[bufsize + 2048];\r
49     int newbufline[] = new int[bufsize + 2048];\r
50     int newbufcolumn[] = new int[bufsize + 2048];\r
51 \r
52     try\r
53     {\r
54       if (wrapAround)\r
55       {\r
56         System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);\r
57         System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);\r
58         buffer = newbuffer;\r
59 \r
60         System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);\r
61         System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);\r
62         bufline = newbufline;\r
63 \r
64         System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);\r
65         System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);\r
66         bufcolumn = newbufcolumn;\r
67 \r
68         maxNextCharInd = (bufpos += (bufsize - tokenBegin));\r
69       }\r
70       else\r
71       {\r
72         System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);\r
73         buffer = newbuffer;\r
74 \r
75         System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);\r
76         bufline = newbufline;\r
77 \r
78         System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);\r
79         bufcolumn = newbufcolumn;\r
80 \r
81         maxNextCharInd = (bufpos -= tokenBegin);\r
82       }\r
83     }\r
84     catch (Throwable t)\r
85     {\r
86       throw new Error(t.getMessage());\r
87     }\r
88 \r
89 \r
90     bufsize += 2048;\r
91     available = bufsize;\r
92     tokenBegin = 0;\r
93   }\r
94 \r
95   static protected void FillBuff() throws java.io.IOException\r
96   {\r
97     if (maxNextCharInd == available)\r
98     {\r
99       if (available == bufsize)\r
100       {\r
101         if (tokenBegin > 2048)\r
102         {\r
103           bufpos = maxNextCharInd = 0;\r
104           available = tokenBegin;\r
105         }\r
106         else if (tokenBegin < 0)\r
107           bufpos = maxNextCharInd = 0;\r
108         else\r
109           ExpandBuff(false);\r
110       }\r
111       else if (available > tokenBegin)\r
112         available = bufsize;\r
113       else if ((tokenBegin - available) < 2048)\r
114         ExpandBuff(true);\r
115       else\r
116         available = tokenBegin;\r
117     }\r
118 \r
119     int i;\r
120     try {\r
121       if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1)\r
122       {\r
123         inputStream.close();\r
124         throw new java.io.IOException();\r
125       }\r
126       else\r
127         maxNextCharInd += i;\r
128       return;\r
129     }\r
130     catch(java.io.IOException e) {\r
131       --bufpos;\r
132       backup(0);\r
133       if (tokenBegin == -1)\r
134         tokenBegin = bufpos;\r
135       throw e;\r
136     }\r
137   }\r
138 \r
139 /** Start. */\r
140   static public char BeginToken() throws java.io.IOException\r
141   {\r
142     tokenBegin = -1;\r
143     char c = readChar();\r
144     tokenBegin = bufpos;\r
145 \r
146     return c;\r
147   }\r
148 \r
149   static protected void UpdateLineColumn(char c)\r
150   {\r
151     column++;\r
152 \r
153     if (prevCharIsLF)\r
154     {\r
155       prevCharIsLF = false;\r
156       line += (column = 1);\r
157     }\r
158     else if (prevCharIsCR)\r
159     {\r
160       prevCharIsCR = false;\r
161       if (c == '\n')\r
162       {\r
163         prevCharIsLF = true;\r
164       }\r
165       else\r
166         line += (column = 1);\r
167     }\r
168 \r
169     switch (c)\r
170     {\r
171       case '\r' :\r
172         prevCharIsCR = true;\r
173         break;\r
174       case '\n' :\r
175         prevCharIsLF = true;\r
176         break;\r
177       case '\t' :\r
178         column--;\r
179         column += (tabSize - (column % tabSize));\r
180         break;\r
181       default :\r
182         break;\r
183     }\r
184 \r
185     bufline[bufpos] = line;\r
186     bufcolumn[bufpos] = column;\r
187   }\r
188 \r
189 /** Read a character. */\r
190   static public char readChar() throws java.io.IOException\r
191   {\r
192     if (inBuf > 0)\r
193     {\r
194       --inBuf;\r
195 \r
196       if (++bufpos == bufsize)\r
197         bufpos = 0;\r
198 \r
199       return buffer[bufpos];\r
200     }\r
201 \r
202     if (++bufpos >= maxNextCharInd)\r
203       FillBuff();\r
204 \r
205     char c = buffer[bufpos];\r
206 \r
207     UpdateLineColumn(c);\r
208     return c;\r
209   }\r
210 \r
211   @Deprecated\r
212   /**\r
213    * @deprecated\r
214    * @see #getEndColumn\r
215    */\r
216 \r
217   static public int getColumn() {\r
218     return bufcolumn[bufpos];\r
219   }\r
220 \r
221   @Deprecated\r
222   /**\r
223    * @deprecated\r
224    * @see #getEndLine\r
225    */\r
226 \r
227   static public int getLine() {\r
228     return bufline[bufpos];\r
229   }\r
230 \r
231   /** Get token end column number. */\r
232   static public int getEndColumn() {\r
233     return bufcolumn[bufpos];\r
234   }\r
235 \r
236   /** Get token end line number. */\r
237   static public int getEndLine() {\r
238      return bufline[bufpos];\r
239   }\r
240 \r
241   /** Get token beginning column number. */\r
242   static public int getBeginColumn() {\r
243     return bufcolumn[tokenBegin];\r
244   }\r
245 \r
246   /** Get token beginning line number. */\r
247   static public int getBeginLine() {\r
248     return bufline[tokenBegin];\r
249   }\r
250 \r
251 /** Backup a number of characters. */\r
252   static public void backup(int amount) {\r
253 \r
254     inBuf += amount;\r
255     if ((bufpos -= amount) < 0)\r
256       bufpos += bufsize;\r
257   }\r
258 \r
259   /** Constructor. */\r
260   public SimpleCharStream(java.io.Reader dstream, int startline,\r
261   int startcolumn, int buffersize)\r
262   {\r
263     if (inputStream != null)\r
264       throw new Error("\n   ERROR: Second call to the constructor of a static SimpleCharStream.\n" +\r
265       "       You must either use ReInit() or set the JavaCC option STATIC to false\n" +\r
266       "       during the generation of this class.");\r
267     inputStream = dstream;\r
268     line = startline;\r
269     column = startcolumn - 1;\r
270 \r
271     available = bufsize = buffersize;\r
272     buffer = new char[buffersize];\r
273     bufline = new int[buffersize];\r
274     bufcolumn = new int[buffersize];\r
275   }\r
276 \r
277   /** Constructor. */\r
278   public SimpleCharStream(java.io.Reader dstream, int startline,\r
279                           int startcolumn)\r
280   {\r
281     this(dstream, startline, startcolumn, 4096);\r
282   }\r
283 \r
284   /** Constructor. */\r
285   public SimpleCharStream(java.io.Reader dstream)\r
286   {\r
287     this(dstream, 1, 1, 4096);\r
288   }\r
289 \r
290   /** Reinitialise. */\r
291   public void ReInit(java.io.Reader dstream, int startline,\r
292   int startcolumn, int buffersize)\r
293   {\r
294     inputStream = dstream;\r
295     line = startline;\r
296     column = startcolumn - 1;\r
297 \r
298     if (buffer == null || buffersize != buffer.length)\r
299     {\r
300       available = bufsize = buffersize;\r
301       buffer = new char[buffersize];\r
302       bufline = new int[buffersize];\r
303       bufcolumn = new int[buffersize];\r
304     }\r
305     prevCharIsLF = prevCharIsCR = false;\r
306     tokenBegin = inBuf = maxNextCharInd = 0;\r
307     bufpos = -1;\r
308   }\r
309 \r
310   /** Reinitialise. */\r
311   public void ReInit(java.io.Reader dstream, int startline,\r
312                      int startcolumn)\r
313   {\r
314     ReInit(dstream, startline, startcolumn, 4096);\r
315   }\r
316 \r
317   /** Reinitialise. */\r
318   public void ReInit(java.io.Reader dstream)\r
319   {\r
320     ReInit(dstream, 1, 1, 4096);\r
321   }\r
322   /** Constructor. */\r
323   public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,\r
324   int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException\r
325   {\r
326     this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);\r
327   }\r
328 \r
329   /** Constructor. */\r
330   public SimpleCharStream(java.io.InputStream dstream, int startline,\r
331   int startcolumn, int buffersize)\r
332   {\r
333     this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);\r
334   }\r
335 \r
336   /** Constructor. */\r
337   public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,\r
338                           int startcolumn) throws java.io.UnsupportedEncodingException\r
339   {\r
340     this(dstream, encoding, startline, startcolumn, 4096);\r
341   }\r
342 \r
343   /** Constructor. */\r
344   public SimpleCharStream(java.io.InputStream dstream, int startline,\r
345                           int startcolumn)\r
346   {\r
347     this(dstream, startline, startcolumn, 4096);\r
348   }\r
349 \r
350   /** Constructor. */\r
351   public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException\r
352   {\r
353     this(dstream, encoding, 1, 1, 4096);\r
354   }\r
355 \r
356   /** Constructor. */\r
357   public SimpleCharStream(java.io.InputStream dstream)\r
358   {\r
359     this(dstream, 1, 1, 4096);\r
360   }\r
361 \r
362   /** Reinitialise. */\r
363   public void ReInit(java.io.InputStream dstream, String encoding, int startline,\r
364                           int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException\r
365   {\r
366     ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);\r
367   }\r
368 \r
369   /** Reinitialise. */\r
370   public void ReInit(java.io.InputStream dstream, int startline,\r
371                           int startcolumn, int buffersize)\r
372   {\r
373     ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);\r
374   }\r
375 \r
376   /** Reinitialise. */\r
377   public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException\r
378   {\r
379     ReInit(dstream, encoding, 1, 1, 4096);\r
380   }\r
381 \r
382   /** Reinitialise. */\r
383   public void ReInit(java.io.InputStream dstream)\r
384   {\r
385     ReInit(dstream, 1, 1, 4096);\r
386   }\r
387   /** Reinitialise. */\r
388   public void ReInit(java.io.InputStream dstream, String encoding, int startline,\r
389                      int startcolumn) throws java.io.UnsupportedEncodingException\r
390   {\r
391     ReInit(dstream, encoding, startline, startcolumn, 4096);\r
392   }\r
393   /** Reinitialise. */\r
394   public void ReInit(java.io.InputStream dstream, int startline,\r
395                      int startcolumn)\r
396   {\r
397     ReInit(dstream, startline, startcolumn, 4096);\r
398   }\r
399   /** Get token literal value. */\r
400   static public String GetImage()\r
401   {\r
402     if (bufpos >= tokenBegin)\r
403       return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);\r
404     else\r
405       return new String(buffer, tokenBegin, bufsize - tokenBegin) +\r
406                             new String(buffer, 0, bufpos + 1);\r
407   }\r
408 \r
409   /** Get the suffix. */\r
410   static public char[] GetSuffix(int len)\r
411   {\r
412     char[] ret = new char[len];\r
413 \r
414     if ((bufpos + 1) >= len)\r
415       System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);\r
416     else\r
417     {\r
418       System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,\r
419                                                         len - bufpos - 1);\r
420       System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);\r
421     }\r
422 \r
423     return ret;\r
424   }\r
425 \r
426   /** Reset buffer when finished. */\r
427   static public void Done()\r
428   {\r
429     buffer = null;\r
430     bufline = null;\r
431     bufcolumn = null;\r
432   }\r
433 \r
434   /**\r
435    * Method to adjust line and column numbers for the start of a token.\r
436    */\r
437   static public void adjustBeginLineColumn(int newLine, int newCol)\r
438   {\r
439     int start = tokenBegin;\r
440     int len;\r
441 \r
442     if (bufpos >= tokenBegin)\r
443     {\r
444       len = bufpos - tokenBegin + inBuf + 1;\r
445     }\r
446     else\r
447     {\r
448       len = bufsize - tokenBegin + bufpos + 1 + inBuf;\r
449     }\r
450 \r
451     int i = 0, j = 0, k = 0;\r
452     int nextColDiff = 0, columnDiff = 0;\r
453 \r
454     while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize])\r
455     {\r
456       bufline[j] = newLine;\r
457       nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];\r
458       bufcolumn[j] = newCol + columnDiff;\r
459       columnDiff = nextColDiff;\r
460       i++;\r
461     }\r
462 \r
463     if (i < len)\r
464     {\r
465       bufline[j] = newLine++;\r
466       bufcolumn[j] = newCol + columnDiff;\r
467 \r
468       while (i++ < len)\r
469       {\r
470         if (bufline[j = start % bufsize] != bufline[++start % bufsize])\r
471           bufline[j] = newLine++;\r
472         else\r
473           bufline[j] = newLine;\r
474       }\r
475     }\r
476 \r
477     line = bufline[j];\r
478     column = bufcolumn[j];\r
479   }\r
480 \r
481 }\r
482 /* JavaCC - OriginalChecksum=3d5e5b74f810fa0f4ef70d18e9bc8601 (do not edit this line) */\r