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

2023-04-03 10:13:51 +08:00
 NeoZephyr
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 ,越解释越糊涂

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

848 次点击
所在节点    Java
3 条回复
proxytoworld
2023-04-03 10:34:13 +08:00
\b \t \f 本身视为一个字符把,且不会引起歧义
NeoZephyr
2023-04-03 10:46:27 +08:00
@proxytoworld

gpt 好像也是这么回答我的

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

这种问题还是去 so 好一点,gpt 真是不靠谱,问了一个早上都没有问出结果

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/929325

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX