Antlr如何转义引号字符串中的引号符号

Rya*_*yan 6 java antlr

我想要一些语法来表示一个字符串,用 " 引用,字符串中的 " 符号可以像 \" 这样引用。以下是我的语法:

fragment
NUM_LETTER : ('a'..'z'|'A'..'Z'|'0'..'9');

STRING_LITERAL : '"' (NUM_LETTER|'_'|('\\"'))* '"';
Run Code Online (Sandbox Code Playgroud)

但它不起作用。我尝试在 AntlrWorks1.5 中解释 "\"a" 并且它在为 STRING_LITERAL 生成的语法树中给出了 MismatchedTokenException。我的语法的哪一部分是错误的?

Bar*_*ers 12

语法没有问题。您可能会收到此错误,因为您使用的是有问题的解释器。请改用 ANTLRWorks 的调试器。调试器将向您显示输入"\"a"已被解析得很好(按CTRL+D开始调试)。

此外,您的字符串规则可能看起来像这样更好:

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

换句话说,您的字符串的内容为零或更多:

  • 除引号、反斜杠或换行符以外的任何字符: ~('"' | '\\' | '\r' | '\n')

或者

  • 转义引号或反斜杠 '\\' ('"' | '\\')