ANTLR3: обеспечение того, чтобы персонаж встречался хотя бы в одном месте - PullRequest
0 голосов
/ 09 июня 2011

Я пытаюсь убедиться, что хотя бы один символ включен в текст с подстановочными знаками

fragment CHARACTER : ('a'..'z'|'0'..'9'|'-'|'&'|'@'|'$'|'%'|'.'|':'); 
fragment WILDCARD_QUESTION  : ('?'); 

WILD_STRING 
   : (CHARACTER)* 
     ( 
       (WILDCARD_QUESTION) 
       (CHARACTER)* 
     )+;

Используете ли вы хотя бы один символ?получает, где, как я хотел бы, чтобы это потерпело неудачу.Поэтому должны передаваться только последовательности, в которых хотя бы один символ.

Что мне нужно для передачи a?, ?a, ?a?, a?a и т. Д.Только ?, ?? и т. Д. Должны дать сбой.т.е. должен быть хотя бы один символ, а не только WILDCARD_QUESTION.Символ может быть с любой стороны подстановочного знака.

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Сделайте это с двумя правилами, одно для ведущих WILDCARD и одно для ведущих CHARACTER:

WILD_STRING : (WILDCARD_QUESTION)+ CHARACTER (CHARACTER | WILDCARD_QUESTION)*
            | (CHARACTER)+ WILDCARD_QUESTION (CHARACTER | WILDCARD_QUESTION)*
            ;
0 голосов
/ 10 июня 2011

Изменен код для чтения

    WILD_STRING 
       : (((WILDCARD_QUESTION)+(CHARACTER))|((CHARACTER)+(WILDCARD_QUESTION)))
(WILDCARD_QUESTION|CHARACTER)*
       ; 

Это, похоже, решает проблему.

...