//[Personalities/Java - (c) Luis Blando.] //[Personalities/Java behavior file #2 under construction, by Diego Rodrigo.] //[thesis advisor : Daniel Gandara.] //this behavior file contais the Main class. //********************************************************************* //[Main class definition] //********************************************************************* Main{ (@ //some useful constants & 1 FileInputStream to read from. //[it's better to use boolean instead of FAILED & OK] public final static String version="0.1.9"; public final static int FAILED=-1; public final static int OK=0; private static FileInputStream fileInputStream; private static boolean verbose = false; private static boolean debug = false; private static final int NOINPUTFILE = -2; private static final int READ = -4; private static final int WRITE = -8; private static final int OTHER = -1; private static boolean error = false; private static String errmsg = ""; private static long startingTime; @) //getHeader makes the common header for all files public static String getHeader(String fname) (@ String tmp="/***************************************************************\n" + "[ "+fname+" ]\n\n" + "\tAutomatically generated by Personalities/Java compiler.\n" + "***************************************************************/\n"; return tmp; @) private static String writePackage(String Package) (@ if (!Package.equals("")) return "package " + Package + ";\n\n"; else return ""; @) private static String writeImports(Vector Imports) (@ String tmp = ""; for (int i=0; i< Imports.size(); i++) tmp+= "import " + (String)Imports.elementAt(i) + ";\n"; return tmp; @) /***the next 2 methods are for personality interfaces***/ //makeDiDecl writes the downstream interface declaration. public static String makeDiDecl(Vector diList) (@ String tmp = "//[downstream interface declaration begins.]\n"; int length = diList.size(); for (int i=0; i"); default: errmsg=msg; } @) private static void abort() (@ System.out.println(errmsg); System.out.println("Exiting..."); System.exit(1); @) //the show starts here. //the main function is quite large, so it has more comments inside ... public static void main(String args[]) throws Exception (@ startingTime = System.currentTimeMillis(); //write some info stuff. System.out.println("Personalities/Java compiler v"+version); //open & read the source files. String fname = ""; Vector fnames = new Vector(); String option = ""; if (args.length>0) { for (int i=0; i=DepVec.size()) { allLoaded=true; } } if (error) { abort(); } //if everithing went right, we have all the files //loaded in DepVec & parsed. /************************************************** * this place is reserved for the semantic analysis* * implementation... * **************************************************/ //now we should build three kind of files: //0:one interface for each personality declared //1:one class (Ego) for each personality declared //2:one class for each class declared String contents; Vector Imports; String Package; PersonalityFieldsVisitor pfv = new PersonalityFieldsVisitor(); Vector diList, meList, inList, ncList, coList, fiList; ClassFieldsVisitor cfv = new ClassFieldsVisitor(); Vector cinList, ccoList, cncList, cniList, cmeList, cfiList; for (i=0;i interface //now looking for the $Ego... contents = writePackage(Package) + writeImports(Imports) + "public class " + oname +"$Ego \n{\n" + makeInitializerBody(inList) + makeNestedClassBody(ncList) + makeConstructorBody(coList) + makeMethodBody(meList, diList, oname) + makeFieldBody(fiList) + "}"; if(writeFile(oname+"$Ego.java", contents)==FAILED) { setError(WRITE, oname+"$Ego.java"); break; } //$Ego done. } //it's a class. else { cd=(UnmodifiedClassDeclaration)df.getObject(); cd.toEveryField(cfv); cinList = cfv.getInList(); ccoList = cfv.getCoList(); cncList = cfv.getNcList(); cniList = cfv.getNiList(); cmeList = cfv.getMeList(); cfiList = cfv.getFiList(); oname=df.getIdent(); contents = writePackage(Package) + writeImports(Imports) + "public class " + oname + getExtends(cd) + getImplements(cd) + "\n{\n" + makeClassInitializer(cinList) + makeClassConstructor(ccoList) + makeClassNC(cncList) + makeClassNI(cniList) + //here we have to get DIs from personality names... makeClassMethod(cmeList, cd.getPersonified(), DepVec) + makeClassField(cfiList) + //how can we get to UIs from personality name ??? makeClassUI(cd.getPersonified(), DepVec) + "}"; if(writeFile(oname+".java", contents)==FAILED) { setError(WRITE, oname+".java"); break; } } } if (error) { abort(); } System.out.println("[done in " + (System.currentTimeMillis() - startingTime) + " milliseconds.]"); } catch(ParseException e) { System.out.println("Error parsing... "+e.toString()); } @) }