我一直在瀏覽ANTLR v3文檔(以及我的可信副本「The Definitive ANTLR reference」),並且我似乎無法找到一種乾淨的方式在字符串文字中實現轉義序列(我目前正在使用Java目標)。我本來希望能夠做這樣的事情:如何在ANTLR 3中處理字符串文字中的轉義序列?
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()))
)?
我使用了這種方法,但是請注意,我必須在每一步中追加「getText()」而不是「escaped.getText()」。片段將未轉義的文本寫入整個STRING標記,getText()返回。對於我來說,escaped.getText()返回原始片段的反斜槓完整。 – 2009-03-20 14:39:32