Merci beaucoup pour ces précisions, je comprends mieux ce qui se passe. Néanmoins, je ne peux pas appliquer ce que tu me conseilles : au stade de l'analyse sémantique, je n'ai aucune idée de ce qu'il y a "derrière" un identifiant, et donc je ne peux pas savoir si il s'agit d'une instance d'une classe ou bien du nom d'une classe ou d'un type.
Pour simplifier, en compilation y'a quatre étapes :
1) Analyse lexicale : on transforme un fichier texte en suite de "lexèmes" (typiquement, le texte :
a=(a)+b;
devient la liste suivante :
IDENTIFIANT("a") , EGAL , PARENTHESEGAUCHE , IDENTIFIANT("a") , PARENTHESEDROITE , PLUS , IDENTIFIANT("b") , POINTVIRGULE
(désolé pour les majuscules mais c'est l'usage).
2) L'analyse sémantique (aussi appelé "parseur") prend cette liste bizarre et la transforme en arbre de syntaxe abstraite, donc un truc du type
Affectation(Identifiant("a"),Plus(Parenthèses("a")
,Identifiant("b")))
sauf que là, Parenthèses("a") n'a pas beaucoup de sens, mais j'y reviens.
3) Le typage prend un tel arbre et déduit les types des différents identifiants en fonction de ce à quoi ils sont rattachés (par exemple, lorsqu'il va lire l'arbre Incrementation(Identifiant("a")) provenant de la ligne "a++;", il va noter quelque part "le type de "a", c'est int").
4) Et la compilation proprement dite crée du code assembleur à partir des instructions.
Moi je suis à l'étape 2, et typiquement, pour une expression du type "a=(a)+b", je sais que "a" est un identifiant mais j'ai aucune chance de savoir à l'avance si c'est un nom de type, de classe, de variable ou d'instance de classe. Et donc je suis bien bloqué
Si quelqu'un a une idée géniale, je suis preneur, mais en tous cas le fait de lire tes explications me permet de demander de l'aide à mon prof sans avoir l'air de ne rien comprendre à rien. Merci beaucoup 041 