2009-10-31 30 views
38

如果我稱之爲:如何爲ANTLR指定目標包?

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

...與ANTLR-3.1.3解析器和詞法分析器的代碼將在目錄outdir/sources/com/example產生。但是生成的類沒有任何package陳述。我需要他們去生活在包com.example

有沒有辦法指定目標包?

+0

我確定有。我會在星期一上班的時候查看它;) – Jorn 2009-10-31 23:01:51

+0

在http://www.jguru.com/faq/view.jsp?EID=16185上,他們解釋瞭如何在程序包內嵌入語法。但有沒有辦法將它指定爲命令行參數? – tangens 2009-10-31 23:17:21

回答

56

ANTLR提供了一個標題工具,它允許您包含包和導入。您這包括在* .G語法文件:

@header { 
    package org.xmlcml.cml.converters.antlr; 
    import java.util.HashMap; 
} 

,您可能需要它在詞法分析器,以及:

@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

感謝您投入了關於成員和代碼的信息,即使他沒有要求。 +1 – 2011-07-28 13:55:26

22

一個老問題,答案很完美,但是因爲對這個問題的評論問了一個命令行選項(當我到這裏的時候我就是這麼想的),我以爲我只是在提示在和說fol降脂...

你,如果你正在使用ANTLR 4.我checked,可以指定命令行上的包,好像在3版本,不應該存在這樣的other答案是去ANTLR 3

方式

下面是一個例子:

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

看到ANTLR Tool Command Line Options-package選項以獲取更多信息。

+1

「ANTLR工具命令行選項」文檔需要憑據才能訪問。下面是一個antlr4的開放文檔:https://github.com/antlr/antlr4/blob/master/doc/index.md – EFreak 2016-03-18 21:11:08

+0

ANTLR工具命令行選項:https://github.com/antlr/antlr4/blob/master /doc/tool-options.md – EFreak 2016-03-18 21:12:11

+0

謝謝@EFreak - 我將問題中的鏈接調整爲您的建議 – kmp 2016-03-20 15:13:59