Une expression simple commeComment un compilateur Java analyse-t-il les données typographiques?
(x) - y
est interprétée différemment selon que x
est un nom de type ou non. Si x
n'est pas un nom de type, (x) - y
soustrait seulement y
de x
. Mais si x
est un nom de type, (x) - y
calcule le négatif de y
et convertit la valeur résultante en type x
.
Dans un C typique ou le compilateur C, la question de savoir si x
est un type ou non est responsable parce que l'analyseur communique ces informations au lexer dès qu'il traite une déclaration typedef ou struct. (Je pense que cette violation des niveaux était la plus mauvaise partie de la conception de C.)
Mais en Java, x
ne peut être défini que plus tard dans le code source. Comment un compilateur Java désambiguise-t-il une telle expression?
Il est clair qu'un compilateur Java nécessite plusieurs passages, car Java ne nécessite pas de déclaration avant utilisation. Mais cela semble impliquer que le premier passage doit faire un travail très bâclé sur l'analyse syntaxique des expressions, et ensuite dans un passage ultérieur, faire une autre analyse plus précise des expressions. Cela semble inutile.
Y a-t-il un meilleur moyen?
J'étais trop paresseux pour réellement rechercher les spécifications (et je ne savais pas où chercher de toute façon). +1 –
Envisagez d'accepter cette réponse. –