Довольно так же, как ответ JS челкой, только вот полный SSCCE вы можете скомпилировать и запустить, и я показал, как можно „ярлык“ ваши жетоны и доступ к ним, чтобы поместить их в Перечислите mainRule возвращается. Также обратите внимание, что перед init
должен стоять знак @
(по крайней мере ANTLR v3 ожидает его).
grammar Test;
@parser::members {
public static void main(String[] args) throws Exception {
String text = "(a, bb , ccc)";
ANTLRStringStream in = new ANTLRStringStream(text);
TestLexer lexer = new TestLexer(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
System.out.println(new TestParser(tokens).mainRule());
}
}
mainRule returns [List<String> words]
@init{$words = new ArrayList<String>();}
: '(' w=WORD {$words.add($w.text);} (',' w=WORD {$words.add($w.text);})* ')'
;
WORD
: ('a'..'z'|'A'..'Z'|'0'..'9')+
;
WS
: ('\t' | ' ' | '\r' | '\n'| '\u000C')+ { $channel = HIDDEN; }
;
И потом:
[email protected]:~/Temp$ java -cp antlr-3.2.jar org.antlr.Tool Test.g
[email protected]:~/Temp$ javac -cp antlr-3.2.jar *.java
[email protected]:~/Temp$ java -cp .:antlr-3.2.jar TestParser
[a, bb, ccc]
[email protected]:~/Temp$
В Windows выше команды в значительной степени то же самое, только запустить TestParser
так:
java -cp .;antlr-3.2.jar TestParser
(есть точка с запятой вместо регулярная толстая кишка)
Вы упомянули, что несколько человек дали вам полезные ответы - как насчет голосования по этим вопросам? –