All Downloads are FREE. Search and download functionalities are using the official Maven repository.

java_cup.anttask.CUPTask Maven / Gradle / Ivy

Go to download

A fork of the Java Cup parser generator with some bug fixes and enhancements. (Forked at version 11b)

The newest version!
/**
 * java_cup.anttask.CUPTask.java
 *
 * @author Michael Petter, 2003
 * 

* Ant-Task for CUP Parser Generator for Java * -- tested with Ant 1.5.1; * -- compiles with javac -classpath .:${ANT_HOME}/lib/ant.jar java_cup.anttask.CUPTask.java * -- overrides org.apache.tools.ant.taskdefs.Java * -- providing cool interface to CUP * -- mapping all existing parameters to attributes * -- trys to add new useful features to CUP, like * - automatic package discovery * - re-generate .java only when necessary * - possibility to generate into a dest-directory *

* my code is not perfect (in some cases it is pretty * ugly :-) ), but i didn't encounter any major error * until now */ package java_cup.anttask; import java_cup.version; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class CUPTask extends Task { private String srcfile = null; private String parser = null; private String _package = null; private String symbols = null; private String destdir = null; private boolean _interface = false; private boolean nonterms = false; private String expect = null; private boolean compact_red = false; private boolean nowarn = false; private boolean nosummary = false; private boolean progress = false; private boolean dump_grammar = false; private boolean dump_states = false; private boolean dump_tables = false; private boolean dump = false; private boolean time = false; private boolean debug = false; private boolean debugsymbols = false; private boolean nopositions = false; private boolean xmlactions = false; private boolean genericlabels = false; private boolean locations = true; private boolean noscanner = false; private boolean force = false; private boolean quiet = false; /** * executes the task * parses all attributes and validates options... * */ public void execute() throws BuildException { List sc = new ArrayList(); // sc = simulated commandline // here, we parse our elements if (parser != null) { sc.add("-parser"); sc.add(parser); } else parser = "parser"; // set the default name to check actuality if (_package != null) { sc.add("-package"); sc.add(_package); } if (symbols != null) { sc.add("-symbols"); sc.add(symbols); } else symbols = "sym"; if (expect != null) { sc.add("-expect"); sc.add(expect); } if (_interface) { sc.add("-interface"); } if (nonterms) { sc.add("-nonterms"); } if (compact_red) { sc.add("-compact_red"); } if (nowarn) { sc.add("-nowarn"); } if (nosummary) { sc.add("-nosummary"); } if (progress) { sc.add("-progress"); } if (dump_grammar) { sc.add("-dump_grammar"); } if (dump_states) { sc.add("-dump_states"); } if (dump_tables) { sc.add("-dump_tables"); } if (dump) { sc.add("-dump"); } if (time) { sc.add("-time"); } if (debug) { sc.add("-debug"); } if (debugsymbols) { sc.add("-debugsymbols"); } if (nopositions) { sc.add("-nopositions"); } if (locations) { sc.add("-locations"); } if (genericlabels) { sc.add("-genericlabels"); } if (xmlactions) { sc.add("-xmlactions"); } if (noscanner) { sc.add("-noscanner"); } if (!quiet) log("This is " + version.title_str); if (!quiet) log("Authors : " + version.author_str); if (!quiet) log("Bugreports to [email protected]"); // look for package name and add to destdir String packagename = inspect(srcfile); // now, that's sweet: if (destdir == null) { destdir = System.getProperty("user.dir"); if (!quiet) log("No destination directory specified; using working directory: " + destdir); } File dest = new File(destdir + packagename); if (!(dest).exists()) { if (!quiet) log("Destination directory didn't exist; creating new one: " + destdir + packagename); dest.mkdirs(); force = true; } else { if (force && !quiet) { log("anyway, this generation will be processed because of option force set to \"true\""); } else { if (!quiet) log("checking, whether this run is necessary"); } // let's check, whether there exists any Parser fragment... File parserfile = new File(destdir + packagename, parser + ".java"); File symfile = new File(destdir + packagename, symbols + ".java"); File cupfile = new File(srcfile); if (!parserfile.exists() || !symfile.exists()) { if (!quiet) log("Either Parserfile or Symbolfile didn't exist"); force = true; } else { if (!quiet) log("Parserfile and symbolfile are existing"); } if (parserfile.lastModified() <= cupfile.lastModified()) { if (!quiet) log("Parserfile " + parserfile + " isn't actual"); force = true; } else { if (!quiet) log("Parserfile " + parserfile + " is actual"); } if (symfile.lastModified() <= cupfile.lastModified()) { if (!quiet) log("Symbolfile " + symfile + " isn't actual"); force = true; } else { if (!quiet) log("Symbolfile" + symfile + " is actual"); } if (!force) { if (!quiet) log("skipping generation of " + srcfile); if (!quiet) log("use option force=\"true\" to override"); return; } } sc.add("-destdir"); sc.add(dest.getAbsolutePath()); // also catch the not existing input file if (srcfile == null) throw new BuildException("Input file needed: Specify "); if (!(new File(srcfile)).exists()) throw new BuildException("Input file not found: srcfile=\"" + srcfile + "\" "); sc.add(srcfile); String[] args = new String[sc.size()]; for (int i = 0; i < args.length; i++) args[i] = (String) sc.get(i); try { java_cup.Main.main(args); } catch (Exception e) { log("CUP error occured int CUP task: " + e); } } /** * Let's search for package name * * @param cupfile where we have to search for the package name * * @return the package folder structure */ protected String inspect(String cupfile) { try { BufferedReader br = new BufferedReader(new FileReader(cupfile)); while (br.ready()) { String line = br.readLine(); if ((line.startsWith("package")) && (line.indexOf(";") != -1)) { String result = line.substring(8, line.indexOf(";")); result = result.replace('.', System.getProperty("file.separator").charAt(0)); return System.getProperty("file.separator") + result; } } } catch (IOException ioe) { } return ""; } /** * Gets the value of quiet * * @return the value of quiet */ public boolean getQuiet() { return this.quiet; } /** * Sets the value of quiet * * @param argquiet Value to assign to this.quiet */ public void setQuiet(boolean argquiet) { this.quiet = argquiet; } /** * Gets the value of force * * @return the value of force */ public boolean getForce() { return this.force; } /** * Sets the value of force * * @param argforce Value to assign to this.force */ public void setForce(boolean argforce) { this.force = argforce; } /** * Gets the value of _package * * @return the value of _package */ public String getPackage() { return this._package; } /** * Sets the value of _package * * @param arg_package Value to assign to this._package */ public void setPackage(String arg_package) { this._package = arg_package; } /** * Gets the value of destdir * * @return the value of destdir */ public String getDestdir() { return this.destdir; } /** * Sets the value of destdir * * @param destdir Value to assign to this.destdir */ public void setDestdir(String destdir) { this.destdir = destdir; } /** * Gets the value of _interface * * @return the value of _interface */ public boolean isInterface() { return this._interface; } /** * Sets the value of _interface * * @param arg_interface Value to assign to this._interface */ public void setInterface(boolean arg_interface) { this._interface = arg_interface; } /** * Get the Srcfile value. * @return the Srcfile value. */ public String getSrcfile() { return srcfile; } /** * Set the Srcfile value. * @param newSrcfile The new Srcfile value. */ public void setSrcfile(String newSrcfile) { this.srcfile = newSrcfile; } /** * Gets the value of parser * * @return the value of parser */ public String getParser() { return this.parser; } /** * Sets the value of parser * * @param argParser Value to assign to this.parser */ public void setParser(String argParser) { this.parser = argParser; } /** * Gets the value of symbols * * @return the value of symbols */ public String getSymbols() { return this.symbols; } /** * Sets the value of symbols * * @param argSymbols Value to assign to this.symbols */ public void setSymbols(String argSymbols) { this.symbols = argSymbols; } /** * Gets the value of nonterms * * @return the value of nonterms */ public boolean isNonterms() { return this.nonterms; } /** * Sets the value of nonterms * * @param argNonterms Value to assign to this.nonterms */ public void setNonterms(boolean argNonterms) { this.nonterms = argNonterms; } /** * Gets the value of expect * * @return the value of expect */ public String getExpect() { return this.expect; } /** * Sets the value of expect * * @param argExpect Value to assign to this.expect */ public void setExpect(String argExpect) { this.expect = argExpect; } /** * Gets the value of compact_red * * @return the value of compact_red */ public boolean isCompact_red() { return this.compact_red; } /** * Sets the value of compact_red * * @param argCompact_red Value to assign to this.compact_red */ public void setCompact_red(boolean argCompact_red) { this.compact_red = argCompact_red; } /** * Gets the value of nowarn * * @return the value of nowarn */ public boolean isNowarn() { return this.nowarn; } /** * Sets the value of nowarn * * @param argNowarn Value to assign to this.nowarn */ public void setNowarn(boolean argNowarn) { this.nowarn = argNowarn; } /** * Gets the value of nosummary * * @return the value of nosummary */ public boolean isNosummary() { return this.nosummary; } /** * Sets the value of nosummary * * @param argNosummary Value to assign to this.nosummary */ public void setNosummary(boolean argNosummary) { this.nosummary = argNosummary; } /** * Gets the value of progress * * @return the value of progress */ public boolean isProgress() { return this.progress; } /** * Sets the value of progress * * @param argProgress Value to assign to this.progress */ public void setProgress(boolean argProgress) { this.progress = argProgress; } /** * Gets the value of dump_grammar * * @return the value of dump_grammar */ public boolean isDump_grammar() { return this.dump_grammar; } /** * Sets the value of dump_grammar * * @param argDump_grammar Value to assign to this.dump_grammar */ public void setDump_grammar(boolean argDump_grammar) { this.dump_grammar = argDump_grammar; } /** * Gets the value of dump_states * * @return the value of dump_states */ public boolean isDump_states() { return this.dump_states; } /** * Sets the value of dump_states * * @param argDump_states Value to assign to this.dump_states */ public void setDump_states(boolean argDump_states) { this.dump_states = argDump_states; } /** * Gets the value of dump_tables * * @return the value of dump_tables */ public boolean isDump_tables() { return this.dump_tables; } /** * Sets the value of dump_tables * * @param argDump_tables Value to assign to this.dump_tables */ public void setDump_tables(boolean argDump_tables) { this.dump_tables = argDump_tables; } /** * Gets the value of dump * * @return the value of dump */ public boolean isDump() { return this.dump; } /** * Sets the value of dump * * @param argDump Value to assign to this.dump */ public void setDump(boolean argDump) { this.dump = argDump; } /** * Gets the value of time * * @return the value of time */ public boolean isTime() { return this.time; } /** * Sets the value of time * * @param argTime Value to assign to this.time */ public void setTime(boolean argTime) { this.time = argTime; } /** * Gets the value of debug * * @return the value of debug */ public boolean isDebug() { return this.debug; } /** * Sets the value of debug * * @param argDebug Value to assign to this.debug */ public void setDebug(boolean argDebug) { this.debug = argDebug; } /** * Gets the value of debug * * @return the value of debug */ public boolean isDebugSymbols() { return this.debugsymbols; } /** * Sets the value of debug * * @param argDebug Value to assign to this.debug */ public void setDebugSymbols(boolean argDebug) { this.debugsymbols = argDebug; } /** * Gets the value of nopositions * * @return the value of nopositions */ public boolean isNopositions() { return this.nopositions; } /** * Sets the value of nopositions * * @param argNopositions Value to assign to this.nopositions */ public void setNopositions(boolean argNopositions) { this.nopositions = argNopositions; } /** * Gets the value of locations * * @return the value of locations */ public boolean isLocations() { return this.locations; } /** * Sets the value of locations * * @param argLocations Value to assign to this.locations */ public void setLocations(boolean argLocations) { this.locations = argLocations; } /** * Gets the value of noscanner * * @return the value of noscanner */ public boolean isNoscanner() { return this.noscanner; } /** * Sets the value of noscanner * * @param argNoscanner Value to assign to this.noscanner */ public void setNoscanner(boolean argNoscanner) { this.noscanner = argNoscanner; } public boolean isXmlactions() { return xmlactions; } public void setXmlactions(boolean xmlactions) { this.xmlactions = xmlactions; } public boolean isGenericlabels() { return genericlabels; } public void setGenericlabels(boolean genericlabels) { this.genericlabels = genericlabels; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy