rcc.jj
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:9k
源码类别:

网格计算

开发平台:

Java

  1. options {
  2. STATIC=false;
  3. }
  4. PARSER_BEGIN(Rcc)
  5. /**
  6.  * Licensed to the Apache Software Foundation (ASF) under one
  7.  * or more contributor license agreements.  See the NOTICE file
  8.  * distributed with this work for additional information
  9.  * regarding copyright ownership.  The ASF licenses this file
  10.  * to you under the Apache License, Version 2.0 (the
  11.  * "License"); you may not use this file except in compliance
  12.  * with the License.  You may obtain a copy of the License at
  13.  *
  14.  *     http://www.apache.org/licenses/LICENSE-2.0
  15.  *
  16.  * Unless required by applicable law or agreed to in writing, software
  17.  * distributed under the License is distributed on an "AS IS" BASIS,
  18.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  19.  * See the License for the specific language governing permissions and
  20.  * limitations under the License.
  21.  */
  22. package org.apache.hadoop.record.compiler.generated;
  23. import org.apache.hadoop.record.compiler.*;
  24. import java.util.ArrayList;
  25. import java.util.Hashtable;
  26. import java.util.Iterator;
  27. import java.io.File;
  28. import java.io.FileReader;
  29. import java.io.FileNotFoundException;
  30. import java.io.IOException;
  31. public class Rcc {
  32.     private static String language = "java";
  33.     private static String destDir = ".";
  34.     private static ArrayList<String> recFiles = new ArrayList<String>();
  35.     private static ArrayList<String> cmdargs = new ArrayList<String>();
  36.     private static JFile curFile;
  37.     private static Hashtable<String,JRecord> recTab;
  38.     private static String curDir = ".";
  39.     private static String curFileName;
  40.     private static String curModuleName;
  41.     public static void main(String[] args) {
  42.         System.exit(driver(args));
  43.     }
  44.  
  45.     public static void usage() {
  46.         System.err.println("Usage: rcc --language [java|c++] ddl-files");
  47.     }
  48.     public static int driver(String[] args) {
  49.         for (int i=0; i<args.length; i++) {
  50.             if ("-l".equalsIgnoreCase(args[i]) ||
  51.                 "--language".equalsIgnoreCase(args[i])) {
  52.                 language = args[i+1].toLowerCase();
  53.                 i++;
  54.             } else if ("-d".equalsIgnoreCase(args[i]) ||
  55.                 "--destdir".equalsIgnoreCase(args[i])) {
  56.                 destDir = args[i+1];
  57.                 i++;
  58.             } else if (args[i].startsWith("-")) {
  59.               String arg = args[i].substring(1);
  60.               if (arg.startsWith("-")) {
  61.                 arg = arg.substring(1);
  62.               }
  63.               cmdargs.add(arg.toLowerCase());
  64.             } else {
  65.                 recFiles.add(args[i]);
  66.             }
  67.         }
  68.         if (recFiles.size() == 0) {
  69.             usage();
  70.             return 1;
  71.         }
  72.         for (int i=0; i<recFiles.size(); i++) {
  73.             curFileName = recFiles.get(i);
  74.             File file = new File(curFileName);
  75.             try {
  76.                 FileReader reader = new FileReader(file);
  77.                 Rcc parser = new Rcc(reader);
  78.                 try {
  79.                     recTab = new Hashtable<String,JRecord>();
  80.                     curFile = parser.Input();
  81.                 } catch (ParseException e) {
  82.                     System.err.println(e.toString());
  83.                     return 1;
  84.                 }
  85.                 try {
  86.                     reader.close();
  87.                 } catch (IOException e) {
  88.                 }
  89.             } catch (FileNotFoundException e) {
  90.                 System.err.println("File " + (String) recFiles.get(i) +
  91.                     " Not found.");
  92.                 return 1;
  93.             }
  94.             try {
  95.                 int retCode = curFile.genCode(language, destDir, cmdargs);
  96.                 if (retCode != 0) { return retCode; }
  97.             } catch (IOException e) {
  98.                 System.err.println(e.toString());
  99.                 return 1;
  100.             }
  101.         }
  102.         return 0;
  103.     }
  104. }
  105. PARSER_END(Rcc)
  106. SKIP :
  107. {
  108.   " "
  109. | "t"
  110. | "n"
  111. | "r"
  112. }
  113. SPECIAL_TOKEN :
  114. {
  115.   "//" : WithinOneLineComment
  116. }
  117. <WithinOneLineComment> SPECIAL_TOKEN :
  118. {
  119.   <("n" | "r" | "rn" )> : DEFAULT
  120. }
  121. <WithinOneLineComment> MORE :
  122. {
  123.   <~[]>
  124. }
  125. SPECIAL_TOKEN :
  126. {
  127.   "/*" : WithinMultiLineComment
  128. }
  129. <WithinMultiLineComment> SPECIAL_TOKEN :
  130. {
  131.   "*/" : DEFAULT
  132. }
  133. <WithinMultiLineComment> MORE :
  134. {
  135.   <~[]>
  136. }
  137. TOKEN :
  138. {
  139.     <MODULE_TKN: "module">
  140. |   <RECORD_TKN: "class">
  141. |   <INCLUDE_TKN: "include">
  142. |   <BYTE_TKN: "byte">
  143. |   <BOOLEAN_TKN: "boolean">
  144. |   <INT_TKN: "int">
  145. |   <LONG_TKN: "long">
  146. |   <FLOAT_TKN: "float">
  147. |   <DOUBLE_TKN: "double">
  148. |   <USTRING_TKN: "ustring">
  149. |   <BUFFER_TKN: "buffer">
  150. |   <VECTOR_TKN: "vector">
  151. |   <MAP_TKN: "map">
  152. |   <LBRACE_TKN: "{">
  153. |   <RBRACE_TKN: "}">
  154. |   <LT_TKN: "<">
  155. |   <GT_TKN: ">">
  156. |   <SEMICOLON_TKN: ";">
  157. |   <COMMA_TKN: ",">
  158. |   <DOT_TKN: ".">
  159. |   <CSTRING_TKN: """ ( ~["""] )+ """>
  160. |   <IDENT_TKN: ["A"-"Z","a"-"z"] (["a"-"z","A"-"Z","0"-"9","_"])*>
  161. }
  162. JFile Input() :
  163. {
  164.     ArrayList<JFile> ilist = new ArrayList<JFile>();
  165.     ArrayList<JRecord> rlist = new ArrayList<JRecord>();
  166.     JFile i;
  167.     ArrayList<JRecord> l;
  168. }
  169. {
  170.     (
  171.         i = Include()
  172.         { ilist.add(i); }
  173.     |   l = Module()
  174.         { rlist.addAll(l); }
  175.     )+
  176.     <EOF>
  177.     { return new JFile(curFileName, ilist, rlist); }
  178. }
  179. JFile Include() :
  180. {
  181.     String fname;
  182.     Token t;
  183. }
  184. {
  185.     <INCLUDE_TKN>
  186.     t = <CSTRING_TKN>
  187.     {
  188.         JFile ret = null;
  189.         fname = t.image.replaceAll("^"", "").replaceAll(""$","");
  190.         File file = new File(curDir, fname);
  191.         String tmpDir = curDir;
  192.         String tmpFile = curFileName;
  193.         curDir = file.getParent();
  194.         curFileName = file.getName();
  195.         try {
  196.             FileReader reader = new FileReader(file);
  197.             Rcc parser = new Rcc(reader);
  198.             try {
  199.                 ret = parser.Input();
  200.                 System.out.println(fname + " Parsed Successfully");
  201.             } catch (ParseException e) {
  202.                 System.out.println(e.toString());
  203.                 System.exit(1);
  204.             }
  205.             try {
  206.                 reader.close();
  207.             } catch (IOException e) {
  208.             }
  209.         } catch (FileNotFoundException e) {
  210.             System.out.println("File " + fname +
  211.                 " Not found.");
  212.             System.exit(1);
  213.         }
  214.         curDir = tmpDir;
  215.         curFileName = tmpFile;
  216.         return ret;
  217.     }
  218. }
  219. ArrayList<JRecord> Module() :
  220. {
  221.     String mName;
  222.     ArrayList<JRecord> rlist;
  223. }
  224. {
  225.     <MODULE_TKN>
  226.     mName = ModuleName()
  227.     { curModuleName = mName; }
  228.     <LBRACE_TKN>
  229.     rlist = RecordList()
  230.     <RBRACE_TKN>
  231.     { return rlist; }
  232. }
  233. String ModuleName() :
  234. {
  235.     String name = "";
  236.     Token t;
  237. }
  238. {
  239.     t = <IDENT_TKN>
  240.     { name += t.image; }
  241.     (
  242.         <DOT_TKN>
  243.         t = <IDENT_TKN>
  244.         { name += "." + t.image; }
  245.     )*
  246.     { return name; }
  247. }
  248. ArrayList<JRecord> RecordList() :
  249. {
  250.     ArrayList<JRecord> rlist = new ArrayList<JRecord>();
  251.     JRecord r;
  252. }
  253. {
  254.     (
  255.         r = Record()
  256.         { rlist.add(r); }
  257.     )+
  258.     { return rlist; }
  259. }
  260. JRecord Record() :
  261. {
  262.     String rname;
  263.     ArrayList<JField<JType>> flist = new ArrayList<JField<JType>>();
  264.     Token t;
  265.     JField<JType> f;
  266. }
  267. {
  268.     <RECORD_TKN>
  269.     t = <IDENT_TKN>
  270.     { rname = t.image; }
  271.     <LBRACE_TKN>
  272.     (
  273.         f = Field()
  274.         { flist.add(f); }
  275.         <SEMICOLON_TKN>
  276.     )+
  277.     <RBRACE_TKN>
  278.     {
  279.         String fqn = curModuleName + "." + rname;
  280.         JRecord r = new JRecord(fqn, flist);
  281.         recTab.put(fqn, r);
  282.         return r;
  283.     }
  284. }
  285. JField<JType> Field() :
  286. {
  287.     JType jt;
  288.     Token t;
  289. }
  290. {
  291.     jt = Type()
  292.     t = <IDENT_TKN>
  293.     { return new JField<JType>(t.image, jt); }
  294. }
  295. JType Type() :
  296. {
  297.     JType jt;
  298.     Token t;
  299.     String rname;
  300. }
  301. {
  302.     jt = Map()
  303.     { return jt; }
  304. |   jt = Vector()
  305.     { return jt; }
  306. |   <BYTE_TKN>
  307.     { return new JByte(); }
  308. |   <BOOLEAN_TKN>
  309.     { return new JBoolean(); }
  310. |   <INT_TKN>
  311.     { return new JInt(); }
  312. |   <LONG_TKN>
  313.     { return new JLong(); }
  314. |   <FLOAT_TKN>
  315.     { return new JFloat(); }
  316. |   <DOUBLE_TKN>
  317.     { return new JDouble(); }
  318. |   <USTRING_TKN>
  319.     { return new JString(); }
  320. |   <BUFFER_TKN>
  321.     { return new JBuffer(); }
  322. |   rname = ModuleName()
  323.     {
  324.         if (rname.indexOf('.', 0) < 0) {
  325.             rname = curModuleName + "." + rname;
  326.         }
  327.         JRecord r = recTab.get(rname);
  328.         if (r == null) {
  329.             System.out.println("Type " + rname + " not known. Exiting.");
  330.             System.exit(1);
  331.         }
  332.         return r;
  333.     }
  334. }
  335. JMap Map() :
  336. {
  337.     JType jt1;
  338.     JType jt2;
  339. }
  340. {
  341.     <MAP_TKN>
  342.     <LT_TKN>
  343.     jt1 = Type()
  344.     <COMMA_TKN>
  345.     jt2 = Type()
  346.     <GT_TKN>
  347.     { return new JMap(jt1, jt2); }
  348. }
  349. JVector Vector() :
  350. {
  351.     JType jt;
  352. }
  353. {
  354.     <VECTOR_TKN>
  355.     <LT_TKN>
  356.     jt = Type()
  357.     <GT_TKN>
  358.     { return new JVector(jt); }
  359. }