Frage

Wie geht der Compiler in der vorwärts gerichteten Sprache wie C#damit um? Was sind die Schritte, in denen der Compiler betrieben wird?

War es hilfreich?

Lösung

Der Hauptunterschied zwischen der Erlaubnis zur Vorwärtsreferenz oder nicht der Verwendung von a Ein Pass -Compiler oder ein Multi -Pass. Natürlich müssen Sie die Definitionen der Symbole überprüfen und typeChing durchführen NACH Nachdem Sie den vollständigen abstrakten Syntaxbaum der Quelle erzeugt haben, die Sie zusammenstellen.

Es gibt also kein Problem, wenn Sie zum ersten Mal eine Vorwärtsreferenz finden, dass Sie sich nur darauf verlassen, dass sie später definiert wird (Sie können sie in der Symboltabelle anhängig markieren), wenn Sie die tatsächliche Definition finden, verfeinern Sie das Symbolobjekt in der Symbol -Tabelle.

Nachdem Sie es typten können oder prüfen können, ob einige Symbole noch ausstehend sind (daher gibt es keine wirkliche Definition, und Sie können einen semantischen Fehler aufwerfen).

Andere Tipps

Dies geschieht durch zwei Kompilierungen. Der erste Pass analysiert den Code und sammelt alle verwendeten Kennungen. Der zweite Pass löst alle Kennungen auf.

In einer Sprache mit einem einzelnen Pass -Compiler wie Pascal können nur rückwärts referenz verwendet werden, da der Typ eines Kennung bekannt sein muss, bevor es gelöst werden kann.

Genau so wie C ++ damit umgeht, denke ich, nur Unterschied: Die Syntax ist einfach genug, dass der Compiler den Parse -Baum konstruieren kann, ohne dass Sie erkennen müssen, auf welche Art von syntaktischem Objekt Ihre noch nicht deklarierten Symbole sich beziehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top