编译器的哪个阶段检测到以下错误程序?

时间:2017-07-17 13:11:19

标签: compiler-errors compiler-theory compiler-construction

我在理解编译器阶段中不同错误之间的差异方面遇到了一些麻烦,例如这个程序:

int main()
{
      int x = 5;
      int x = 6;
}

我的猜测是,这在语义分析阶段会失败,但我不是那么肯定(在词汇分析阶段可能会失败,因为会生成(int x)的重复标记吗?)

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你是对的,假设你在这里描述的语言是标准的C或C ++,这个程序在词法上和语法上都是正确的,但不是语义上的。

C / C ++不允许重新定义变量 - 这就是语义。如果您的语言允许变量重定义,那么它将是一个语义正确的程序。