Ваши правила string / char не обрабатывают escape-последовательности правильно. Для персонажа это должно быть:
CHARACTER: '\'' '\\'? '.' '\'';
Здесь мы делаем escape-символ (backshla sh) частью правила и требуем, чтобы за ним следовал дополнительный символ (каким бы он ни был). Аналогично для строки:
STRING: '"' ('\\'? .)+? '"';
Используя +?
, мы сообщаем ANTLR4, что сопоставление выполняется не жадным образом, останавливаясь на первом неэкранированном символе кавычки после исходного.