2017-07-17 6 views
1

Je suis un peu de difficulté à comprendre les différences entre les différentes erreurs dans les phases de complier, par exemple ce programme:Quelle étape du compilateur détecte le programme erroné suivant?

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

Je pense que ce serait un échec dans la phase d'analyse sémantique, mais je ne suis pas cela est certain (est-il possible qu'il échoue dans la phase d'analyse lexicale comme un jeton dupliqué pour (int x) serait généré?)

Appréciez votre aide.

+1

L'insertion dans la table de symboles lors de la phase d'analyse lexicale conduirait à une collision et créerait une erreur de "duplicate symbol". –

+0

@DavidBrabant Merci, merci de votre aide. –

Répondre

0

Vous avez raison, ce programme est à la fois syntaxiquement et syntaxiquement correct, mais pas sémantiquement, en supposant que le langage que vous décrivez ici soit le C ou le C++ standard. C/C++ ne permet pas la redéfinition des variables - c'est de la sémantique

Si votre langue permettait des redéfinitions variables, ce serait un programme sémantiquement correct.