You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by Jene Jasper <JJ...@abz.nl> on 2003/04/02 09:40:34 UTC
Patch JavaCC - KEEP_LINE_COLUMN, JJTree - OUTPUT_FILE and new tas
kdef JJDoc
As mentioned yesterday, I have made some changes to the JavaCC and JJTree
taskdefs
and added a new taskdef for JJDoc. I have included the patch.txt for the
changes.
But what is the best way to deliver the new files JJDoc.java and jjdoc.html
?
I could mail a zip containing this patch.txt and all files concerning.
Sincerely yours,
Jene.
============================================================================
=======
cvs -q diff -u -r ant_snapshot_20030401
Index: docs/manual/optionaltasklist.html
===================================================================
RCS file: D:\usr\local\cvsroot/ant/docs/manual/optionaltasklist.html,v
retrieving revision 1.3
diff -u -r1.3 optionaltasklist.html
--- docs/manual/optionaltasklist.html 2003/04/01 17:13:53 1.3
+++ docs/manual/optionaltasklist.html 2003/04/01 17:30:10
@@ -36,6 +36,7 @@
<a href="OptionalTasks/javah.html">Javah</a><br>
<a href="OptionalTasks/jspc.html">JspC</a><br>
<a href="OptionalTasks/jdepend.html">JDepend</a><br>
+<a href="OptionalTasks/jjdoc.html">JJDoc</a><br>
<a href="OptionalTasks/jjtree.html">JJTree</a><br>
<a href="OptionalTasks/jlink.html"><i>Jlink</i></a><br>
<a href="OptionalTasks/jpcoverage.html">JProbe Coverage</a><br>
Index: docs/manual/tasksoverview.html
===================================================================
RCS file: D:\usr\local\cvsroot/ant/docs/manual/tasksoverview.html,v
retrieving revision 1.1
diff -u -r1.1 tasksoverview.html
--- docs/manual/tasksoverview.html 2003/03/01 16:17:31 1.1
+++ docs/manual/tasksoverview.html 2003/04/01 17:13:10
@@ -866,6 +866,16 @@
</tr>
<tr valign="top">
+ <td nowrap><a href="OptionalTasks/jjdoc.html">JJDoc</a></td>
+ <td><p>Invokes the <a href="http://www.webgain.com/products/java_cc/">
+ JJDoc</a> documentation generator for the JavaCC compiler-compiler.
+ JJDoc takes a JavaCC parser specification and produces documentation
+ for the BNF grammar. It can operate in three modes, determined by
+ command line options. This task only invokes JJDoc if the grammar file
+ is newer than the generated BNF grammar documentation.</p></td>
+ </tr>
+
+ <tr valign="top">
<td nowrap><a href="OptionalTasks/jjtree.html">JJTree</a></td>
<td><p>Invokes the <a href="http://www.webgain.com/products/java_cc/">
JJTree</a> preprocessor for the JavaCC compiler-compiler. It inserts
Index: docs/manual/OptionalTasks/javacc.html
===================================================================
RCS file: D:\usr\local\cvsroot/ant/docs/manual/OptionalTasks/javacc.html,v
retrieving revision 1.1
diff -u -r1.1 javacc.html
--- docs/manual/OptionalTasks/javacc.html 2003/03/01 16:17:28 1.1
+++ docs/manual/OptionalTasks/javacc.html 2003/04/01 17:13:38
@@ -116,6 +116,11 @@
<td valign="top" align="center">No</td>
</tr>
<tr>
+ <td valign="top">keeplinecolumn</td>
+ <td valign="top">Sets the KEEP_LINE_COLUMN grammar option. This is a
boolean option.</td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
<td valign="top">lookahead</td>
<td valign="top">Sets the LOOKAHEAD grammar option. This is an integer
option.</td>
<td valign="top" align="center">No</td>
cvs diff: tag ant_snapshot_20030401 is not in file
docs/manual/OptionalTasks/jjdoc.html
Index: docs/manual/OptionalTasks/jjtree.html
===================================================================
RCS file: D:\usr\local\cvsroot/ant/docs/manual/OptionalTasks/jjtree.html,v
retrieving revision 1.1
diff -u -r1.1 jjtree.html
--- docs/manual/OptionalTasks/jjtree.html 2003/03/01 16:17:29 1.1
+++ docs/manual/OptionalTasks/jjtree.html 2003/04/01 17:13:50
@@ -17,13 +17,16 @@
at various places in the JavaCC source that it generates. The output of
JJTree is run through JavaCC to create the parser.
<p>To use the jjtree task, set the <i>target</i> attribute to the name
-of the jjtree grammar file to process. You also need to specify the
directory
+of the JJTree grammar file to process. You also need to specify the
directory
containing the JavaCC installation using the <i>javacchome</i> attribute,
so that ant can find the JavaCC classes. Optionally, you can also set the
<i>outputdirectory</i>
-to write the generated file to a specific directory. Otherwise jjtree
writes
-the generated JavaCC grammar file to the directory containing the JJTree
-grammar file.</p>
+to write the generated JavaCC grammar and node files to a specific
directory.
+Otherwise jjtree writes the generated JavaCC grammar and node files to the
directory
+containing the JJTree grammar file. As an extra option, you can also set
the
+<i>outputfile</i> to write the generated JavaCC grammar file to a specific
(directory and) file.
+Otherwise jjtree writes the generated JavaCC grammar file as the JJTree
+grammar file with a suffix .jj.</p>
<p>This task only invokes JJTree if the grammar file is newer than the
generated JavaCC file.</p>
@@ -57,8 +60,17 @@
<tr>
<td VALIGN=TOP>outputdirectory</td>
-<td VALIGN=TOP>The directory to write the generated file to. If not set,
-the files are written to the directory containing the grammar
file. </td>
+<td VALIGN=TOP>The directory to write the generated JavaCC grammar and node
files to.
+If not set, the files are written to the directory containing the grammar
file. </td>
+
+<td ALIGN=CENTER VALIGN=TOP>No</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP>outputfile</td>
+
+<td VALIGN=TOP>The file to write the generated JavaCC grammar file to. If
not set,
+the file is written with the same name as the JJTree grammar file but with
a the suffix .jj. </td>
<td ALIGN=CENTER VALIGN=TOP>No</td>
</tr>
Index: src/main/org/apache/tools/ant/taskdefs/defaults.properties
===================================================================
RCS file:
D:\usr\local\cvsroot/ant/src/main/org/apache/tools/ant/taskdefs/defaults.pro
perties,v
retrieving revision 1.5
diff -u -r1.5 defaults.properties
--- src/main/org/apache/tools/ant/taskdefs/defaults.properties 2003/04/01
17:13:54 1.5
+++ src/main/org/apache/tools/ant/taskdefs/defaults.properties 2003/04/01
17:29:42
@@ -102,6 +102,7 @@
ftp=org.apache.tools.ant.taskdefs.optional.net.FTP
icontract=org.apache.tools.ant.taskdefs.optional.IContract
javacc=org.apache.tools.ant.taskdefs.optional.javacc.JavaCC
+jjdoc=org.apache.tools.ant.taskdefs.optional.javacc.JJDoc
jjtree=org.apache.tools.ant.taskdefs.optional.javacc.JJTree
stcheckout=org.apache.tools.ant.taskdefs.optional.starteam.StarTeamCheckout
stcheckin=org.apache.tools.ant.taskdefs.optional.starteam.StarTeamCheckin
cvs diff: tag ant_snapshot_20030401 is not in file
src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJDoc.java
Index: src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
===================================================================
RCS file:
D:\usr\local\cvsroot/ant/src/main/org/apache/tools/ant/taskdefs/optional/jav
acc/JJTree.java,v
retrieving revision 1.1
diff -u -r1.1 JJTree.java
--- src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
2003/03/01 16:17:33 1.1
+++ src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
2003/04/01 17:13:30
@@ -77,6 +77,7 @@
public class JJTree extends Task {
// keys to optional attributes
+ private static final String OUTPUT_FILE = "OUTPUT_FILE";
private static final String BUILD_NODE_FILES = "BUILD_NODE_FILES";
private static final String MULTI = "MULTI";
private static final String NODE_DEFAULT_VOID = "NODE_DEFAULT_VOID";
@@ -92,6 +93,10 @@
private final Hashtable optionalAttrs = new Hashtable();
+ private String outputFile = null;
+
+ private static final String DEFAULT_SUFFIX = ".jj";
+
// required attributes
private File outputDirectory = null;
private File target = null;
@@ -178,7 +183,7 @@
}
/**
- * The directory to write the generated file to.
+ * The directory to write the generated JavaCC grammar and node files
to.
* If not set, the files are written to the directory
* containing the grammar file.
*/
@@ -187,6 +192,15 @@
}
/**
+ * The outputfile to write the generated JavaCC grammar file to.
+ * If not set, the file is written with the same name as
+ * the JJTree grammar file with a suffix .jj.
+ */
+ public void setOutputfile(String outputFile) {
+ this.outputFile = outputFile;
+ }
+
+ /**
* The jjtree grammar file to process.
*/
public void setTarget(File target) {
@@ -217,30 +231,38 @@
if (target == null || !target.isFile()) {
throw new BuildException("Invalid target: " + target);
+ }
+
+ if (outputFile != null) {
+ cmdl.createArgument().setValue("-" + OUTPUT_FILE + ":" +
outputFile.replace('\\', '/'));
}
-
+
+ File javaFile;
+
// use the directory containing the target as the output directory
if (outputDirectory == null) {
- outputDirectory = new File(target.getParent());
- }
- if (!outputDirectory.isDirectory()) {
- throw new BuildException("'outputdirectory' " + outputDirectory
- + " is not a directory.");
- }
- // convert backslashes to slashes, otherwise jjtree will put this
as
- // comments and this seems to confuse javacc
- cmdl.createArgument().setValue("-OUTPUT_DIRECTORY:"
- + outputDirectory.getAbsolutePath().replace('\\', '/'));
-
- String targetName = target.getName();
- final File javaFile = new File(outputDirectory,
- targetName.substring(0, targetName.indexOf(".jjt")) + ".jj");
- if (javaFile.exists()
+ javaFile = new File(createOutputFileName(target, outputFile,
null));
+ } else {
+ if (!outputDirectory.isDirectory()) {
+ throw new BuildException("'outputdirectory' " +
outputDirectory
+ + " is not a directory.");
+ }
+
+ // convert backslashes to slashes, otherwise jjtree will put
this as
+ // comments and this seems to confuse javacc
+ cmdl.createArgument().setValue("-OUTPUT_DIRECTORY:"
+ + outputDirectory.getAbsolutePath().replace('\\', '/'));
+
+ javaFile = new File(createOutputFileName(target, outputFile,
outputDirectory.getPath()));
+ }
+
+ if (javaFile.exists()
&& target.lastModified() < javaFile.lastModified()) {
log("Target is already built - skipping (" + target + ")",
Project.MSG_VERBOSE);
return;
}
+
cmdl.createArgument().setValue(target.getAbsolutePath());
final Path classpath = cmdl.createClasspath(getProject());
@@ -266,6 +288,54 @@
}
} catch (IOException e) {
throw new BuildException("Failed to launch JJTree", e);
+ }
+ }
+
+ private String createOutputFileName(File target, String
optionalOutputFile, String outputDirectory)
+ {
+ String jjtreeFile = target.getAbsolutePath().replace('\\','/');
+
+ if ((optionalOutputFile == null) || optionalOutputFile.equals(""))
+ {
+ int filePos = jjtreeFile.lastIndexOf("/");
+
+ if (filePos >= 0)
+ {
+ jjtreeFile = jjtreeFile.substring(filePos + 1);
+ }
+
+ int suffixPos = jjtreeFile.lastIndexOf('.');
+
+ if (suffixPos == -1)
+ {
+ optionalOutputFile = jjtreeFile + DEFAULT_SUFFIX;
+ }
+ else
+ {
+ String currentSuffix = jjtreeFile.substring(suffixPos);
+
+ if (currentSuffix.equals(DEFAULT_SUFFIX))
+ {
+ optionalOutputFile = jjtreeFile + DEFAULT_SUFFIX;
+ }
+ else
+ {
+ optionalOutputFile = jjtreeFile.substring(0, suffixPos)
+ DEFAULT_SUFFIX;
+ }
+ }
+ }
+ else
+ {
+ optionalOutputFile = optionalOutputFile.replace('\\','/');
+ }
+
+ if ((outputDirectory == null) || outputDirectory.equals(""))
+ {
+ return (getProject().getBaseDir() + "/" +
optionalOutputFile).replace('\\', '/');
+ }
+ else
+ {
+ return (outputDirectory + "/" +
optionalOutputFile).replace('\\', '/');
}
}
}
Index: src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java
===================================================================
RCS file:
D:\usr\local\cvsroot/ant/src/main/org/apache/tools/ant/taskdefs/optional/jav
acc/JavaCC.java,v
retrieving revision 1.1
diff -u -r1.1 JavaCC.java
--- src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java
2003/03/01 16:17:34 1.1
+++ src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java
2003/04/01 17:13:34
@@ -96,6 +96,7 @@
private static final String SANITY_CHECK = "SANITY_CHECK";
private static final String FORCE_LA_CHECK = "FORCE_LA_CHECK";
private static final String CACHE_TOKENS = "CACHE_TOKENS";
+ private static final String KEEP_LINE_COLUMN =
"KEEP_LINE_COLUMN";
private final Hashtable optionalAttrs = new Hashtable();
@@ -245,6 +246,13 @@
*/
public void setCachetokens(boolean cacheTokens) {
optionalAttrs.put(CACHE_TOKENS, new Boolean(cacheTokens));
+ }
+
+ /**
+ * Sets the KEEP_LINE_COLUMN grammar option.
+ */
+ public void setKeeplinecolumn(boolean keepLineColumn) {
+ optionalAttrs.put(KEEP_LINE_COLUMN, new Boolean(keepLineColumn));
}
/**
*****CVS exited normally with code 1*****
============================================================================
=======
>I have some patches coming up for JavaCC and JJTree concerning some missing
>parameters and also an enhancement for a JJDoc taskdef (code is finished,
>only cvs -diff left on a nightly snapshot).
>I could look into a patch for version 3.0 added support this coming
weekend.
>Jene Jasper.
On 01 Apr 2003, Tom Copeland <to...@infoether.com> wrote:
>> If possible we should support both (and I think there already is a
>> bugzilla report to that effect, including a patch IIRC).
>
> I poked around Bugzilla for a bit and couldn't find anything.
I was wrong. There is one for JDepend, which has similar problems
(changed directory structure in new release).
> Anyhow, sounds like you have this one under control...
Not really. 8-) A patch that would enable the tasks to work with
either version would be appreciated.
Stefan
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org
Re: Patch JavaCC - KEEP_LINE_COLUMN, JJTree - OUTPUT_FILE and new tas kdef JJDoc
Posted by Stefan Bodewig <bo...@apache.org>.
On Wed, 2 Apr 2003, Jene Jasper <JJ...@abz.nl> wrote:
> As mentioned yesterday, I have made some changes to the JavaCC and
> JJTree taskdefs and added a new taskdef for JJDoc. I have included
> the patch.txt for the changes. But what is the best way to deliver
> the new files JJDoc.java and jjdoc.html ?
Create an enhancement request in Bugzilla, attach this patch and the
two new files.
Does your patch include the JavaCC 3.0/2.1 changes? I'd like to
tackle that separately if possible.
Stefan