java - 未封闭字 rune 字背后的算法

标签 java string scala compiler-errors character

在 java 或 scala 中,在单引号内声明字符串会抛出

'error: unclosed character literal'

我想知道是否有人可以告诉我编译器如何对单引号内的字符串进行类型检查,然后确定错误的确切机制。另外,为什么编译器会说 '

unclosed character literal

' 而不是

"String instead of char"

作为错误描述?

谢谢

最佳答案

这通常由 lexical analyser 完成。正如维基百科文章所说,这通常是由 finite-state machine 完成的。 ,它们非常快速且易于生成。

至于为什么它显示“未封闭的字 rune 字”而不是“字符串而不是字符”,是因为通常解析语言的方式(与词法分析不同的步骤)使编译器更难实现程序员的意图对于一个看着它的人​​来说。编译器使用的上下文通常是有问题的部分的左侧和上方,而不是整个上下文。

因此,查看左引号的左侧,无法判断错误是缺少单引号,还是程序员将单引号与双引号混合在一起。在 Scala 中,这是由符号语法 ('aSymbol) 复合而成的,它阻止它使用下一个字符作为区分彼此的一种方式。

所以,最后,错误消息被选择来反射(reflect)最可能的错误,并且,对于来自 Java、C 或 C++ 的任何人来说,在字符串周围使用单引号并不是一种习惯。对于使用 Ruby、Perl 或 Python 等脚本语言的人来说,那就是另一回事了。

关于java - 未封闭字 rune 字背后的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14807767/

相关文章:

java - 如何检查字符串是否以确切的字符串结尾?

ruby - 如何从字符串中删除数字

scala - 在 Scala 中实例化赋值运算符两侧的对象;它是如何工作的

java - Spring <c :foreach issue jSTL java

java - Maven 不包括 LWJGL 安装的 list 属性

java - 如何判断java程序运行时是否以管理员身份运行

java - 运算符(operator)不使用 If 语句和扫描器

string - 在不使用 num2str 的情况下将数字转换为字符串

scala - Spark/Mllib 以分布式方式训练许多 GaussianMixture 模型

scala - ADT 的类型类实例的通用派生