我一直在查看 ANTLR v3 文档(以及我可信赖的“The Definitive ANTLR reference”副本),但我似乎找不到在字符串文字中实现转义序列的干净方法(我目前正在使用 Java目标)。我曾希望能够做类似的事情:
fragment
ESCAPE_SEQUENCE
: '\\' '\'' { setText("'"); }
;
STRING
: '\'' (ESCAPE_SEQUENCE | ~('\'' | '\\'))* '\''
{
// strip the quotes from the resulting token
setText(getText().substring(1, getText().length() - 1));
}
;
例如,我希望输入标记“ 'Foo\'s House'
”成为字符串“ Foo's House
”。
不幸的是,片段setText(...)
中的调用ESCAPE_SEQUENCE
设置了整个STRING
令牌的文本,这显然不是我想要的。
有没有一种方法可以在不添加返回结果字符串并手动替换转义序列的方法的情况下实现此语法(例如,使用类似规则setText(escapeString(getText()))
中的内容STRING
)?