代码之家  ›  专栏  ›  技术社区  ›  paranoider

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

  •  1
  • paranoider  · 技术社区  · 6 年前

    我想编写一个解析器规则来解析有效的 String ,我的规则如下:

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

    但这给了我一个警告 invalid escape sequence \s . 我尝试了其他逃跑序列,比如 \t , \n ... 他们都很好。

    有人能告诉我发生了什么事吗? \s\S 不支持?我可以为解析有效的 一串 ?

    谢谢

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mike Lischke    6 年前

    ANTLR不使用Regex,即使有时看起来是这样。它不知道像这样的逃逸实体 \s \w . 您应该改为使用:

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

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

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

    我建议查看现有语法来学习如何编写规则,例如 Java grammar . 同时阅读 ANTLR4 documentation 关于Github上的lexer规则。