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