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    }