Я просматривал документацию 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
)?