Сопоставьте строчные буквы с ANTLR

Я использую ANTLRWorks для простой грамматики:

grammar boolean;

// [...]
lowercase_string
        :   ('a'..'z')+ ;

Однако, согласно Интерпретатору, lowercase_string не соответствует foobar (MismatchedSetException(10!={}). Идеи?


person Reactormonk    schedule 23.11.2011    source источник


Ответы (1)


Вы не можете использовать оператор .. внутри таких правил парсера. Чтобы сопоставить диапазон от 'a' до 'z', создайте для него правило лексера (правила лексера начинаются с заглавной буквы).

Попробуйте это так:

lowercase_string
  :  Lower+ 
  ;

Lower
  :  'a'..'z'
  ;

or:

lowercase_string
  :  Lower
  ;

Lower
  :  'a'..'z'+
  ;

Также см. предыдущие вопросы и ответы: Практическая разница между правила лексера в ANTLR?

person Bart Kiers    schedule 23.11.2011