Urb*_*ond 5 parsing scala decode escaping unicode-escapes
JavaTokenParsersScala 中提供了方便的正则表达式来匹配整数和浮点数以及双引号字符串。但这就是它的全部作用。我如何做将这些字符串转换回底层转换对象的明显事情?toDouble对于数字来说,使用or等很容易做到这一点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"
Run Code Online (Sandbox Code Playgroud)
然后我运行这个JavaTokenParsers,我会及时得到一个字符串,该字符串正确解析嵌入的引号,但有一个双引号字符作为其第一个和最后一个字符,以及许多反斜杠序列。如何获得处理了转义序列的等效 Java 字符串?我不敢相信没有库函数可以做到这一点,但找不到。
看来至少没有这样的函数\xe2\x80\x94,Scala编译器中没有使用。但这并不是一个决定性的答案,也许后来引入了一个库函数。
\n\n如果您想阅读(或复制粘贴)此代码,这是我找到的相关代码。\nScala 编译器的标记化逻辑分布在不同的文件中。\n顶级方法似乎fetchToken位于src/compiler/scala/tools/nsc/ast/parser/Scanners.scala,它又委托给src/compiler/scala/tools/nsc/util/CharArrayReader.scala(其祖先之一)中的逻辑,特别是nextChar和potentialUnicode。其他转义在 中处理getLitChar,再次在 中处理Scanners.scala。