Я хочу получить все токены из моего анализатора, а затем я хочу отфильтровать вывод, получив список AST (myAST):
ANTLRStringStream stream = new ANTLRStringStream("P + 1 + F(A + 3)");
MyLexer lexer = new MyLexer (stream);
MyParser parser = new MyParser(new CommonTokenStream(lexer));
LanguajeTreeAdaptor treeAdaptor = new LanguajeTreeAdaptor();
parser.setTreeAdaptor(treeAdaptor);
У меня есть TreeAdaptor для моего языка:
public class LanguajeTreeAdaptor extends CommonTreeAdaptor{
public LanguajeTreeAdaptor(){
super();
}
@Override
public Object create(Token payload) {
if(payload == null)
return super.create(payload);
switch(payload.getType()){
case EtesGrammarParser.ID:
return new IdAST(payload);
..........
}
return super.create(payload);
}
Вот некоторые правила моей грамматики:
program
: expression EOF!
;
expression
: exprFinal
;
exprFinal: exprFuncCall | ID | INT | DOUBLE | STRING | exprParenthesis;
exprFuncCall : ID LPARENT exprList RPARENT -> ^(FUNC_CALL ID exprList);
Итак, P, F и A - это Id в моих правилах, я пытаюсь использовать этот код:
TokenStream input = parser.getTokenStream();
TokenSource tSource = input.getTokenSource();
Token currentToken = tSource.nextToken();
while(currentToken != null){
System.out.println(currentToken.getText());
currentToken = tSource.nextToken();
}
но я хочу обработать только IdAST (моя идея),
while(currentToken != null){
if(currentToken instanceof IdAST){
//call to another method to process the Id
}
System.out.println(currentToken.getText());
currentToken = tSource.nextToken();
}
Я не могу этого сделать, потому что currentToken - это CommonToken, как я могу получить только этот Id ?.Я работаю с antlr 3 С уважением Зинов