/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.
的词法分析器规则中
我想编写一个解析器规则来解析有效的 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.
的词法分析器规则中