如何处理ANTLR 3中字符串文本中的转义序列?
我一直在查看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