如何为 ANTLR 指定目标包?

2022-08-31 20:51:41

如果我打电话给:

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

...使用 antlr-3.1.3,解析器和词法分析器代码将在 目录中生成。但生成的类没有任何语句。我需要它们生活在包装中。outdir/sources/com/examplepackagecom.example

有没有办法指定目标包?


答案 1

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

    }
}

答案 2

一个古老的问题,有一个非常好的答案,但是由于对这个问题的评论要求一个命令行选项(这就是我到达这里时实际上正在寻找的),我想我只是插话并说以下几句话......

如果您使用的是 ANTLR 4,则可以在命令行上指定程序包。我检查了一下,它似乎在版本3中不存在,所以另一个答案是ANTLR 3的方式。

下面是一个示例:

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

有关详细信息,请参阅 ANTLR 工具命令行选项中的选项-package


推荐