ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas Haas" <thomas.h...@softwired-inc.com>
Subject Re: JavaCC and JJTree taskdefs for the javacc package
Date Thu, 17 Aug 2000 20:51:40 GMT
Hi Micahel

Just browsed through your code and I am impressed how much my first hack
changed. I am very glad you did this and hope the task will improve and be
of great to many happy ant users.

-tom

----- Original Message -----
From: "Michael Saunders" <michael@amtec.com>
To: <ant-dev@jakarta.apache.org>
Sent: Monday, August 14, 2000 4:08 PM
Subject: JavaCC and JJTree taskdefs for the javacc package


> Well I finally got around to modifying Thomas Haas' original go at the
JavaCC
> taskdef, and updated it so that it works with the javacc tool instead of
the
> mparse tool. I also added a JJTree taskdef which is another tool for the
javacc
> package. I have included both of them as attachments. I hope that
attachments
> works for those who check into CVS. Both of these taskdefs should go into
the
> javacc optional package.
>
> Thanks,
> Michael
>


----------------------------------------------------------------------------
----


> /*
>  * The Apache Software License, Version 1.1
>  *
>  * Copyright (c) 2000 The Apache Software Foundation.  All rights
>  * reserved.
>  *
>  * Redistribution and use in source and binary forms, with or without
>  * modification, are permitted provided that the following conditions
>  * are met:
>  *
>  * 1. Redistributions of source code must retain the above copyright
>  *    notice, this list of conditions and the following disclaimer.
>  *
>  * 2. Redistributions in binary form must reproduce the above copyright
>  *    notice, this list of conditions and the following disclaimer in
>  *    the documentation and/or other materials provided with the
>  *    distribution.
>  *
>  * 3. The end-user documentation included with the redistribution, if
>  *    any, must include the following acknowlegement:
>  *       "This product includes software developed by the
>  *        Apache Software Foundation (http://www.apache.org/)."
>  *    Alternately, this acknowlegement may appear in the software itself,
>  *    if and wherever such third-party acknowlegements normally appear.
>  *
>  * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
>  *    Foundation" must not be used to endorse or promote products derived
>  *    from this software without prior written permission. For written
>  *    permission, please contact apache@apache.org.
>  *
>  * 5. Products derived from this software may not be called "Apache"
>  *    nor may "Apache" appear in their names without prior written
>  *    permission of the Apache Group.
>  *
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>  * SUCH DAMAGE.
>  * ====================================================================
>  *
>  * This software consists of voluntary contributions made by many
>  * individuals on behalf of the Apache Software Foundation.  For more
>  * information on the Apache Software Foundation, please see
>  * <http://www.apache.org/>.
>  */
>
> package org.apache.tools.ant.taskdefs.optional.javacc;
>
> import org.apache.tools.ant.BuildException;
> import org.apache.tools.ant.Project;
> import org.apache.tools.ant.Task;
> import org.apache.tools.ant.taskdefs.Execute;
> import org.apache.tools.ant.taskdefs.LogStreamHandler;
> import org.apache.tools.ant.types.Commandline;
> import org.apache.tools.ant.types.CommandlineJava;
> import org.apache.tools.ant.types.Path;
>
> import java.io.File;
> import java.io.IOException;
>
> /**
>  * Taskdef for the JavaCC compiler compiler.
>  *
>  * @author thomas.haas@softwired-inc.com
>  * @author Michael Saunders <a
href="mailto:michael@amtec.com">michael@amtec.com</a>
>  */
> public class JavaCC extends Task {
>
>     private int lookahead            = 1;
>     private int choiceAmbiguityCheck = 2;
>     private int otherAmbiguityCheck  = 1;
>
>     private boolean staticParser         = true;
>     private boolean debugParser          = false;
>     private boolean debugLookahead       = false;
>     private boolean debugTokenManager    = false;
>     private boolean optimizeTokenManager = true;
>     private boolean errorReporting       = true;
>     private boolean javaUnicodeEscape    = false;
>     private boolean unicodeInput         = false;
>     private boolean ignoreCase           = false;
>     private boolean commonTokenAction    = false;
>     private boolean userTokenManager     = false;
>     private boolean userCharStream       = false;
>     private boolean buildParser          = true;
>     private boolean buildTokenManager    = true;
>     private boolean sanityCheck          = true;
>     private boolean forceLACheck         = false;
>     private boolean cacheTokens          = false;
>
>     private File outputDirectory = null;
>     private File target          = null;
>     private File javaccHome      = null;
>
>     private CommandlineJava cmdl = new CommandlineJava();
>
>
>     public void setLookahead(int lookahead) {
>         this.lookahead = lookahead;
>     }
>
>     public void setChoiceambiguitycheck(int choiceAmbiguityCheck) {
>         this.choiceAmbiguityCheck = choiceAmbiguityCheck;
>     }
>
>     public void setOtherambiguityCheck(int otherAmbiguityCheck) {
>         this.otherAmbiguityCheck = otherAmbiguityCheck;
>     }
>
>     public void setStatic(boolean staticParser) {
>         this.staticParser = staticParser;
>     }
>
>     public void setDebugparser(boolean debugParser) {
>         this.debugParser = debugParser;
>     }
>
>     public void setDebuglookahead(boolean debugLookahead) {
>         this.debugLookahead = debugLookahead;
>     }
>
>     public void setDebugtokenmanager(boolean debugTokenManager) {
>         this.debugTokenManager = debugTokenManager;
>     }
>
>     public void setOptimizetokenmanager(boolean optimizeTokenManager) {
>         this.optimizeTokenManager = optimizeTokenManager;
>     }
>
>     public void setErrorreporting(boolean errorReporting) {
>         this.errorReporting = errorReporting;
>     }
>
>     public void setJavaunicodeescape(boolean javaUnicodeEscape) {
>         this.javaUnicodeEscape = javaUnicodeEscape;
>     }
>
>     public void setUnicodeinput(boolean unicodeInput) {
>         this.unicodeInput = unicodeInput;
>     }
>
>     public void setIgnorecase(boolean ignoreCase) {
>         this.ignoreCase = ignoreCase;
>     }
>
>     public void setCommontokenaction(boolean commonTokenAction) {
>         this.commonTokenAction = commonTokenAction;
>     }
>
>     public void setUsertokenmanager(boolean userTokenManager) {
>         this.userTokenManager = userTokenManager;
>     }
>
>     public void setUsercharstream(boolean userCharStream) {
>         this.userCharStream = userCharStream;
>     }
>
>     public void setBuildparser(boolean buildParser) {
>         this.buildParser = buildParser;
>     }
>
>     public void setBuildtokenmanager(boolean buildTokenManager) {
>         this.buildTokenManager = buildTokenManager;
>     }
>
>     public void setSanitycheck(boolean sanityCheck) {
>         this.sanityCheck = sanityCheck;
>     }
>
>     public void setForcelacheck(boolean forceLACheck) {
>         this.forceLACheck = forceLACheck;
>     }
>
>     public void setCachetokens(boolean cacheTokens) {
>         this.cacheTokens = cacheTokens;
>     }
>
>     public void setOutputdirectory(File outputDirectory) {
>         this.outputDirectory = outputDirectory;
>     }
>
>     public void setTarget(File target) {
>         this.target = target;
>     }
>
>     public void setJavacchome(File javaccHome) {
>         this.javaccHome = javaccHome;
>     }
>
>     public JavaCC() {
>         cmdl.setVm("java");
>         cmdl.setClassname("COM.sun.labs.javacc.Main");
>     }
>
>     public void execute() throws BuildException {
>
>         cmdl.createArgument().setValue("-LOOKAHEAD:"
+lookahead);
>         cmdl.createArgument().setValue("-CHOICE_AMBIGUITY_CHECK:"
+choiceAmbiguityCheck);
>         cmdl.createArgument().setValue("-OTHER_AMBIGUITY_CHECK:"
+otherAmbiguityCheck);
>
>         cmdl.createArgument().setValue("-STATIC:"
+staticParser);
>         cmdl.createArgument().setValue("-DEBUG_PARSER:"
+debugParser);
>         cmdl.createArgument().setValue("-DEBUG_LOOKAHEAD:"
+debugLookahead);
>         cmdl.createArgument().setValue("-DEBUG_TOKEN_MANAGER:"
+debugTokenManager);
>
cmdl.createArgument().setValue("-OPTIMIZE_TOKEN_MANAGER:"+optimizeTokenManag
er);
>         cmdl.createArgument().setValue("-ERROR_REPORTING:"
+errorReporting);
>         cmdl.createArgument().setValue("-JAVA_UNICODE_ESCAPE:"
+javaUnicodeEscape);
>         cmdl.createArgument().setValue("-UNICODE_INPUT:"
+unicodeInput);
>         cmdl.createArgument().setValue("-IGNORE_CASE:"
+ignoreCase);
>         cmdl.createArgument().setValue("-COMMON_TOKEN_ACTION:"
+commonTokenAction);
>         cmdl.createArgument().setValue("-USER_TOKEN_MANAGER:"
+userTokenManager);
>         cmdl.createArgument().setValue("-USER_CHAR_STREAM:"
+userCharStream);
>         cmdl.createArgument().setValue("-BUILD_PARSER:"
+buildParser);
>         cmdl.createArgument().setValue("-BUILD_TOKEN_MANAGER:"
+buildTokenManager);
>         cmdl.createArgument().setValue("-SANITY_CHECK:"
+sanityCheck);
>         cmdl.createArgument().setValue("-FORCE_LA_CHECK:"
+forceLACheck);
>         cmdl.createArgument().setValue("-CACHE_TOKENS:"
+cacheTokens);
>
>         if (outputDirectory != null) {
>             if (!outputDirectory.isDirectory()) {
>                 throw new BuildException("Outputdir not a directory.");
>             }
>             cmdl.createArgument().setValue(
>                 "-OUTPUT_DIRECTORY:"+outputDirectory.getAbsolutePath());
>         }
>
>         if (target == null || !target.isFile()) {
>             throw new BuildException("Invalid target: " + target);
>         }
>         final File javaFile = new File(
>             target.toString().substring(0,
target.toString().indexOf(".jj")) + ".java");
>         if (javaFile.exists() && target.lastModified() <
javaFile.lastModified()) {
>             project.log("Target is already built - skipping (" + target +
")");
>             return;
>         }
>         cmdl.createArgument().setValue(target.getAbsolutePath());
>
>         if (javaccHome == null || !javaccHome.isDirectory()) {
>             throw new BuildException("Javacchome not set.");
>         }
>         final Path classpath = cmdl.createClasspath(project);
>
classpath.createPathElement().setLocation(javaccHome.getAbsolutePath() +
>                                                   "/JavaCC.zip");
>
>         final Commandline.Argument arg = cmdl.createVmArgument();
>         arg.setValue("-mx140M");
>         arg.setValue("-Dinstall.root="+javaccHome.getAbsolutePath());
>
>         final Execute process =
>             new Execute(new LogStreamHandler(this,
>                                              Project.MSG_INFO,
>                                              Project.MSG_INFO),
>                         null);
>         log(cmdl.toString(), Project.MSG_VERBOSE);
>         process.setCommandline(cmdl.getCommandline());
>
>         try {
>             if (process.execute() != 0) {
>                 throw new BuildException("JavaCC failed.");
>             }
>         }
>         catch (IOException e) {
>             throw new BuildException("Failed to launch JavaCC: " + e);
>         }
>     }
> }
>


