2009-10-31 15 views
38

Gdybym zadzwonić:Jak określić pakiet docelowy dla ANTLR?

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

... z antlr-3.1.3 parsera i lexer kod zostanie wygenerowany w katalogu outdir/sources/com/example. Ale wygenerowane klasy nie mają żadnego oświadczenia package. Potrzebuję ich do życia w pakiecie com.example.

Czy istnieje sposób określenia pakietu docelowego?

+0

Jestem pewien, że istnieje. Sprawdzę to w poniedziałek;) – Jorn

+0

Na http://www.jguru.com/faq/view.jsp?EID=16185 wyjaśniono, jak umieścić pakiet wewnątrz gramatyki. Ale czy istnieje sposób na określenie go jako parametru wiersza poleceń? – tangens

Odpowiedz

56

ANTLR udostępnia narzędzie nagłówkowe, które umożliwia dołączenie pakietu i importu. Dołączyć to w pliku * .g Gramatyka:

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

A może trzeba go w Lexer także:

@lexer::header {package org.xmlcml.cml.converters.antlr;} 

aw przypadku trzeba dodać kilka członków i kod:

@members { 
    HashMap<String, Object> objectMap = new HashMap<String, Object>(); 
    //... 

    private void addArrayValue(String content) { 
    //... code required by snippets in the grammar 

    } 
} 
+2

Dzięki za informację o członkach i kodzie, nawet jeśli nie poprosił o to. +1 –

22

Stare pytanie z doskonale trafną odpowiedzią, ale ponieważ komentarz na pytanie poprosił o opcję linii poleceń (i tego właśnie szukałem, kiedy tu dotarłem), pomyślałem, że po prostu zadzwonię w i powiedzieć fol ryk ...

Można specifiy pakietu w linii poleceń, jeśli używasz ANTLR 4. I checked i wydaje się nie być tam w wersji 3 więc other odpowiedź jest droga dla ANTLR 3.

Oto przykład:

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

Zobacz opcję w ANTLR Tool Command Line Options-package aby uzyskać więcej informacji.

+1

"Dokumentacja opcji wiersza poleceń narzędzia ANTLR" wymaga dostępu do poświadczeń. Oto otwarta dokumentacja antlr4: https://github.com/antlr/antlr4/blob/master/doc/index.md – EFreak

+0

Opcje wiersza poleceń narzędzia ANTLR: https://github.com/antlr/antlr4/blob/master /doc/tool-options.md – EFreak

+0

Dzięki @EFreak - dostosowałem link w pytaniu do twojej sugestii: – kmp