Compiler.java
01 /*
02  *  Compiler.java - compile .jape files
03  *
04  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
05  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
06  *
07  *  This file is part of GATE (see http://gate.ac.uk/), and is free
08  *  software, licenced under the GNU Library General Public License,
09  *  Version 2, June 1991 (in the distribution as file licence.html,
10  *  and also available at http://gate.ac.uk/gate/licence.html).
11  *
12  *  Hamish Cunningham, 23/02/2000
13  *
14  *  $Id: Compiler.java 17530 2014-03-04 15:57:43Z markagreenwood $
15  */
16 
17 package gate.jape;
18 
19 import java.io.*;
20 import java.net.URL;
21 import gate.Gate;
22 import gate.creole.Transducer;
23 
24 /**
25  * A utility class for compilig JAPE files.
26  * Take a list of .jape files names and compile them to .ser.
27  * Also recognises a -v option which makes it chatty.
28  * Note that this is provided as a command line tool. If you
29  * wish to serialize JAPE grammars from code you should use
30  * the Transducer's serialize method instead.
31  */
32 public class Compiler {
33 
34   private static String defaultEncoding = "UTF-8";
35 
36   /**
37    * Take a list of .jape files names and compile them to .ser.
38    */
39   public static void main(String[] argsthrows Exception {
40 
41     boolean verbose = false;
42 
43     int argsIndex = 0;
44     while(args[argsIndex].toCharArray()[0== '-') {
45       if(args[argsIndex++].equals("-v")) {
46         verbose = true;
47       }
48     }
49 
50     if (verboseSystem.out.print("Initializing GATE...");
51     Gate.runInSandbox(true);
52   Gate.init();
53     if (verboseSystem.out.println(" Done");
54 
55 
56    for; argsIndex<args.length; argsIndex++) {
57     File in = new File(args[argsIndex]);
58     if (verboseSystem.out.print("Compiling " + in.getAbsolutePath()+"... ");
59     compile(in.toURI().toURL(),serFromJape(in));
60     if (verboseSystem.out.println("Done");
61     }
62   }
63 
64   /**
65    * Loads the specified JAPE grammar into GATE and then serializes it
66    * into the specified file. This file can then be used to create
67    * a new transducer instance via the <code>binaryGrammarURL</code>
68    * init time parameter.
69    */
70   public static void compile(URL jape, File serthrows Exception {
71 
72     Transducer transducer = new Transducer();
73     transducer.setGrammarURL(jape);
74     transducer.setEncoding(defaultEncoding);
75     transducer.init();
76 
77     FileOutputStream out = new FileOutputStream(ser);
78   ObjectOutputStream s = new ObjectOutputStream(out);
79   transducer.serialize(s);
80   s.flush();
81   s.close();
82     out.close();
83   }
84 
85   /**
86    * Convert a .jape file name to a .ser file name.
87    */
88   private static File serFromJape(File jape) {
89     String base = jape.getAbsolutePath();
90     if(base.toLowerCase().endsWith(".jape"))
91       base = base.substring(0, base.length() 5);
92     return new File(base + ".ser");
93   }
94 }