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

时间:2015-07-04 14:33:20

标签: compiler-construction

nti a, b;

现在,我已将int替换为nti。它会产生任何词汇错误吗?

另外,如果我使用

Int a, b; 

只是语法错误还是词汇错误?

1 个答案:

答案 0 :(得分:0)

当然这取决于语言,但在大多数语言中,ntiInt都是有效的标识符,因此会被词法分析器分类。所以没有词汇错误。

如果语言进一步使用C风格声明语法并允许用户定义类型,则这两个示例也可以在语法上有效。只有在语义分析期间,您才会收到错误消息,指出没有定义名为ntiInt的类型(当然,除非是这样,否则代码只是正确的。)

例外情况是C和C ++本身,其中定义的类型必须在解析时跟踪,foo bar;未正确解析为声明,除非先前已声明foo作为一种类型。但是,在其他C语言中,这解析得很好并且行为如上所述。

总结:根据语言,它可能是语法或语义错误。这绝不是一个词汇错误(除非我们正在谈论一个没有标识符或标识符不包含字母的语言极其罕见的情况)。