2017-07-17 58 views
1

我有一些麻烦,在理解了编译阶段不同的错误之间的差异,比如这个程序:编译器的哪个阶段检测到以下错误的程序?

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

我的猜测是,这将无法在语义分析阶段,但我不某些(是否有可能在词法分析阶段失败,因为会生成(int x)的重复标记?)

感谢您的帮助。

+1

在词法分析阶段在符号表中插入会导致碰撞并产生“重复符号”错误。 –

+0

@DavidBrabant谢谢,感谢您的帮助。 –

回答

0

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

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