/s/S 在 ANTLR 解析器规则中

/s/S in ANTLR parser rules

我想编写一个解析器规则来解析有效的 String,我的规则是这样的:

STRING: '"' [\s\S]+ '"';

但它给了我一个警告说 invalid escape sequence \s。我尝试了其他转义序列,如 \t\n...它们都很好。

谁能告诉我这是怎么回事? \s\S 不支持?我可以找到哪些替代方法来解析有效的 String?

谢谢!

ANTLR 不使用正则表达式,即使它有时看起来像那样。它不知道像 \s\w 这样的转义实体。您应该改用:

STRING: '"' .*? '"';

这是对双引号之间的任何字符的 non-greedy 扫描。 ANTLR4 足够聪明,可以从 any-char 匹配中排除结束引用。一个经常使用的变体是:

STRING: '"' ~["]* '"';

我建议查看现有语法以了解如何编写规则,例如在这个 Java grammar. Also read the ANTLR4 documentation 关于 Github.

的词法分析器规则中