如果我打电话:
java org.antlr.Tool -o outdir sources/com/example/Java5.g
…使用antlr-3.1.3,解析器和lexer代码将在目录中生成 outdir/sources/com/example . 但是生成的类没有任何 package 声明。我需要他们在包裹里生活 com.example .有没有办法指定目标包?
outdir/sources/com/example
package
com.example
rt4zxlrg1#
antlr提供了一个头工具,允许您包含包和导入。将其包含在*.g语法文件中:
@header { package org.xmlcml.cml.converters.antlr; import java.util.HashMap; }
你可能也需要它在lexer里:
@lexer::header {package org.xmlcml.cml.converters.antlr;}
如果您需要添加一些成员和代码:
@members { HashMap<String, Object> objectMap = new HashMap<String, Object>(); //... private void addArrayValue(String content) { //... code required by snippets in the grammar } }
bttbmeg02#
一个老问题有一个完美的答案,但由于对这个问题的评论要求一个命令行选项(这是我到这里时实际上正在搜索的),我想我只是插嘴说下面的话。。。如果您使用的是antlr4,那么可以在命令行上指定包。我检查了一下,似乎在版本3中没有,所以另一个答案是antlr3的方法。举个例子:
java -cp antlr-4.4-complete.jar org.antlr.v4.Tool -package my.package MyGram.g4
看到了吗 -package 有关详细信息,请参见antlr工具命令行选项。
-package
2条答案
按热度按时间rt4zxlrg1#
antlr提供了一个头工具,允许您包含包和导入。将其包含在*.g语法文件中:
你可能也需要它在lexer里:
如果您需要添加一些成员和代码:
bttbmeg02#
一个老问题有一个完美的答案,但由于对这个问题的评论要求一个命令行选项(这是我到这里时实际上正在搜索的),我想我只是插嘴说下面的话。。。
如果您使用的是antlr4,那么可以在命令行上指定包。我检查了一下,似乎在版本3中没有,所以另一个答案是antlr3的方法。
举个例子:
看到了吗
-package
有关详细信息,请参见antlr工具命令行选项。