001 /* Generated By:JavaCC: Do not edit this line. Rcc.java */
002 /**
003 * Licensed to the Apache Software Foundation (ASF) under one
004 * or more contributor license agreements. See the NOTICE file
005 * distributed with this work for additional information
006 * regarding copyright ownership. The ASF licenses this file
007 * to you under the Apache License, Version 2.0 (the
008 * "License"); you may not use this file except in compliance
009 * with the License. You may obtain a copy of the License at
010 *
011 * http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019
020 package org.apache.hadoop.record.compiler.generated;
021
022 import org.apache.hadoop.classification.InterfaceAudience;
023 import org.apache.hadoop.classification.InterfaceStability;
024 import org.apache.hadoop.record.compiler.*;
025 import java.util.ArrayList;
026 import java.util.Hashtable;
027 import java.util.Iterator;
028 import java.io.File;
029 import java.io.FileReader;
030 import java.io.FileNotFoundException;
031 import java.io.IOException;
032
033 /**
034 * @deprecated Replaced by <a href="http://hadoop.apache.org/avro/">Avro</a>.
035 */
036 @Deprecated
037 @InterfaceAudience.Public
038 @InterfaceStability.Stable
039 public class Rcc implements RccConstants {
040 private static String language = "java";
041 private static String destDir = ".";
042 private static ArrayList<String> recFiles = new ArrayList<String>();
043 private static ArrayList<String> cmdargs = new ArrayList<String>();
044 private static JFile curFile;
045 private static Hashtable<String,JRecord> recTab;
046 private static String curDir = ".";
047 private static String curFileName;
048 private static String curModuleName;
049
050 public static void main(String[] args) {
051 System.exit(driver(args));
052 }
053
054 public static void usage() {
055 System.err.println("Usage: rcc --language [java|c++] ddl-files");
056 }
057
058 public static int driver(String[] args) {
059 for (int i=0; i<args.length; i++) {
060 if ("-l".equalsIgnoreCase(args[i]) ||
061 "--language".equalsIgnoreCase(args[i])) {
062 language = args[i+1].toLowerCase();
063 i++;
064 } else if ("-d".equalsIgnoreCase(args[i]) ||
065 "--destdir".equalsIgnoreCase(args[i])) {
066 destDir = args[i+1];
067 i++;
068 } else if (args[i].startsWith("-")) {
069 String arg = args[i].substring(1);
070 if (arg.startsWith("-")) {
071 arg = arg.substring(1);
072 }
073 cmdargs.add(arg.toLowerCase());
074 } else {
075 recFiles.add(args[i]);
076 }
077 }
078 if (recFiles.size() == 0) {
079 usage();
080 return 1;
081 }
082 for (int i=0; i<recFiles.size(); i++) {
083 curFileName = recFiles.get(i);
084 File file = new File(curFileName);
085 try {
086 FileReader reader = new FileReader(file);
087 Rcc parser = new Rcc(reader);
088 try {
089 recTab = new Hashtable<String,JRecord>();
090 curFile = parser.Input();
091 } catch (ParseException e) {
092 System.err.println(e.toString());
093 return 1;
094 }
095 try {
096 reader.close();
097 } catch (IOException e) {
098 }
099 } catch (FileNotFoundException e) {
100 System.err.println("File " + recFiles.get(i) +
101 " Not found.");
102 return 1;
103 }
104 try {
105 int retCode = curFile.genCode(language, destDir, cmdargs);
106 if (retCode != 0) { return retCode; }
107 } catch (IOException e) {
108 System.err.println(e.toString());
109 return 1;
110 }
111 }
112 return 0;
113 }
114
115 final public JFile Input() throws ParseException {
116 ArrayList<JFile> ilist = new ArrayList<JFile>();
117 ArrayList<JRecord> rlist = new ArrayList<JRecord>();
118 JFile i;
119 ArrayList<JRecord> l;
120 label_1:
121 while (true) {
122 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
123 case INCLUDE_TKN:
124 i = Include();
125 ilist.add(i);
126 break;
127 case MODULE_TKN:
128 l = Module();
129 rlist.addAll(l);
130 break;
131 default:
132 jj_la1[0] = jj_gen;
133 jj_consume_token(-1);
134 throw new ParseException();
135 }
136 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
137 case MODULE_TKN:
138 case INCLUDE_TKN:
139 ;
140 break;
141 default:
142 jj_la1[1] = jj_gen;
143 break label_1;
144 }
145 }
146 jj_consume_token(0);
147 {if (true) return new JFile(curFileName, ilist, rlist);}
148 throw new Error("Missing return statement in function");
149 }
150
151 final public JFile Include() throws ParseException {
152 String fname;
153 Token t;
154 jj_consume_token(INCLUDE_TKN);
155 t = jj_consume_token(CSTRING_TKN);
156 JFile ret = null;
157 fname = t.image.replaceAll("^\"", "").replaceAll("\"$","");
158 File file = new File(curDir, fname);
159 String tmpDir = curDir;
160 String tmpFile = curFileName;
161 curDir = file.getParent();
162 curFileName = file.getName();
163 try {
164 FileReader reader = new FileReader(file);
165 Rcc parser = new Rcc(reader);
166 try {
167 ret = parser.Input();
168 System.out.println(fname + " Parsed Successfully");
169 } catch (ParseException e) {
170 System.out.println(e.toString());
171 System.exit(1);
172 }
173 try {
174 reader.close();
175 } catch (IOException e) {
176 }
177 } catch (FileNotFoundException e) {
178 System.out.println("File " + fname +
179 " Not found.");
180 System.exit(1);
181 }
182 curDir = tmpDir;
183 curFileName = tmpFile;
184 {if (true) return ret;}
185 throw new Error("Missing return statement in function");
186 }
187
188 final public ArrayList<JRecord> Module() throws ParseException {
189 String mName;
190 ArrayList<JRecord> rlist;
191 jj_consume_token(MODULE_TKN);
192 mName = ModuleName();
193 curModuleName = mName;
194 jj_consume_token(LBRACE_TKN);
195 rlist = RecordList();
196 jj_consume_token(RBRACE_TKN);
197 {if (true) return rlist;}
198 throw new Error("Missing return statement in function");
199 }
200
201 final public String ModuleName() throws ParseException {
202 String name = "";
203 Token t;
204 t = jj_consume_token(IDENT_TKN);
205 name += t.image;
206 label_2:
207 while (true) {
208 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
209 case DOT_TKN:
210 ;
211 break;
212 default:
213 jj_la1[2] = jj_gen;
214 break label_2;
215 }
216 jj_consume_token(DOT_TKN);
217 t = jj_consume_token(IDENT_TKN);
218 name += "." + t.image;
219 }
220 {if (true) return name;}
221 throw new Error("Missing return statement in function");
222 }
223
224 final public ArrayList<JRecord> RecordList() throws ParseException {
225 ArrayList<JRecord> rlist = new ArrayList<JRecord>();
226 JRecord r;
227 label_3:
228 while (true) {
229 r = Record();
230 rlist.add(r);
231 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
232 case RECORD_TKN:
233 ;
234 break;
235 default:
236 jj_la1[3] = jj_gen;
237 break label_3;
238 }
239 }
240 {if (true) return rlist;}
241 throw new Error("Missing return statement in function");
242 }
243
244 final public JRecord Record() throws ParseException {
245 String rname;
246 ArrayList<JField<JType>> flist = new ArrayList<JField<JType>>();
247 Token t;
248 JField<JType> f;
249 jj_consume_token(RECORD_TKN);
250 t = jj_consume_token(IDENT_TKN);
251 rname = t.image;
252 jj_consume_token(LBRACE_TKN);
253 label_4:
254 while (true) {
255 f = Field();
256 flist.add(f);
257 jj_consume_token(SEMICOLON_TKN);
258 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
259 case BYTE_TKN:
260 case BOOLEAN_TKN:
261 case INT_TKN:
262 case LONG_TKN:
263 case FLOAT_TKN:
264 case DOUBLE_TKN:
265 case USTRING_TKN:
266 case BUFFER_TKN:
267 case VECTOR_TKN:
268 case MAP_TKN:
269 case IDENT_TKN:
270 ;
271 break;
272 default:
273 jj_la1[4] = jj_gen;
274 break label_4;
275 }
276 }
277 jj_consume_token(RBRACE_TKN);
278 String fqn = curModuleName + "." + rname;
279 JRecord r = new JRecord(fqn, flist);
280 recTab.put(fqn, r);
281 {if (true) return r;}
282 throw new Error("Missing return statement in function");
283 }
284
285 final public JField<JType> Field() throws ParseException {
286 JType jt;
287 Token t;
288 jt = Type();
289 t = jj_consume_token(IDENT_TKN);
290 {if (true) return new JField<JType>(t.image, jt);}
291 throw new Error("Missing return statement in function");
292 }
293
294 final public JType Type() throws ParseException {
295 JType jt;
296 Token t;
297 String rname;
298 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
299 case MAP_TKN:
300 jt = Map();
301 {if (true) return jt;}
302 break;
303 case VECTOR_TKN:
304 jt = Vector();
305 {if (true) return jt;}
306 break;
307 case BYTE_TKN:
308 jj_consume_token(BYTE_TKN);
309 {if (true) return new JByte();}
310 break;
311 case BOOLEAN_TKN:
312 jj_consume_token(BOOLEAN_TKN);
313 {if (true) return new JBoolean();}
314 break;
315 case INT_TKN:
316 jj_consume_token(INT_TKN);
317 {if (true) return new JInt();}
318 break;
319 case LONG_TKN:
320 jj_consume_token(LONG_TKN);
321 {if (true) return new JLong();}
322 break;
323 case FLOAT_TKN:
324 jj_consume_token(FLOAT_TKN);
325 {if (true) return new JFloat();}
326 break;
327 case DOUBLE_TKN:
328 jj_consume_token(DOUBLE_TKN);
329 {if (true) return new JDouble();}
330 break;
331 case USTRING_TKN:
332 jj_consume_token(USTRING_TKN);
333 {if (true) return new JString();}
334 break;
335 case BUFFER_TKN:
336 jj_consume_token(BUFFER_TKN);
337 {if (true) return new JBuffer();}
338 break;
339 case IDENT_TKN:
340 rname = ModuleName();
341 if (rname.indexOf('.', 0) < 0) {
342 rname = curModuleName + "." + rname;
343 }
344 JRecord r = recTab.get(rname);
345 if (r == null) {
346 System.out.println("Type " + rname + " not known. Exiting.");
347 System.exit(1);
348 }
349 {if (true) return r;}
350 break;
351 default:
352 jj_la1[5] = jj_gen;
353 jj_consume_token(-1);
354 throw new ParseException();
355 }
356 throw new Error("Missing return statement in function");
357 }
358
359 final public JMap Map() throws ParseException {
360 JType jt1;
361 JType jt2;
362 jj_consume_token(MAP_TKN);
363 jj_consume_token(LT_TKN);
364 jt1 = Type();
365 jj_consume_token(COMMA_TKN);
366 jt2 = Type();
367 jj_consume_token(GT_TKN);
368 {if (true) return new JMap(jt1, jt2);}
369 throw new Error("Missing return statement in function");
370 }
371
372 final public JVector Vector() throws ParseException {
373 JType jt;
374 jj_consume_token(VECTOR_TKN);
375 jj_consume_token(LT_TKN);
376 jt = Type();
377 jj_consume_token(GT_TKN);
378 {if (true) return new JVector(jt);}
379 throw new Error("Missing return statement in function");
380 }
381
382 public RccTokenManager token_source;
383 SimpleCharStream jj_input_stream;
384 public Token token, jj_nt;
385 private int jj_ntk;
386 private int jj_gen;
387 final private int[] jj_la1 = new int[6];
388 static private int[] jj_la1_0;
389 static private int[] jj_la1_1;
390 static {
391 jj_la1_0();
392 jj_la1_1();
393 }
394 private static void jj_la1_0() {
395 jj_la1_0 = new int[] {0x2800, 0x2800, 0x40000000, 0x1000, 0xffc000, 0xffc000,};
396 }
397 private static void jj_la1_1() {
398 jj_la1_1 = new int[] {0x0, 0x0, 0x0, 0x0, 0x1, 0x1,};
399 }
400
401 public Rcc(java.io.InputStream stream) {
402 this(stream, null);
403 }
404 public Rcc(java.io.InputStream stream, String encoding) {
405 try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
406 token_source = new RccTokenManager(jj_input_stream);
407 token = new Token();
408 jj_ntk = -1;
409 jj_gen = 0;
410 for (int i = 0; i < 6; i++) jj_la1[i] = -1;
411 }
412
413 public void ReInit(java.io.InputStream stream) {
414 ReInit(stream, null);
415 }
416 public void ReInit(java.io.InputStream stream, String encoding) {
417 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
418 token_source.ReInit(jj_input_stream);
419 token = new Token();
420 jj_ntk = -1;
421 jj_gen = 0;
422 for (int i = 0; i < 6; i++) jj_la1[i] = -1;
423 }
424
425 public Rcc(java.io.Reader stream) {
426 jj_input_stream = new SimpleCharStream(stream, 1, 1);
427 token_source = new RccTokenManager(jj_input_stream);
428 token = new Token();
429 jj_ntk = -1;
430 jj_gen = 0;
431 for (int i = 0; i < 6; i++) jj_la1[i] = -1;
432 }
433
434 public void ReInit(java.io.Reader stream) {
435 jj_input_stream.ReInit(stream, 1, 1);
436 token_source.ReInit(jj_input_stream);
437 token = new Token();
438 jj_ntk = -1;
439 jj_gen = 0;
440 for (int i = 0; i < 6; i++) jj_la1[i] = -1;
441 }
442
443 public Rcc(RccTokenManager tm) {
444 token_source = tm;
445 token = new Token();
446 jj_ntk = -1;
447 jj_gen = 0;
448 for (int i = 0; i < 6; i++) jj_la1[i] = -1;
449 }
450
451 public void ReInit(RccTokenManager tm) {
452 token_source = tm;
453 token = new Token();
454 jj_ntk = -1;
455 jj_gen = 0;
456 for (int i = 0; i < 6; i++) jj_la1[i] = -1;
457 }
458
459 final private Token jj_consume_token(int kind) throws ParseException {
460 Token oldToken;
461 if ((oldToken = token).next != null) token = token.next;
462 else token = token.next = token_source.getNextToken();
463 jj_ntk = -1;
464 if (token.kind == kind) {
465 jj_gen++;
466 return token;
467 }
468 token = oldToken;
469 jj_kind = kind;
470 throw generateParseException();
471 }
472
473 final public Token getNextToken() {
474 if (token.next != null) token = token.next;
475 else token = token.next = token_source.getNextToken();
476 jj_ntk = -1;
477 jj_gen++;
478 return token;
479 }
480
481 final public Token getToken(int index) {
482 Token t = token;
483 for (int i = 0; i < index; i++) {
484 if (t.next != null) t = t.next;
485 else t = t.next = token_source.getNextToken();
486 }
487 return t;
488 }
489
490 final private int jj_ntk() {
491 if ((jj_nt=token.next) == null)
492 return (jj_ntk = (token.next=token_source.getNextToken()).kind);
493 else
494 return (jj_ntk = jj_nt.kind);
495 }
496
497 private java.util.Vector<int[]> jj_expentries = new java.util.Vector<int[]>();
498 private int[] jj_expentry;
499 private int jj_kind = -1;
500
501 public ParseException generateParseException() {
502 jj_expentries.removeAllElements();
503 boolean[] la1tokens = new boolean[33];
504 for (int i = 0; i < 33; i++) {
505 la1tokens[i] = false;
506 }
507 if (jj_kind >= 0) {
508 la1tokens[jj_kind] = true;
509 jj_kind = -1;
510 }
511 for (int i = 0; i < 6; i++) {
512 if (jj_la1[i] == jj_gen) {
513 for (int j = 0; j < 32; j++) {
514 if ((jj_la1_0[i] & (1<<j)) != 0) {
515 la1tokens[j] = true;
516 }
517 if ((jj_la1_1[i] & (1<<j)) != 0) {
518 la1tokens[32+j] = true;
519 }
520 }
521 }
522 }
523 for (int i = 0; i < 33; i++) {
524 if (la1tokens[i]) {
525 jj_expentry = new int[1];
526 jj_expentry[0] = i;
527 jj_expentries.addElement(jj_expentry);
528 }
529 }
530 int[][] exptokseq = new int[jj_expentries.size()][];
531 for (int i = 0; i < jj_expentries.size(); i++) {
532 exptokseq[i] = jj_expentries.elementAt(i);
533 }
534 return new ParseException(token, exptokseq, tokenImage);
535 }
536
537 final public void enable_tracing() {
538 }
539
540 final public void disable_tracing() {
541 }
542
543 }