【问题标题】:/s/S in ANTLR parser rulesANTLR 解析器规则中的 /s/S
【发布时间】:2018-02-21 02:49:46
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

  • 我认为你的错误是在'"',你能把它们替换成"吗?另外,请注意空格在正则表达式中很重要。
  • 在字符串文字中使用[\\s\\S]+

标签: java regex escaping antlr antlr4


【解决方案1】:

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

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

这是对双引号之间任何字符的非贪婪扫描。 ANTLR4 足够聪明,可以从任何字符匹配中排除最后的报价。一个常用的变体是:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2014-09-11
    相关资源
    最近更新 更多