Как включить кавычки в строку в ANTLR4 - PullRequest
0 голосов
/ 22 февраля 2020

Как я могу включить кавычки для строки и символов как часть строки. Примером является "This is a \" string", что должно привести к одной строке вместо "This is a \" в качестве одной строки и string" в качестве ошибки в этом случае. То же самое касается персонажей. Пример '\' ', но в моем случае это всего лишь \'.

Это мое текущее решение, которое работает только без кавычек.

CHARACTER: '\' '~ (' \ '') + '\' ';

STRING:' "'~ ('" ') +' "';

1 Ответ

0 голосов
/ 23 февраля 2020

Ваши правила string / char не обрабатывают escape-последовательности правильно. Для персонажа это должно быть:

CHARACTER: '\'' '\\'? '.' '\'';

Здесь мы делаем escape-символ (backshla sh) частью правила и требуем, чтобы за ним следовал дополнительный символ (каким бы он ни был). Аналогично для строки:

STRING: '"' ('\\'? .)+? '"';

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

...