我想写一个解析器规则来解析有效的String
,我的规则是这样的:
STRING: '"' [\s\S]+ '"';
但它给了我一个警告invalid escape sequence \s
。我尝试了其他转义序列,例如\t
,\n
......它们都很好。
谁能告诉我发生了什么? \s\S
不受支持?我可以找到哪些替代方法来解析有效的String
?
谢谢!
答案 0 :(得分:0)
ANTLR不使用正则表达式,即使它有时看起来像。它不知道转发的实体,例如\s
或\w
。你应该使用:
STRING: '"' .*? '"';
这是对双引号之间的任何字符的非贪婪扫描。 ANTLR4足够聪明,可以从any-char匹配中排除整理报价。经常使用的变体是:
STRING: '"' ~["]* '"';
我建议查看现有的语法,以了解如何编写规则,例如:在这Java grammar中。另请阅读关于Github上的词法分析器的ANTLR4 documentation。