2015-05-08 2 views
0

Я пытаюсь изучить antlr. Если я ожидал такого рода предложений (первое слово в верхнем регистре, остальные могут быть несколько буквенно-цифровой смешанный случай слов):Конфликтующие ограничения в Antlr

HELLO world foo 
THIS ThaT FOO 
HELLO THAT 
BANANA BeRRY 99 
APPLE juice80 

Если я определить правила, как:

grammar Hello; 
r: UC MC 
UC: [A-Z]+ ; //only uppercase 
MC: [A-Z|a-z|0-9]+ ; //uppercase, lowercase, and numbers or anycombination of these 

Для входа привет мир, Я получаю сообщение об ошибке:
mismatched input WORLD expecting MC

Я вижу, что эти два правила конфликта, когда дело доходит до прописных символов. Как обращаться с такими случаями?

ответ

1

Самый простой способ для этой грамматики было бы создать правило, синтаксический анализатор, который позволяет как лексемы типа:

grammar Hello; 
r: uc mc; 
uc: UC; 
mc: UC | MC; 
UC: [A-Z]+ ; //only uppercase 
MC: [A-Za-z0-9]+ ; //uppercase, lowercase, and numbers or anycombination of these 

Если вы хотите, чтобы маркеры правильно lexed вы должны влиять на лексера для переключения Lexing Режим.

Смежные вопросы