And*_*kin 12 c# language-design keyword
在C#中,标识符例如int或string实际上是语言级关键字.
这是什么原因?
请注意,如果作者想要禁止具有这些名称的用户类型,则可能会产生语义错误,而不是语法错误.
基于答案的一些澄清:
它们是关键字,因为它使解析成为可能/更容易
我不明白为什么,因为我正在开发一个解析器,并且Type.Rule = Identifier比它简单得多Type.Rule = Identifier | "int" | "string" | ....
它们是关键字,因为它们是特殊的别名
var,dynamic也是特殊的东西,但不是关键字(出于兼容性原因,它表明作为关键字不必是特殊的).在另一个示例中,应用于[Serializable]类型会生成魔法IL元数据修饰符serializable而不是标准自定义属性.但它仍然不是关键字.
它们是关键词,因为它们是其他语言的关键词
很好的答案,但是,为什么它们是其他语言的关键词?此外,当然可以用蓝色突出显示它们而不是关键字,那么为什么要从其他语言中引入它?
这是因为intC# 语言中内置的其他特殊值类型根本不是真正的类型,而是.NET Framework 系统类型的别名。
这是语法错误而不是语义错误的原因很简单,因为这些错误是在语法错误检测阶段检测到的,该阶段发生在语义错误之前。int语法错误检测具有确定是否用作类型或其他内容所需的所有信息。假设我们有以下规则:
declaration = type identifier ;
语法阶段检查标识符是否为 [aZ]([aZ]+ | [0-9]+)+ 并且不是保留关键字或别名,在您描述的情况下是。因此,将其命名为语法错误是完全有道理的。