Compiler.java |
1 /* 2 * Compiler.java - compile .jape files 3 * 4 * Copyright (c) 1998-2004, The University of Sheffield. 5 * 6 * This file is part of GATE (see http://gate.ac.uk/), and is free 7 * software, licenced under the GNU Library General Public License, 8 * Version 2, June 1991 (in the distribution as file licence.html, 9 * and also available at http://gate.ac.uk/gate/licence.html). 10 * 11 * Hamish Cunningham, 23/02/2000 12 * 13 * $Id: Compiler.java,v 1.9 2004/07/21 17:10:07 akshay Exp $ 14 */ 15 16 package gate.jape; 17 18 import java.io.*; 19 import java.util.ArrayList; 20 import java.util.Iterator; 21 22 import gate.jape.parser.ParseCpsl; 23 import gate.util.Err; 24 import gate.util.Out; 25 26 /** 27 * Compiler for JAPE files. 28 */ 29 public class Compiler { 30 31 /** Debug flag */ 32 private static final boolean DEBUG = false; 33 34 /** How much noise to make. */ 35 static private boolean verbose = false; 36 37 static String defaultEncoding = "UTF-8"; 38 39 /** Take a list of .jape files names and compile them to .ser. 40 * Also recognises a -v option which makes it chatty. 41 */ 42 static public void main(String[] args) { 43 44 // process options 45 int argsIndex = 0; 46 while(args[argsIndex].toCharArray()[0] == '-') 47 if(args[argsIndex++].equals("-v")) 48 verbose = true; 49 50 // construct list of the files 51 ArrayList fileNames = new ArrayList(); 52 for( ; argsIndex<args.length; argsIndex++) 53 fileNames.add(args[argsIndex]); 54 55 // compile the files 56 compile(fileNames); 57 58 message("done"); 59 } // main 60 61 /** The main compile method, taking a file name. */ 62 static public void compile(String japeFileName, String encoding) { 63 // parse 64 message("parsing " + japeFileName); 65 Transducer transducer = null; 66 try { 67 transducer = parseJape(japeFileName, encoding); 68 } catch(JapeException e) { 69 emessage("couldn't compile " + japeFileName + ": " + e); 70 return; 71 } 72 73 // save 74 message("saving " + japeFileName); 75 try { 76 saveJape(japeFileName, transducer); 77 } catch (JapeException e) { 78 emessage("couldn't save " + japeFileName + ": " + e); 79 } 80 81 message("finished " + japeFileName); 82 } // compile(String japeFileName) 83 84 /** The main compile method, taking a list of file names. */ 85 static public void compile(ArrayList fileNames) { 86 // for each file, compile and save 87 for(Iterator i = fileNames.iterator(); i.hasNext(); ) 88 compile((String) i.next(), defaultEncoding); 89 } // compile 90 91 /** Parse a .jape and return a transducer, or throw exception. */ 92 static public Transducer parseJape(String japeFileName, String encoding) 93 throws JapeException { 94 Transducer transducer = null; 95 96 try { 97 ParseCpsl cpslParser = new ParseCpsl(new File(japeFileName).toURL(), 98 encoding); 99 transducer = cpslParser.MultiPhaseTransducer(); 100 } catch(gate.jape.parser.ParseException e) { 101 throw(new JapeException(e.toString())); 102 } catch(IOException e) { 103 throw(new JapeException(e.toString())); 104 } 105 106 return transducer; 107 } // parseJape 108 109 /** Save a .jape, or throw exception. */ 110 static public void saveJape(String japeFileName, Transducer transducer) 111 throws JapeException { 112 String saveName = japeNameToSaveName(japeFileName); 113 114 try { 115 FileOutputStream fos = new FileOutputStream(saveName); 116 ObjectOutputStream oos = new ObjectOutputStream (fos); 117 oos.writeObject(transducer); 118 oos.close(); 119 } catch (IOException e) { 120 throw(new JapeException(e.toString())); 121 } 122 } // saveJape 123 124 /** Convert a .jape file name to a .ser file name. */ 125 static String japeNameToSaveName(String japeFileName) { 126 String base = japeFileName; 127 if(japeFileName.endsWith(".jape") || japeFileName.endsWith(".JAPE")) 128 base = japeFileName.substring(0, japeFileName.length() - 5); 129 return base + ".ser"; 130 } // japeNameToSaveName 131 132 /** Hello? Anybody there?? */ 133 public static void message(String mess) { 134 if(verbose) Out.println("JAPE compiler: " + mess); 135 } // message 136 137 /** Ooops. */ 138 public static void emessage(String mess) { 139 Err.println("JAPE compiler error: " + mess); 140 } // emessage 141 142 } // class Compiler 143 144 145 // $Log: Compiler.java,v $ 146 // Revision 1.9 2004/07/21 17:10:07 akshay 147 // Changed copyright from 1998-2001 to 1998-2004 148 // 149 // Revision 1.8 2004/03/25 13:01:14 valyt 150 // Imports optimisation throughout the Java sources 151 // (to get rid of annoying warnings in Eclipse) 152 // 153 // Revision 1.7 2001/09/13 12:09:49 kalina 154 // Removed completely the use of jgl.objectspace.Array and such. 155 // Instead all sources now use the new Collections, typically ArrayList. 156 // I ran the tests and I ran some documents and compared with keys. 157 // JAPE seems to work well (that's where it all was). If there are problems 158 // maybe look at those new structures first. 159 // 160 // Revision 1.6 2001/02/08 13:46:06 valyt 161 // Added full Unicode support for the gazetteer and Jape 162 // converted the gazetteer files to UTF-8 163 // 164 // Revision 1.5 2000/11/08 16:35:02 hamish 165 // formatting 166 // 167 // Revision 1.4 2000/10/26 10:45:30 oana 168 // Modified in the code style 169 // 170 // Revision 1.3 2000/10/16 16:44:33 oana 171 // Changed the comment of DEBUG variable 172 // 173 // Revision 1.2 2000/10/10 15:36:35 oana 174 // Changed System.out in Out and System.err in Err; 175 // Added the DEBUG variable seted on false; 176 // Added in the header the licence; 177 // 178 // Revision 1.1 2000/02/23 13:46:04 hamish 179 // added 180 // 181 // Revision 1.1.1.1 1999/02/03 16:23:01 hamish 182 // added gate2 183 // 184 // Revision 1.3 1998/10/29 12:07:27 hamish 185 // added compile method taking a file name 186 // 187 // Revision 1.2 1998/09/21 16:19:27 hamish 188 // don't catch *all* exceptions! 189 // 190 // Revision 1.1 1998/09/18 15:07:41 hamish 191 // a functioning compiler in two shakes of a rats tail 192