在ANTLR中使用转义的引号捕获字符串文字

时间:2013-10-07 23:55:58

标签: parsing antlr lexer

我对如何在ANTLR4中捕获带引号的字符串感到有点困惑。

目前,此词法分析器规则并未按照我的预期方式进行标记。

示例字符串为"=\""。我已经尝试了很多不同的方法来捕获它,但我对我正在做的不正确感到茫然。我非常感谢对此最佳实践的一些见解。非常感谢你!

ESCAPED_QUOTE : '\"';
QUOTED_STRING :   '"' ( ESCAPED_QUOTE | ~('\n'|'\r') )*? '"';

1 个答案:

答案 0 :(得分:8)

上述规则存在两个问题。

  1. 你实际上没有像你想象的那样逃避你的引用。您打算使用'\\"'
  2. 您的ESCAPED_QUOTE规则本身并不构成令牌,因此它应该是fragment规则。
  3. 这两项变更的结果如下:

    fragment ESCAPED_QUOTE : '\\"';
    QUOTED_STRING :   '"' ( ESCAPED_QUOTE | ~('\n'|'\r') )*? '"';