Анализ строки между кавычками, содержащей одинарные кавычки, с помощью ANTLR - PullRequest
1 голос
/ 10 апреля 2019

Я бы хотел иметь возможность разбирать строку типа "test" test " с ANTLR4

Моя грамматика:

QUOTE: ('\''|'"');
STRING: QUOTE .*? QUOTE;

Мой парсер:

matcher: STRING;

На другом посту предлагается следующая возможность: Обработка области для строк одинарных и двойных кавычек в ANTLR4

грамматика:

SQUOTE: '\'';
DQUOTE: '"';

STRING: (SQUOTE .*? SQUOTE | DQUOTE .*? DQUOTE );

Однако, эта возможность создает избыточность и, следовательно, риски во время обслуживания

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

("|').*?(\1)

То есть, для автоматического поиска закрывающего тега того же типа, что и открывающего тега

1 Ответ

1 голос
/ 10 апреля 2019

Нет, ("|').*?(\1) невозможно. Я бы тоже не делал .*?, но что-то вроде этого:

STRING
 : '"' ~["]* '"'
 | '\'' ~[']* '\''
 ;

Или, если вы разрешите экранированные символы:

STRING
 : '"' ( ~["]* | '\\' . )* '"'
 | '\'' ( ~[']* | '\\' . ) '\''
 ;

Также обратите внимание, что ~["]* также соответствует разрывам строк. Если вы этого не хотите, сделайте следующее: ~["\r\n]*

...