2014-09-28 2 views
0

У меня есть небольшой вопрос (я использовал Google раньше): Есть ли способ, как совместить все специальные символы Unicode, кроме кавычек?Признать специальные символы

У меня есть этот код:

STRING:  '"' (NUMBER|LETTER|' '|'!'|'?'|':'|'.'|'/'|'*')* '"'; 

fragment LETTER: ('a'..'z'|'A'..'Z'); 
fragment DIGIT: ('0'..'9'); 

Есть ли более эффективный способ?

Благодарим за отзыв!

+2

Что делает характер «специальный»? – hobbs

ответ

0

~["], или старый стиль v3 ~'"', соответствует любому символу, кроме цитаты.

Если вы хотите, чтобы исключить разрывы строк, сделать что-то вроде этого:

STRING : '"' ~["\r\n]* '"'; 

От the official docs:

~x

Соответствует любому символу, не в наборе, описываемого x , Набор x может быть единственным символьным символом, диапазоном или дополнительным набором, например ~(’x’|’y’|’z’) или ~[xyz]. Вот правило, которое использует ~, чтобы соответствовать любому символу, кроме символов с помощью ~[\r\n]*:

COMMENT : '#' ~[\r\n]* '\r'? '\n' -> skip ; 
+0

Это не работает должным образом, когда я печатаю «Hello World!», Он говорит, что «ошибка распознавания маркера линии 1: 6 при:» «He» строка 1:18 ошибка распознавания токена: '!' строка 1:19 ошибка распознавания токена при: '"\ n' ' – DrunkCoder

+0

@DrunkCoder, вы не используете ANTLR3, правильно? Если вы используете v4, я предполагаю, что какое-то другое правило приводит к сбоям: не могли бы вы опубликовать всю грамматику в этом случае? Также см. Ссылку на официальные документы. –