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+;
...