调用 JJTree 预处理器用于 JavaCC 编译器编译器。它在生成的 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 的文件名(如果指定),否则是项目的基目录。 |
否 |
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 时出现奇怪的行为。