JJTree

説明

JavaCCコンパイラコンパイラのJJTreeプリプロセッサを呼び出します。生成されたJavaCCソースの様々な場所に、構文木構築アクションを挿入します。JJTreeの出力はJavaCCを通して実行され、パーサが作成されます。

jjtreeタスクを使用するには、処理するJJTree文法ファイルの名前にtarget属性を設定します。AntがJavaCCクラスを見つけられるように、javacchome属性を使用してJavaCCインストールを含むディレクトリを指定する必要があります。オプションとして、生成されたJavaCC文法ファイルとノードファイルを特定のディレクトリに書き込むためにoutputdirectoryを設定することもできます。設定しない場合、jjtreeは生成されたJavaCC文法ファイルとノードファイルをJJTree文法ファイルを含むディレクトリに書き込みます。追加オプションとして、生成されたJavaCC文法ファイルを特定の(ディレクトリと)ファイルに書き込むためにoutputfileを設定することもできます。設定しない場合、jjtreeは生成されたJavaCC文法ファイルを、サフィックス.jjを付けたJJTree文法ファイルとして書き込みます。

このタスクは、文法ファイルが生成されたJavaCCファイルよりも新しい場合にのみJJTreeを呼び出します。

パラメータ

属性 説明 必須
target 処理するJJTree文法ファイル。 はい
javacchome JavaCC配布物を含むディレクトリ。 はい
outputdirectory 生成されたJavaCC文法ファイルとノードファイルを書き込むディレクトリ。設定しない場合、ファイルは文法ファイルを含むディレクトリに書き込まれます。 いいえ
outputfile 生成されたJavaCC文法ファイルを書き込むファイル。設定しない場合、ファイルはサフィックス.jjを付けたJJTree文法ファイルと同じ名前で書き込まれます。outputdirectoryが指定されている場合はそのディレクトリに対する、そうでない場合はプロジェクトのbasedirに対する相対ファイル名となります。 いいえ
buildnodefiles BUILD_NODE_FILES文法オプションを設定します。これはブール値オプションです。 いいえ
multi MULTI文法オプションを設定します。これはブール値オプションです。 いいえ
nodedefaultvoid NODE_DEFAULT_VOID文法オプションを設定します。これはブール値オプションです。 いいえ
nodefactory NODE_FACTORY文法オプションを設定します。これはブール値オプションです。 いいえ
nodescopehook NODE_SCOPE_HOOK文法オプションを設定します。これはブール値オプションです。 いいえ
nodeusesparser NODE_USES_PARSER文法オプションを設定します。これはブール値オプションです。 いいえ
static STATIC文法オプションを設定します。これはブール値オプションです。 いいえ
visitor VISITOR文法オプションを設定します。これはブール値オプションです。 いいえ
nodepackage NODE_PACKAGE文法オプションを設定します。これは文字列オプションです。 いいえ
visitorexception VISITOR_EXCEPTION文法オプションを設定します。これは文字列オプションです。 いいえ
nodeprefix NODE_PREFIX文法オプションを設定します。これは文字列オプションです。 いいえ
maxmemory フォークされたJVMに割り当てる最大メモリ量。Ant 1.8.3以降 いいえ

文法ファイルsrc/Parser.jjtでJJTreeを呼び出し、生成された文法ファイルParser.jjbuild/srcに書き込みます。JJTreeを呼び出す際に、文法オプションNODE_USES_PARSERをtrueに設定します。

<jjtree target="src/Parser.jjt"
        outputdirectory="build/src"
        javacchome="c:/program files/JavaCC"
        nodeusesparser="true"/>

コマンドラインJJTreeと異なるAnt taskdef バージョン間の出力場所の比較

コマンドラインJJTreeオプション生成されたファイル(作業ディレクトリ:/tmp) Ant 1.5.3 対 コマンドライン Ant 1.6 対 コマンドライン
jjtree  grammar.jjt
    /tmp/grammar.jj
    /tmp/<generated>.java
同じ 同じ
jjtree  relative/grammar.jjt
    /tmp/grammar.jj
    /tmp/<generated>.java
/tmp/relative/grammar.jj
/tmp/relative/<generated>.java
同じ
jjtree /tmp/absolute/grammar.jjt
    /tmp/grammar.jj
    /tmp/<generated>.java
/tmp/absolute/grammar.jj
/tmp/absolute/<generated>.java
同じ
jjtree -OUTPUT_DIRECTORY:relative grammar.jjt
    /tmp/relative/grammar.jj
    /tmp/relative/<generated>.java
同じ 同じ
jjtree -OUTPUT_DIRECTORY:relative relative/grammar.jjt
    /tmp/relative/grammar.jj
    /tmp/relative/<generated>.java
同じ 同じ
jjtree -OUTPUT_DIRECTORY:relative /tmp/absolute/grammar.jjt
    /tmp/relative/grammar.jj
    /tmp/relative/<generated>.java
同じ 同じ
jjtree -OUTPUT_DIRECTORY:/tmp/absolute/ grammar.jjt
    /tmp/absolute/grammar.jj
    /tmp/absolute/<generated>.java
同じ 同じ
jjtree -OUTPUT_DIRECTORY:/tmp/absolute/ relative/grammar.jjt
    /tmp/absolute/grammar.jj
    /tmp/absolute/<generated>.java
同じ 同じ
jjtree -OUTPUT_DIRECTORY:/tmp/absolute/ /tmp/absolute/grammar.jjt
    /tmp/absolute/grammar.jj
    /tmp/absolute/<generated>.java
