呼叫 JavaCC 編譯器編譯器的 JJTree 預處理器。它會在 JavaCC 產生的來源中插入解析樹建立動作。JJTree 的輸出會透過 JavaCC 執行,以建立剖析器。
若要使用 jjtree
任務,請將 target 屬性設定為要處理的 JJTree 語法檔名稱。您也需要使用 javacchome 屬性指定包含 JavaCC 安裝的目錄,以便 Ant 能找到 JavaCC 類別。此外,您也可以設定 outputdirectory,將產生的 JavaCC 語法和節點檔寫入特定目錄。否則,jjtree
會將產生的 JavaCC 語法和節點檔寫入包含 JJTree 語法檔的目錄。作為額外選項,您也可以設定 outputfile,將產生的 JavaCC 語法檔寫入特定(目錄和)檔案。否則,jjtree
會將產生的 JavaCC 語法檔寫入 JJTree 語法檔,並加上 .jj 字尾。
此任務只會在語法檔較產生的 JavaCC 檔新時呼叫 JJTree。
屬性 | 說明 | 必要 |
---|---|---|
target | 要處理的 JJTree 語法檔。 | 是 |
javacchome | 包含 JavaCC 發行版的目錄。 | 是 |
outputdirectory | 將產生的 JavaCC 語法和節點檔寫入的目錄。如果未設定,則會將檔案寫入包含語法檔的目錄。 | 否 |
outputfile | 將產生的 JavaCC 語法檔寫入的檔案。如果未設定,則會將檔案寫入與 JJTree 語法檔同名的檔案,但加上 .jj 字尾。這是相對於 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.jj 寫入 build/src。在呼叫 JJTree 時,語法選項 NODE_USES_PARSER 設為 true
。
<jjtree target="src/Parser.jjt" outputdirectory="build/src" javacchome="c:/program files/JavaCC" nodeusesparser="true"/>
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 時,選項 -OUTPUT_DIRECTORY 必須永遠設定,因為專案的 basedir 和 Ant 工作目錄可能不同。因此,即使您未為 taskdef jjtree
指定 outputdirectory,JJTree 也會以 -OUTPUT_DIRECTORY 設為專案的 basedir 來呼叫。但是,當設定 -OUTPUT_DIRECTORY 時,-OUTPUT_FILE 設定會處理為相對於此 -OUTPUT_DIRECTORY。因此,當 -OUTPUT_FILE 為絕對路徑或包含磁碟機代號時,我們會遇到問題。因此,絕對 outputfile(當未指定 outputdirectory 時)會相對於預設目錄。因此,包含磁碟機代號的 outputfile 無法支援。
順便一提:當設定 -OUTPUT_DIRECTORY 時,在 -OUTPUT_FILE 中指定磁碟機代號,在從命令列執行 JJTree 時也會導致奇怪的行為。