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    }