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