Почему два парсера ANLTR по-разному интерпретируют одну и ту же строку? - PullRequest
2 голосов
/ 03 февраля 2012

У меня есть следующая грамматика ANTLR:

grammar Tasks;

options {
  language = Java;
}

tokens {
  TODO   = 'TODO';
}

plan : block;

block:  '(' TODO ( TODO | block )* ')';

WS : ( ' ' | '\t' | '\r' | '\n' | '\v' ) { $channel = HIDDEN; } ;

I и следующая строка:

(TODO (TODO TODO (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 Инструменты IDE ANTLR 2.1.1 возвращает ошибку при интерпретации той же строки:

MismatchedTokenException: строка 1: 6 несоответствующий ввод '(' ожидающий '\ u0007'

Что может быть причиной этой несогласованностимежду обеими программами?

1 Ответ

1 голос
/ 03 февраля 2012

Что может быть причиной такого несоответствия между обеими программами?

Интерпретатор содержит ошибки: в вашей грамматике нет ничего плохого.

...