如何为antlr指定目标包?

iezvtpos  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(377)

如果我打电话:

java org.antlr.Tool -o outdir sources/com/example/Java5.g

…使用antlr-3.1.3,解析器和lexer代码将在目录中生成 outdir/sources/com/example . 但是生成的类没有任何 package 声明。我需要他们在包裹里生活 com.example .
有没有办法指定目标包?

rt4zxlrg

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

    }
}
bttbmeg0

bttbmeg02#

一个老问题有一个完美的答案,但由于对这个问题的评论要求一个命令行选项(这是我到这里时实际上正在搜索的),我想我只是插嘴说下面的话。。。
如果您使用的是antlr4,那么可以在命令行上指定包。我检查了一下,似乎在版本3中没有,所以另一个答案是antlr3的方法。
举个例子:

java -cp antlr-4.4-complete.jar org.antlr.v4.Tool -package my.package MyGram.g4

看到了吗 -package 有关详细信息,请参见antlr工具命令行选项。

相关问题