Übersetzerbau - Semantische Analyse


Advertisements

Wir haben gelernt, wie ein Parser Konstrukte analysieren Bäume im Syntaxanalysephase. Die Ebene Parse-Baum in dieser Phase aufgebaut ist in der Regel nicht von Nutzen für einen Compiler, da es keine Informationen darüber, wie, um den Baum zu bewerten tragen. Die Produktionen von kontextfreie Grammatik, die die Regeln der Sprache macht, nicht aufnehmen, wie sie zu interpretieren.

Zum Beispiel:

E → E + T

Die oben CFG Produktion hat keine semantische Regel zugeordnet ist, und es kann nicht helfen in dem jede Sinne der Produktion .

Semantik

Semantik einer Sprache bieten was bedeutet, seine Konstrukte, wie Token und Syntax struktur. Semantik zur Interpretation Symbole, ihre Typen und ihre Beziehungen untereinander. Semantische Analyse, ob die im Quellprogramm aufgebaut Syntaxstruktur einen Sinn ergibt oder nicht.

CFG + semantic rules = Syntax Directed Definitions

Zum Beispiel:

int a = “value”;

sollte nicht einen Fehler in lexikalische und Syntaxanalysephase auszugeben, wie es lexikalisch und strukturell korrekt ist, aber es sollte zu generieren ein semantischer Fehler, wie die Art der Aufgabenstellung unterscheidet. Diese Regeln werden von der Grammatik der Sprache festgelegt und in semantische Analyse ausgewertet. Die folgenden Aufgaben sollten in semantische Analyse durchgeführt werden:

  • Scope Auflösung
  • Geben Sie überprüfen
  • Array-gebundenen Prüfung

Semantische Fehler

Wir haben einige der Semantik-Fehler, dass die semantische Analysegerät wird erwartet, zu erkennen, genannt:

  • Typenkonflikt
  • Nicht deklarierte Variable
  • Reservierte Bezeichner Missbrauch.
  • Multiple Erklärung Variable in einem Rahmen..
  • Zugriff auf ein außerhalb des Bereichs variabel ist.
  • Die tatsächlichen und formalen Parameter stimmt nicht überein.

Attributgrammatik

Attribut-Grammatik ist eine spezielle Form der kontextfreien Grammatik in dem einige zusätzliche Informationen (Attribute) werden an einer oder mehreren seiner nicht-Terminals, um kontextsensitive Informationen angehängt. Jedes Attribut hat gut definierte Domäne von Werten, wie Integer, Float, Charakter, String und Ausdrücke.

Attribut-Grammatik ist ein Medium, um die Semantik zu der kontextfreien Grammatik bieten und es kann helfen, geben Sie die Syntax und Semantik einer Programmiersprache. Attribut-Grammatik (wenn es als Parse-Baum gesehen) können Werte oder Informationen zwischen den Knoten eines Baumes übergeben.

Beispiel

E → E + T { E.value = E.value + T.value }

Der rechte Teil des CFG enthält die semantischen Regeln, die festlegen, wie die Grammatik zu interpretieren ist. Hier werden die Werte von nicht-Klemmen E und T addiert, und das Ergebnis wird an den nicht-terminal E kopiert.

Semantic Attribute können ihre Werte von ihrer Domäne zum Zeitpunkt der Analyse zugeordnet und zum Zeitpunkt der Übertragung oder Bedingungen ausgewertet werden. Basierend auf der Art der Attribute erhalten ihre Werte sind, können sie grob in zwei Kategorien unterteilt werden: Synthetisierte Attribute und vererbte Attribute.

synthetisierte Attribute

Diese Attribute Werte aus den Attributwerten der untergeordneten Knoten. Um zu veranschaulichen, übernehmen die folgende Produktion:

S → ABC

Wenn S ist, die Werte von untergeordneten Knoten (A, B, C) ist, so wird gesagt, um ein synthetisiertes Attribut sein, da die Werte von ABC sind S synthetisiert.

Wie bereits im vorherigen Beispiel (E → E + T), wird der übergeordnete Knoten E seinen Wert aus seiner untergeordneten Knoten. Synthetisierten Attribute niemals Werte von ihren übergeordneten Knoten oder alle Geschwisterknoten.

Vererbte Attribute

Im Gegensatz zu den abgeleiteten Attribute geerbt Attribute können Werte von Eltern und / oder Geschwister übernehmen. Wie in der folgenden Produktion

S → ABC

A bekommen kann Werte von S, B und C B kann Werte von S, A und C. Ebenso nehmen, C können Werte von S, A und B.

Erweiterung : Wenn ein Nicht-Terminal wird an den Klemmen nach einer Grammatikregel erweitert.

Inherited Attributes

Reduzierung : Wenn ein Terminal zu seiner entsprechenden nicht-Endgerät gemäß Grammatikregeln reduziert. Syntaxbäume werden analysiert Top-down- und von links nach rechts. Wann immer Reduktion auftritt, wenden wir dem entsprechenden semantischen Regeln (Aktionen).

Semantische Analyse wird Syntax Directed Übersetzungen, die obigen Aufgaben zu erfüllen.

Semantic Analyzer erhält AST (Abstract Syntax-Baum) von seiner vorherigen Stufe (Syntaxanalyse).

Semantic Analyzer misst Attributinformationen mit AST, die Zuge AST genannt werden.

Attribute sind zwei Tupel-Wert, <Attributname, Attributwert>

Zum Beispiel:

int value  = 5;
<type, “integer”>
<presentvalue, “5”>

Für jede Produktion legen wir eine semantische Regel.

S-schrieben SDT

Wenn ein SDT verwendet nur Attribute synthetisiert, wird es als S-schrieben SDT genannt. Diese Attribute werden ausgewertet mit S-SDTs zurückzuführen, die ihre semantischen Aktionen nach der Produktion (rechte Seite) geschrieben haben.

S-attributed SDT

Wie oben dargestellt, Attribute in S-zurückzuführen SDTs in Bottom-up-Analyse ausgewertet, da die Werte der übergeordneten Knoten abhängig von den Werten der untergeordneten Knoten..

L-schrieben SDT

Diese Form der SDT verwendet beide synthetisiert und ererbten Attribute mit Einschränkung der nicht mit Werten von rechts Geschwister.

In der L-schrieben SDTs, ein Nicht-Terminal können Werte aus seiner Eltern, Kinder und Geschwister-Knoten zu erhalten. Wie in der folgenden Herstellungs -

S → ABC

S kann Werte von A, B, und C nehmen (synthetisiert). A kann Werte von nur S nehmen. B kann Werte von S zu nehmen und A. C kann Werte von S, A und B. Keine Nicht-Terminal bekommen können Werte aus der Geschwister, sein Recht zu bekommen.

Attribute in L-schrieben SDTs durch bewertet Tiefen-erste und von links nach rechts Parsen Weise.

L-attributed SDT

Wir können schließen dass wenn eine Definition S-schrieben, dann wird es auch als L-zurückzuführen Definition L-zurückzuführen umschließt S-zurückzuführen Definitionen.

Advertisements