----------------------------------------------------------------------------
----


> /*
>  * The Apache Software License, Version 1.1
>  *
>  * Copyright (c) 2000 The Apache Software Foundation.  All rights
>  * reserved.
>  *
>  * Redistribution and use in source and binary forms, with or without
>  * modification, are permitted provided that the following conditions
>  * are met:
>  *
>  * 1. Redistributions of source code must retain the above copyright
>  *    notice, this list of conditions and the following disclaimer.
>  *
>  * 2. Redistributions in binary form must reproduce the above copyright
>  *    notice, this list of conditions and the following disclaimer in
>  *    the documentation and/or other materials provided with the
>  *    distribution.
>  *
>  * 3. The end-user documentation included with the redistribution, if
>  *    any, must include the following acknowlegement:
>  *       "This product includes software developed by the
>  *        Apache Software Foundation (http://www.apache.org/)."
>  *    Alternately, this acknowlegement may appear in the software itself,
>  *    if and wherever such third-party acknowlegements normally appear.
>  *
>  * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
>  *    Foundation" must not be used to endorse or promote products derived
>  *    from this software without prior written permission. For written
>  *    permission, please contact apache@apache.org.
>  *
>  * 5. Products derived from this software may not be called "Apache"
>  *    nor may "Apache" appear in their names without prior written
>  *    permission of the Apache Group.
>  *
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>  * SUCH DAMAGE.
>  * ====================================================================
>  *
>  * This software consists of voluntary contributions made by many
>  * individuals on behalf of the Apache Software Foundation.  For more
>  * information on the Apache Software Foundation, please see
>  * <http://www.apache.org/>.
>  */
>
> package org.apache.tools.ant.taskdefs.optional.javacc;
>
> import org.apache.tools.ant.BuildException;
> import org.apache.tools.ant.Project;
> import org.apache.tools.ant.Task;
> import org.apache.tools.ant.taskdefs.Execute;
> import org.apache.tools.ant.taskdefs.LogStreamHandler;
> import org.apache.tools.ant.types.Commandline;
> import org.apache.tools.ant.types.CommandlineJava;
> import org.apache.tools.ant.types.Path;
>
> import java.io.File;
> import java.io.IOException;
>
> /**
>  * Taskdef for the JJTree compiler compiler.
>  *
>  * @author Michael Saunders <a
href="mailto:michael@amtec.com">michael@amtec.com</a>
>  */
> public class JJTree extends Task {
>
>     private boolean buildNodeFiles  = true;
>     private boolean multi           = false;
>     private boolean nodeDefaultVoid = false;
>     private boolean nodeFactory     = false;
>     private boolean nodeScopeHook   = false;
>     private boolean nodeUsesParser  = false;
>     private boolean staticParser    = true;
>     private boolean visitor         = false;
>
>     private String nodePackage      = null;
>     private String visitorException = null;
>     private String nodePrefix       = "AST";
>
>     private File outputDirectory = null;
>     private File target          = null;
>     private File javaccHome      = null;
>
>     private CommandlineJava cmdl = new CommandlineJava();
>
>
>     public void setBuildnodefiles(boolean buildNodeFiles) {
>         this.buildNodeFiles = buildNodeFiles;
>     }
>
>     public void setMulti(boolean multi) {
>         this.multi = multi;
>     }
>
>     public void setNodedefaultvoid(boolean nodeDefaultVoid) {
>         this.nodeDefaultVoid = nodeDefaultVoid;
>     }
>
>     public void setNodefactory(boolean nodeFactory) {
>         this.nodeFactory = nodeFactory;
>     }
>
>     public void setNodescopehook(boolean nodeScopeHook) {
>         this.nodeScopeHook = nodeScopeHook;
>     }
>
>     public void setNodeusesparser(boolean nodeUsesParser) {
>         this.nodeUsesParser = nodeUsesParser;
>     }
>
>     public void setStatic(boolean staticParser) {
>         this.staticParser = staticParser;
>     }
>
>     public void setVisitor(boolean visitor) {
>         this.visitor = visitor;
>     }
>
>     public void setNodepackage(String nodePackage) {
>         this.nodePackage = nodePackage;
>     }
>
>     public void setVisitorException(String visitorException) {
>         this.visitorException = visitorException;
>     }
>
>     public void setNodeprefix(String nodePrefix) {
>         this.nodePrefix = nodePrefix;
>     }
>
>     public void setOutputdirectory(File outputDirectory) {
>         this.outputDirectory = outputDirectory;
>     }
>
>     public void setTarget(File target) {
>         this.target = target;
>     }
>
>     public void setJavacchome(File javaccHome) {
>         this.javaccHome = javaccHome;
>     }
>
>     public JJTree() {
>         cmdl.setVm("java");
>         cmdl.setClassname("COM.sun.labs.jjtree.Main");
>     }
>
>     public void execute() throws BuildException {
>
>         cmdl.createArgument().setValue("-BUILD_NODE_FILES:"
+buildNodeFiles);
>         cmdl.createArgument().setValue("-MULTI:"             +multi);
>         cmdl.createArgument().setValue("-NODE_DEFAULT_VOID:"
+nodeDefaultVoid);
>         cmdl.createArgument().setValue("-NODE_FACTORY:"
+nodeFactory);
>         cmdl.createArgument().setValue("-NODE_SCOPE_HOOK:"
+nodeScopeHook);
>         cmdl.createArgument().setValue("-NODE_USES_PARSER:"
+nodeUsesParser);
>         cmdl.createArgument().setValue("-STATIC:"
+staticParser);
>         cmdl.createArgument().setValue("-VISITOR:"           +visitor);
>
>         if (nodePackage != null) {
>             cmdl.createArgument().setValue("-NODE_PACKAGE:"+nodePackage);
>         }
>
>         if (visitorException != null) {
>
cmdl.createArgument().setValue("-VISITOR_EXCEPTION:"+visitorException);
>         }
>
>         if (nodePrefix != null) {
>             cmdl.createArgument().setValue("-NODE_PREFIX:"+nodePrefix);
>         }
>
>         if (outputDirectory != null) {
>             if (!outputDirectory.isDirectory()) {
>                 throw new BuildException("Outputdir not a directory.");
>             }
>             cmdl.createArgument().setValue(
>                 "-OUTPUT_DIRECTORY:"+outputDirectory.getAbsolutePath());
>         }
>
>         if (target == null || !target.isFile()) {
>             throw new BuildException("Invalid target: " + target);
>         }
>         final File javaFile = new File(
>             target.toString().substring(0,
target.toString().indexOf(".jjt")) + ".jj");
>         if (javaFile.exists() && target.lastModified() <
javaFile.lastModified()) {
>             project.log("Target is already built - skipping (" + target +
")");
>             return;
>         }
>         cmdl.createArgument().setValue(target.getAbsolutePath());
>
>         if (javaccHome == null || !javaccHome.isDirectory()) {
>             throw new BuildException("Javacchome not set.");
>         }
>         final Path classpath = cmdl.createClasspath(project);
>
classpath.createPathElement().setLocation(javaccHome.getAbsolutePath() +
>                                                   "/JavaCC.zip");
>
>         final Commandline.Argument arg = cmdl.createVmArgument();
>         arg.setValue("-mx140M");
>         arg.setValue("-Dinstall.root="+javaccHome.getAbsolutePath());
>
>         final Execute process =
>             new Execute(new LogStreamHandler(this,
>                                              Project.MSG_INFO,
>                                              Project.MSG_INFO),
>                         null);
>         log(cmdl.toString(), Project.MSG_VERBOSE);
>         process.setCommandline(cmdl.getCommandline());
>
>         try {
>             if (process.execute() != 0) {
>                 throw new BuildException("JJTree failed.");
>             }
>         }
>         catch (IOException e) {
>             throw new BuildException("Failed to launch JJTree: " + e);
>         }
>     }
> }
>


Mime
View raw message