同じ 同じ
jjtree -OUTPUT_FILE:output.jj grammar.jjt
    /tmp/output.jj
    /tmp/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:output.jj relative/grammar.jjt
    /tmp/output.jj
    /tmp/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:output.jj /tmp/absolute/grammar.jjt
    /tmp/output.jj
    /tmp/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:output.jj -OUTPUT_DIRECTORY:relative grammar.jjt
    /tmp/relative/output.jj
    /tmp/relative/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:output.jj -OUTPUT_DIRECTORY:relative relative/grammar.jjt
    /tmp/relative/output.jj
    /tmp/relative/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:output.jj -OUTPUT_DIRECTORY:relative /tmp/absolute/grammar.jjt
    /tmp/relative/output.jj
    /tmp/relative/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ grammar.jjt
    /tmp/absolute/output.jj
    /tmp/absolute/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ relative/grammar.jjt
    /tmp/absolute/output.jj
    /tmp/absolute/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ /tmp/absolute/grammar.jjt
    /tmp/absolute/output.jj
    /tmp/absolute/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:subdir/output.jj grammar.jjt
    /tmp/subdir/output.jj
    /tmp/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:subdir/output.jj relative/grammar.jjt
    /tmp/subdir/output.jj
    /tmp/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:subdir/output.jj /tmp/absolute/grammar.jjt
    /tmp/subdir/output.jj
    /tmp/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:subdir/output.jj -OUTPUT_DIRECTORY:relative grammar.jjt
    /tmp/relative/subdir/output.jj
    /tmp/relative/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:subdir/output.jj -OUTPUT_DIRECTORY:relative relative/grammar.jjt
    /tmp/relative/subdir/output.jj
    /tmp/relative/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:subdir/output.jj -OUTPUT_DIRECTORY:relative /tmp/absolute/grammar.jjt
    /tmp/relative/subdir/output.jj
    /tmp/relative/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:subdir/output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ grammar.jjt
    /tmp/absolute/subdir/output.jj
    /tmp/absolute/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:subdir/output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ relative/grammar.jjt
    /tmp/absolute/subdir/output.jj
    /tmp/absolute/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:subdir/output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ /tmp/absolute/grammar.jjt
    /tmp/absolute/subdir/output.jj
    /tmp/absolute/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:/tmp/subdir/output.jj grammar.jjt
    /tmp/subdir/output.jj
    /tmp/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:/tmp/subdir/output.jj relative/grammar.jjt
    /tmp/subdir/output.jj
    /tmp/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:/tmp/subdir/output.jj /tmp/absolute/grammar.jjt
    /tmp/subdir/output.jj
    /tmp/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:D:/tmp/subdir/output.jj grammar.jjt
    /tmp/subdir/output.jj
    /tmp/<generated>.java
サポートされていません サポートされていません*
jjtree -OUTPUT_FILE:D:/tmp/subdir/output.jj relative/grammar.jjt
    /tmp/subdir/output.jj
    /tmp/<generated>.java
サポートされていません サポートされていません*
jjtree -OUTPUT_FILE:D:/tmp/subdir/output.jj /tmp/absolute/grammar.jjt
    /tmp/subdir/output.jj
    /tmp/<generated>.java
サポートされていません サポートされていません*
jjtree -OUTPUT_FILE:/tmp/subdir/output.jj -OUTPUT_DIRECTORY:relative grammar.jjt
    /tmp/relative/tmp/subdir/output.jj
    /tmp/relative/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:/tmp/subdir/output.jj -OUTPUT_DIRECTORY:relative relative/grammar.jjt
    /tmp/relative/tmp/subdir/output.jj
    /tmp/relative/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:/tmp/subdir/output.jj -OUTPUT_DIRECTORY:relative /tmp/absolute/grammar.jjt
    /tmp/relative/tmp/subdir/output.jj
    /tmp/relative/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:/tmp/subdir/output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ grammar.jjt
    /tmp/absolute/tmp/subdir/output.jj
    /tmp/absolute/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:/tmp/subdir/output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ relative/grammar.jjt
    /tmp/absolute/tmp/subdir/output.jj
    /tmp/absolute/<generated>.java
サポートされていません 同じ
jjtree -OUTPUT_FILE:/tmp/subdir/output.jj -OUTPUT_DIRECTORY:/tmp/absolute/ /tmp/absolute/grammar.jjt
    /tmp/absolute/tmp/subdir/output.jj
    /tmp/absolute/<generated>.java
サポートされていません 同じ

注記:Ant taskdef jjtreeでJJTreeを実行する場合、プロジェクトのbasedirとAntの作業ディレクトリが異なる可能性があるため、オプション-OUTPUT_DIRECTORYを常に設定する必要があります。そのため、taskdef jjtreeoutputdirectoryを指定しない場合でも、JJTreeは-OUTPUT_DIRECTORYがプロジェクトのbasedirに設定されて呼び出されます。しかし、-OUTPUT_DIRECTORYが設定されている場合、-OUTPUT_FILEの設定は、この-OUTPUT_DIRECTORYを基準とした相対パスとして扱われます。したがって、-OUTPUT_FILEが絶対パスであるか、ドライブ文字を含む場合、問題が発生します。そのため、絶対的なoutputfileoutputdirectoryが指定されていない場合)はデフォルトディレクトリに対する相対パスになります。このため、ドライブ文字を含むoutputfileはサポートできません。

ちなみに:-OUTPUT_DIRECTORYが設定されている場合に-OUTPUT_FILEにドライブ文字を指定すると、コマンドラインからJJTreeを実行した場合にも、予期しない動作が発生します。