|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512 |
- <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
- <html>
- <head>
- <meta http-equiv="Content-Language" content="en-us">
- <link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
- <title>JJTree Task</title>
- </head>
- <body>
-
- <h2 id="jjtree">JJTree</h2>
-
- <h3>Description</h3>
- <p>Invokes the <a href="https://javacc.org/">JJTree</a> preprocessor for the JavaCC compiler
- compiler. It inserts parse tree building actions at various places in the JavaCC source that it
- generates. The output of JJTree is run through JavaCC to create the parser.</p>
- <p>To use the <code>jjtree</code> task, set the <var>target</var> attribute to the name of the
- JJTree grammar file to process. You also need to specify the directory containing the JavaCC
- installation using the <var>javacchome</var> attribute, so that Ant can find the JavaCC
- classes. Optionally, you can also set the <var>outputdirectory</var> to write the generated JavaCC
- grammar and node files to a specific directory. Otherwise <code>jjtree</code> 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 <var>outputfile</var> to write the generated JavaCC grammar file to a
- specific (directory and) file. Otherwise <code>jjtree</code> writes the generated JavaCC grammar
- file as the JJTree grammar file with a suffix <samp>.jj</samp>.</p>
- <p>This task only invokes JJTree if the grammar file is newer than the generated JavaCC file.</p>
-
- <h3>Parameters</h3>
-
- <table class="attr">
- <tr>
- <th>Attribute</th>
- <th>Description</th>
- <th>Required</th>
- </tr>
-
- <tr>
- <td>target</td>
- <td>The JJTree grammar file to process.</td>
- <td>Yes</td>
- </tr>
-
- <tr>
- <td>javacchome</td>
- <td>The directory containing the JavaCC distribution.</td>
- <td>Yes</td>
- </tr>
-
- <tr>
- <td>outputdirectory</td>
- <td>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>No</td>
- </tr>
-
- <tr>
- <td>outputfile</td>
- <td>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 <code>.jj</code>. This is a
- filename relative to <var>outputdirectory</var> if specified, the project's basedir.</td>
- <td>No</td>
- </tr>
-
- <tr>
- <td>buildnodefiles</td>
- <td>Sets the BUILD_NODE_FILES grammar option. This is a boolean option.</td>
- <td>No</td>
- </tr>
-
- <tr>
- <td>multi</td>
- <td>Sets the MULTI grammar option. This is a boolean option.</td>
- <td>No</td>
- </tr>
-
- <tr>
- <td>nodedefaultvoid</td>
- <td>Sets the NODE_DEFAULT_VOID grammar option. This is a boolean option.</td>
- <td>No</td>
- </tr>
-
- <tr>
- <td>nodefactory</td>
- <td>Sets the NODE_FACTORY grammar option. This is boolean option.</td>
- <td>No</td>
- </tr>
-
- <tr>
- <td>nodescopehook</td>
- <td>Sets the NODE_SCOPE_HOOK grammar option. This is a boolean option.</td>
- <td>No</td>
- </tr>
-
- <tr>
- <td>nodeusesparser</td>
- <td>Sets the NODE_USES_PARSER grammar option. This is a boolean option.</td>
- <td>No</td>
- </tr>
-
- <tr>
- <td>static</td>
- <td>Sets the STATIC grammar option. This is a boolean option.</td>
- <td>No</td>
- </tr>
-
- <tr>
- <td>visitor</td>
- <td>Sets the VISITOR grammar option. This is a boolean option.</td>
- <td>No</td>
- </tr>
-
- <tr>
- <td>nodepackage</td>
- <td>Sets the NODE_PACKAGE grammar option. This is a string option.</td>
- <td>No</td>
- </tr>
-
- <tr>
- <td>visitorexception</td>
- <td>Sets the VISITOR_EXCEPTION grammar option. This is a string option.</td>
- <td>No</td>
- </tr>
-
- <tr>
- <td>nodeprefix</td>
- <td>Sets the NODE_PREFIX grammar option. This is a string option.</td>
- <td>No</td>
- </tr>
-
- <tr>
- <td>maxmemory</td>
- <td>Max amount of memory to allocate to the forked JVM. <em>since Ant 1.8.3</em></td>
- <td>No</td>
- </tr>
- </table>
-
- <h3>Example</h3>
-
- <pre>
- <jjtree target="src/Parser.jjt"
- outputdirectory="build/src"
- javacchome="c:/program files/JavaCC"
- nodeusesparser="true"/></pre>
-
- <p>This invokes JJTree on grammar file <samp>src/Parser.jjt</samp>, writing the generated grammar
- file, <samp>Parser.jj</samp>, file to <samp>build/src</samp>. The grammar option NODE_USES_PARSER is
- set to <q>true</q> when invoking JJTree.</p>
-
- <h3>Comparison output locations between command line JJTree and different Ant <code>taskdef</code>
- versions</h3>
-
- <table>
- <thead class="no-bold">
- <tr>
- <th><strong>Command line JJTree options</strong> and <em>generated files</em> (working directory: <samp>/tmp</samp>)</th>
- <th><strong>Ant 1.5.3</strong> versus command line</th>
- <th><strong>Ant 1.6</strong> versus command line</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><pre><b>jjtree grammar.jjt</b>
- /tmp/grammar.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Same</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree relative/grammar.jjt</b>
- /tmp/grammar.jj
- /tmp/<generated>.java</pre>
- </td>
- <td><pre>
- /tmp/relative/grammar.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree /tmp/absolute/grammar.jjt</b>
- /tmp/grammar.jj
- /tmp/<generated>.java</pre>
- </td>
- <td><pre>
- /tmp/absolute/grammar.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_DIRECTORY:relative grammar.jjt</b>
- /tmp/relative/grammar.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Same</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_DIRECTORY:relative relative/grammar.jjt</b>
- /tmp/relative/grammar.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Same</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_DIRECTORY:relative /tmp/absolute/grammar.jjt</b>
- /tmp/relative/grammar.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Same</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_DIRECTORY:/tmp/absolute/ grammar.jjt</b>
- /tmp/absolute/grammar.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Same</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_DIRECTORY:/tmp/absolute/ relative/grammar.jjt</b>
- /tmp/absolute/grammar.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Same</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_DIRECTORY:/tmp/absolute/ /tmp/absolute/grammar.jjt</b>
- /tmp/absolute/grammar.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Same</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:output.jj grammar.jjt</b>
- /tmp/output.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:output.jj relative/grammar.jjt</b>
- /tmp/output.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:output.jj /tmp/absolute/grammar.jjt</b>
- /tmp/output.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:output.jj -OUTPUT_DIRECTORY:relative grammar.jjt</b>
- /tmp/relative/output.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:output.jj -OUTPUT_DIRECTORY:relative relative/grammar.jjt</b>
- /tmp/relative/output.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:output.jj -OUTPUT_DIRECTORY:relative /tmp/absolute/grammar.jjt</b>
- /tmp/relative/output.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ grammar.jjt</b>
- /tmp/absolute/output.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ relative/grammar.jjt</b>
- /tmp/absolute/output.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ /tmp/absolute/grammar.jjt</b>
- /tmp/absolute/output.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:subdir/output.jj grammar.jjt</b>
- /tmp/subdir/output.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:subdir/output.jj relative/grammar.jjt</b>
- /tmp/subdir/output.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:subdir/output.jj /tmp/absolute/grammar.jjt</b>
- /tmp/subdir/output.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:subdir/output.jj -OUTPUT_DIRECTORY:relative grammar.jjt</b>
- /tmp/relative/subdir/output.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:subdir/output.jj -OUTPUT_DIRECTORY:relative relative/grammar.jjt</b>
- /tmp/relative/subdir/output.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:subdir/output.jj -OUTPUT_DIRECTORY:relative /tmp/absolute/grammar.jjt</b>
- /tmp/relative/subdir/output.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:subdir/output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ grammar.jjt</b>
- /tmp/absolute/subdir/output.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:subdir/output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ relative/grammar.jjt</b>
- /tmp/absolute/subdir/output.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:subdir/output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ /tmp/absolute/grammar.jjt</b>
- /tmp/absolute/subdir/output.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:/tmp/subdir/output.jj grammar.jjt</b>
- /tmp/subdir/output.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:/tmp/subdir/output.jj relative/grammar.jjt</b>
- /tmp/subdir/output.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:/tmp/subdir/output.jj /tmp/absolute/grammar.jjt</b>
- /tmp/subdir/output.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:<i>D:</i>/tmp/subdir/output.jj grammar.jjt</b>
- /tmp/subdir/output.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Not Supported *)</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:<i>D:</i>/tmp/subdir/output.jj relative/grammar.jjt</b>
- /tmp/subdir/output.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Not Supported *)</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:<i>D:</i>/tmp/subdir/output.jj /tmp/absolute/grammar.jjt</b>
- /tmp/subdir/output.jj
- /tmp/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Not Supported *)</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:/tmp/subdir/output.jj -OUTPUT_DIRECTORY:relative grammar.jjt</b>
- /tmp/relative/tmp/subdir/output.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:/tmp/subdir/output.jj -OUTPUT_DIRECTORY:relative relative/grammar.jjt</b>
- /tmp/relative/tmp/subdir/output.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:/tmp/subdir/output.jj -OUTPUT_DIRECTORY:relative /tmp/absolute/grammar.jjt</b>
- /tmp/relative/tmp/subdir/output.jj
- /tmp/relative/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:/tmp/subdir/output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ grammar.jjt</b>
- /tmp/absolute/tmp/subdir/output.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:/tmp/subdir/output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ relative/grammar.jjt</b>
- /tmp/absolute/tmp/subdir/output.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- <tr>
- <td><pre><b>jjtree -OUTPUT_FILE:/tmp/subdir/output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ /tmp/absolute/grammar.jjt</b>
- /tmp/absolute/tmp/subdir/output.jj
- /tmp/absolute/<generated>.java</pre>
- </td>
- <td>Not Supported</td>
- <td>Same</td>
- </tr>
- </tbody>
- </table>
-
- <p>*) <strong>Footnote</strong>: When running JJTree with the Ant <code>taskdef jjtree</code> the
- option <code>-OUTPUT_DIRECTORY</code> must always be set, because the project's <var>basedir</var>
- and the Ant working directory might differ. So even if you don't specify
- the <var>outputdirectory</var> for <code>taskdef jjtree</code>, JJTree will be called with
- the <code>-OUTPUT_DIRECTORY</code> set to the project's <var>basedir</var>. But when
- the <code>-OUTPUT_DIRECTORY</code> is set, the <code>-OUTPUT_FILE</code> setting is handled as if
- relative to this <code>-OUTPUT_DIRECTORY</code>. Thus when the <code>-OUTPUT_FILE</code> is absolute
- or contains a drive letter we have a problem. Therefore absolute <var>outputfile</var>s (when
- the <var>outputdirectory</var> isn't specified) are made relative to the default directory. And for
- this reason <var>outputfile</var>s that contain a drive letter can't be supported.</p>
-
- <p>By the way: specifying a drive letter in the <code>-OUTPUT_FILE</code> when
- the <code>-OUTPUT_DIRECTORY</code> is set, also results in strange behavior when running JJTree from
- the command line.</p>
-
- </body>
- </html>
|