Question

Dans le langage de référence avant tel que c #, comment le compilateur gérer cela? Quelles sont les étapes dans lesquelles fonctionnent le compilateur?

Était-ce utile?

La solution

La principale différence entre l'avant permettant référence est ou non en utilisant un un compilateur passe ou un multi-passes une. Bien sûr, pour prendre en charge la référence avant devez vérifier les définitions des symboles et ne la vérification du type après ayant généré l'arbre complet de syntaxe abstraite de la source que vous compilez.

Il n'y a donc pas de problème, lorsque vous trouvez une référence avant vous dépendez juste qu'il sera défini plus tard (vous pouvez le marquer comme étant en attente dans le tableau des symboles) puis quand vous trouvez la définition réelle que vous affinez l'objet symbole dans le symbole table.

Une fois que vous pouvez typer ou vérifier si certains symboles sont toujours en attente (donc il n'y a pas de véritable définition, et vous pouvez élever une erreur sémantique) ..

Autres conseils

Il le fait en faisant deux passes de compilation. La première passe et le code parse recueille tous les identifiants utilisés. La seconde passe résout tous les identificateurs.

Dans une langue avec un seul compilateur passe, comme Pascal, que les références arrière peuvent être utilisés comme le type d'un identifiant doivent être connus avant qu'il ne puisse être résolu.

exactement de la même façon C ++ il gère, je pense, seule différence:. La syntaxe est assez simple que le compilateur peut construire l'arbre d'analyse syntaxique sans que vous ayez besoin de dire quel type d'objet syntactique vos symboles encore non déclarés font référence à

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top