You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.1 KiB
86 lines
3.1 KiB
//==============================================================================
|
|
//
|
|
// Copyright (c) 2002-
|
|
// Authors:
|
|
// * Stephen Gilmore <stephen.gilmore@ed.ac.uk> (University of Edinburgh)
|
|
//
|
|
//------------------------------------------------------------------------------
|
|
//
|
|
// This file is part of PRISM.
|
|
//
|
|
// PRISM is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; either version 2 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// PRISM is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with PRISM; if not, write to the Free Software Foundation,
|
|
// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
//
|
|
//==============================================================================
|
|
|
|
package pepa.compiler;
|
|
|
|
import java.lang.reflect.*;
|
|
public class Main {
|
|
|
|
public static String compile(String fileName) throws InternalError {
|
|
try {
|
|
Class c = Class.forName("pepa");
|
|
Method[] m = c.getMethods();
|
|
// Terminate here if no methods found
|
|
if (m.length == 0)
|
|
throw new InternalError("Could not locate the methods for the PEPA compiler");
|
|
|
|
// Locate the entry point for the class
|
|
Method entryPoint = null;
|
|
for (int i = 0; i < m.length; i++) {
|
|
if (m[i].getName().equals("compile")) {
|
|
entryPoint = m[i];
|
|
}
|
|
}
|
|
// Terminate here if the entry point was not found
|
|
if (entryPoint == null)
|
|
throw new InternalError("Could not locate the entry point for the PEPA compiler");
|
|
|
|
// Build the arguments for the method
|
|
Object[] oa = { fileName };
|
|
Object o = entryPoint.invoke(null, oa);
|
|
if (!(o instanceof String))
|
|
throw new InternalError("Non-string returned by PEPA compile method ");
|
|
|
|
String PRISM_result = (String)o;
|
|
|
|
return PRISM_result;
|
|
} catch (ClassNotFoundException cnfe) {
|
|
throw new InternalError("Could not load the PEPA compiler class from pepa.zip");
|
|
} catch (SecurityException se) {
|
|
throw new InternalError("Could not secure the PEPA compiler class");
|
|
} catch (IllegalAccessException iae) {
|
|
throw new InternalError("Could not access the PEPA compiler instance");
|
|
} catch (IllegalArgumentException iarge) {
|
|
throw new InternalError("Attempted to start the PEPA compiler with the wrong arguments");
|
|
} catch (InvocationTargetException ite) {
|
|
Throwable t = ite.getTargetException();
|
|
throw new InternalError(t.toString());
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args) throws InternalError {
|
|
if (args == null)
|
|
throw new InternalError("Cannot invoke the PEPA compiler on a null filename");
|
|
|
|
if (args.length == 0)
|
|
throw new InternalError("Must supply a file name to invoke the PEPA compiler");
|
|
|
|
if (args.length != 1)
|
|
throw new InternalError("Cannot invoke the PEPA compiler on more than one file");
|
|
|
|
System.out.println(compile(args[0]));
|
|
}
|
|
}
|