Почему два парсера ANLTR по-разному интерпретируют одну и ту же строку?
У меня есть следующая грамматика ANTLR:
grammar Tasks;
options {
language = Java;
}
tokens {
TODO = 'TODO';
}
plan : block;
block: '(' TODO ( TODO | block )* ')';
WS : ( ' ' | '\t' | '\r' | '\n' | '\v' ) { $channel = HIDDEN; } ;
Я и следующая строка:
(ТОДО (TODO TODO (ТОДО) ТОДО))
Он успешно анализируется синтаксическим анализатором, сгенерированным ANTRL из грамматики, например, с использованием следующей демонстрации:
import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CommonTokenStream;
public class ANTLRDemo {
public static void main(String[] args) throws Exception {
ANTLRStringStream in = new ANTLRStringStream("(TODO (TODO TODO (TODO) TODO))");
TasksLexer lexer = new TasksLexer(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
TasksParser parser = new TasksParser(tokens);
parser.block();
}
}
Однако плагин Eclipse ANTLR IDE Tools 2.1.1 возвращает ошибку при интерпретации той же строки:
MismatchedTokenException: строка 1:6 несоответствующий ввод '(' ожидающий '\u0007'
Что может быть причиной этого несоответствия между обеими программами?
1 ответ
Решение
Что может быть причиной этого несоответствия между обеими программами?
Интерпретатор глючит: в вашей грамматике нет ничего плохого.