java.lang.ClassCastException: org.antlr.runtime.CommonToken не может быть приведен к antlr.Токен

#java #antlr #antlr3

#java #antlr #antlr3

Вопрос:

Я пытаюсь проверить сходство между двумя кодами, мне нужен идентификатор токенов из lexer, но я не знаю, почему я получаю эту ошибку:

 java.lang.ClassCastException: org.antlr.runtime.CommonToken cannot be cast to antlr.Token
  

Вот код:

 final CommonTokenStream tokens;
tokens = new CommonTokenStream();

tokens.setTokenSource(lexer);
tokens.LT(10); // force load

Antlr3JavaParser parser = new Antlr3JavaParser(tokens);
List tokenList = tokens.getTokens();
for (int i = 0; i < tokenList.size(); i  ) {
    Token t = (Token) tokenList.get(i);
}
  

Комментарии:

1. Существует ли org.antlr.runtime. Интерфейс токена? Возможно, попробуйте изменить импорт вашего токена на это.

Ответ №1:

org.antlr.runtime.CommonToken реализует org.antlr.runtime.Token и нет antlr.Token . Вам нужно импортировать org.antlr.runtime.Token .

Исключение возникает при преобразовании an org.antlr.runtime.CommonToken в an antlr.Token в Token t = (Token) tokenList.get(i);