V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NeoZephyr
V2EX  ›  Java

antlr4 提供的 Java 词法文件, CHAR_LITERAL 规则怎么理解

  •  1
     
  •   NeoZephyr · 2023-04-03 10:13:51 +08:00 · 1054 次点击
    这是一个创建于 625 天前的主题,其中的信息可能已经有所发展或是发生改变。
    CHAR_LITERAL:       '\'' (~['\\\r\n] | EscapeSequence) '\'';
    
    fragment EscapeSequence
        : '\\' 'u005c'? [btnfr"'\\]
        | '\\' 'u005c'? ([0-3]? [0-7])? [0-7]
        | '\\' 'u'+ HexDigit HexDigit HexDigit HexDigit
        ;
    

    在 CHAR_LITERAL 的第一部分,排除掉转义的字符,用来包含正常的不需要转义的字符,我是可以理解的。

    但问题是,这里为什么没有排除 \b \t \f " 这些呢?这些不也是需要被转义的吗?\r \n 跟 \b \t \f " 有啥区别吗?

    想了一个晚上也没有想明白,然后问了 chat-gpt ,越解释越糊涂

    有没有懂的同学,给我一些提示呢

    3 条回复    2023-04-03 15:25:13 +08:00
    proxytoworld
        1
    proxytoworld  
       2023-04-03 10:34:13 +08:00
    \b \t \f 本身视为一个字符把,且不会引起歧义
    NeoZephyr
        2
    NeoZephyr  
    OP
       2023-04-03 10:46:27 +08:00
    @proxytoworld

    gpt 好像也是这么回答我的

    但是,\n \r 不也是一个字符吗?这个有啥影响吗,实在是不懂啊
    NeoZephyr
        3
    NeoZephyr  
    OP
       2023-04-03 15:25:13 +08:00
    怎么编辑自己的问题呢?

    这种问题还是去 so 好一点,gpt 真是不靠谱,问了一个早上都没有问出结果
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3416 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 10:54 · PVG 18:54 · LAX 02:54 · JFK 05:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.