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

Ste*_* H. 6 parsing antlr lexer

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

目前,这个词法分析器规则并没有像我期望的那样标记.

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

ESCAPED_QUOTE : '\"';
QUOTED_STRING :   '"' ( ESCAPED_QUOTE | ~('\n'|'\r') )*? '"';
Run Code Online (Sandbox Code Playgroud)

Sam*_*ell 8

上述规则存在两个问题.

  1. 你并没有像你想象的那样逃避你的引用.你打算用'\\"'.
  2. 您的ESCAPED_QUOTE规则本身并不构成令牌,因此它应该是一个fragment规则.

这两个变化的结果如下:

fragment ESCAPED_QUOTE : '\\"';
QUOTED_STRING :   '"' ( ESCAPED_QUOTE | ~('\n'|'\r') )*? '"';
Run Code Online (Sandbox Code Playgroud)