ANTLR解析器规则中的/ s / S.

时间:2018-02-21 02:49:47

标签: java regex escaping antlr antlr4

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

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

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

谁能告诉我发生了什么? \s\S不受支持?我可以找到哪些替代方法来解析有效的String

谢谢!

1 个答案:

答案 0 :(得分:0)

ANTLR不使用正则表达式,即使它有时看起来像。它不知道转发的实体,例如\s\w。你应该使用:

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

这是对双引号之间的任何字符的非贪婪扫描。 ANTLR4足够聪明,可以从any-char匹配中排除整理报价。经常使用的变体是:

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

我建议查看现有的语法,以了解如何编写规则,例如:在这Java grammar中。另请阅读关于Github上的词法分析器的ANTLR4 documentation