antlr3ide генерирует парсеры и лексеры без информации о пакете?

Похоже, что antlr3ide генерирует файлы парсера и лексера без информации о пакете, в котором находятся файлы java (например, пакет tour.trees; здесь папка с относительным путем tour/trees содержит соответствующие файлы). ExprParser.java а также ExprLexer.java).

Официальный форум кажется немного неактивным, и документация мне не сильно помогает:(

Ниже приведен пример файла грамматики Expr.g:

grammar Expr;

options {
  language = Java;
}


prog : stat+;

stat : expr NEWLINE
     | ID '=' expr NEWLINE
     | NEWLINE
     ;

expr: multiExpr (('+'|'-') multiExpr)*
    ;

multiExpr : atom('*' atom)*
    ;

atom : INT
     | ID
     | '(' expr ')'
     ;

ID : ('a'..'z'|'A'..'Z')+ ;
INT : '0'..'9'+;
NEWLINE : '\r'?'\n';
WS : (' '|'\t'|'\n'|'\r')+{skip();};

1 ответ

Решение

Объявление пакета не является чем-то, что генерирует antlrv3ide. Это сделано ANTLR. Чтобы ANTLR генерировал исходные файлы в пакете tour.trees, добавлять @header блоки, содержащие объявления пакета в вашем файле грамматики, например:

grammar Expr;

options {
  language = Java;
}

// placed _after_ the `options`-block!    
@parser::header { package tour.trees; }
@lexer::header { package tour.trees; }

prog : stat+;

...
Другие вопросы по тегам