解析 – 如何使用Unicode转义从Scala JavaTokenParsers解码Java字符串到非转义字符串?

Scala中的
JavaTokenParsers提供了方便的regexp,用于匹配整数和浮点数以及双引号字符串.但这就是它的全部.如何将这些字符串转换回底层转换对象这一显而易见的事情?对于数字,使用toDouble或toInt等很容易做到这一点.但是你如何对字符串做等效的操作呢?例如.如果我输入字符串

"Unicode \u20ac is a Euro sign, which I would write \\u20ac in a string. \243 is a pound sign.\n\r And \f is a \"form feed\", with embedded quotes.\n\r"

然后我通过JavaTokenParsers运行它,我会正确地得到一个正确解析嵌入式引号的字符串,但是它有一个双引号字符作为它的第一个和最后一个字符,以及许多反斜杠序列.如何获取处理转义序列的等效Java字符串?我不敢相信没有库函数可以做到这一点,但找不到.

最佳答案 似乎没有这样的功能 – 至少在Scala编译器中没有使用.这不是一个确凿的答案,可能之后引入了库函数.

如果您想要读取(或复制粘贴)此代码,这里是我找到的相关代码.
Scala编译器的标记化逻辑分布在不同的文件中.
在src / compiler / scala / tools / nsc / ast / parser / Scanners.scala中,顶层方法似乎是fetchToken,后者又委托给src / compiler / scala / tools / nsc / util / CharArrayReader.scala中的逻辑(它的一个祖先),特别是nextChar和潜在的黑名单.其他转义在getLitChar处理,同样在Scanners.scala中处理.

点赞