我一直在查看ANTLR v3文档(以及我的可靠的“ANTLR权威指南”副本),但似乎找不到一种干净的方式来实现字符串文字中的转义序列(我目前正在使用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
"。不幸的是,
ESCAPE_SEQUENCE
片段中的 setText(...)
调用设置了整个 STRING
标记的文本,这显然不是我想要的。有没有一种方法可以实现这个语法,而不必在结果字符串中添加一个方法来手动替换转义序列(例如,在
STRING
规则中使用像 setText(escapeString(getText()))
这样的内容)?