Compiler construction 以下声明是否导致词法分析器错误?

Compiler construction 以下声明是否导致词法分析器错误?,compiler-construction,Compiler Construction,现在我用nti替换了int。它是否会产生任何词汇错误 另外,如果我使用 nti a, b; 这仅仅是语法错误还是词法错误?当然这取决于语言,但在大多数语言中,nti和Int都是有效标识符,因此词法分析器会对其进行分类。所以不会有词汇错误 如果该语言进一步使用C风格的声明语法并允许用户定义类型,那么这两个示例在语法上也是有效的。只有在语义分析期间,您才会得到一个错误,即没有定义名为nti或Int的类型,当然,除非定义了,在这种情况下,代码是正确的 这是C和C++本身的例外,在这里定义的类型必须在

现在我用nti替换了int。它是否会产生任何词汇错误

另外,如果我使用

nti a, b;

这仅仅是语法错误还是词法错误?

当然这取决于语言,但在大多数语言中,nti和Int都是有效标识符,因此词法分析器会对其进行分类。所以不会有词汇错误

如果该语言进一步使用C风格的声明语法并允许用户定义类型,那么这两个示例在语法上也是有效的。只有在语义分析期间,您才会得到一个错误,即没有定义名为nti或Int的类型,当然,除非定义了,在这种情况下,代码是正确的

<>这是C和C++本身的例外,在这里定义的类型必须在解析时间和Foo栏中保持跟踪;除非之前已将foo声明为类型,否则不会正确地将其解析为声明。但是,在其他C派生语言中,这种解析很好,行为如上所述

总之:根据语言的不同,它可能是一个语法或语义错误。这绝不是词汇错误,除非我们讨论的是一种极不寻常的情况,即没有标识符的语言,或者标识符不包含字母。

为什么你认为Int和nti的行为会不同?编译器非常简单:要么拼int,要么不拼。Int与quusfgl_4531一样接近。
Int a, b;