【问题标题】:What is the purpose of JAVA_UNICODE_ESCAPE in JavaCC?JavaCC 中 JAVA_UNICODE_ESCAPE 的作用是什么?
【发布时间】:2018-11-03 11:21:26
【问题描述】:

JavaCC 中 JAVA_UNICODE_ESCAPE 的作用是什么,我看过文档,解释的很模糊。

【问题讨论】:

  • 从某种意义上说,其目的是让为 Java 和类似 Java 的语言(如 JavaCC 本身)编写解析器变得容易。

标签: java compiler-construction javacc


【解决方案1】:

documentation 是这么说的:

JAVA_UNICODE_ESCAPE:这是一个布尔选项,默认值为 false。当设置为 true 时,生成的解析器在将字符发送到令牌管理器之前使用处理 Java Unicode 转义符 (\u...) 的输入流对象。默认情况下,不处理 Java Unicode 转义。

这是什么意思?

Java Unicode 转义是一个以\u 开头并后跟4 个十六进制数字的序列。在普通 Java 中,这样的序列被翻译成 UTF-16 代码单元。如JLS 3.3 中所述,此翻译发生在 标记化之前。 (正如 JLS 所解释的,不在基本代码明文中的 Unicode 代码点需要表示为两个转义序列,代表 Unicode 代码点的 UTF-16 代理对。)

所以JAVA_UNICODE_ESCAPE 选项基本上告诉JavaCC 生成的词法分析器/解析器 是否应该像Java 编译器一样进行Unicode 转义处理。默认是不处理\uxxxx 转义序列。

【讨论】:

  • 非常感谢。处理\uxxxx 会导致任何问题吗?
  • 我不明白为什么会这样。但这有点暗示您正在实现的语言允许在其源代码中转义。这也意味着您的编译器将对解码转义产生的 Unicode 代码点做一些明智的事情。
  • 会不会引起问题?当然。假设您将它用于 C 编译器。字符串文字 `"\\u1234" 将被错误地处理。
  • 见我上一条评论的第二句。显然,如果您正在实现的语言不允许 Unicode 转义,那么在语法中启用它们是不正确的。但我认为这是一个错误......不是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
相关资源
最近更新 更多