Я просматривал документацию ANTLR v3 (и мою надежную копию "Определяющей ссылки ANTLR" ), и я не могу найти простой способ реализовать escape-последовательности в строковых литералах (я в настоящее время используя цель Java). Я надеялся, что смогу сделать что-то вроде:
fragment
ESCAPE_SEQUENCE
: '\\' '\'' { setText("'"); }
;
STRING
: '\'' (ESCAPE_SEQUENCE | ~('\'' | '\\'))* '\''
{
// strip the quotes from the resulting token
setText(getText().substring(1, getText().length() - 1));
}
;
Например, я бы хотел, чтобы входной токен "'Foo\ House'" стал строкой "Foo House".
К сожалению, вызов setText(...) в фрагменте ESCAPE_SEQUENCE устанавливает текст для всего токена STRING, что явно не то, что я хочу.
Есть ли способ реализовать эту грамматику, не добавляя метод, чтобы вернуться к результирующей строке и вручную заменить escape-последовательности (например, что-то вроде setText(escapeString(getText())) в правиле STRING)?