AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein wie bearbeitet ein Compiler if-Abfragen?
Thema durchsuchen
Ansicht
Themen-Optionen

wie bearbeitet ein Compiler if-Abfragen?

Ein Thema von dragi · begonnen am 31. Jan 2005 · letzter Beitrag vom 3. Feb 2005
 
PRehders

Registriert seit: 31. Okt 2003
Ort: Hamburg
42 Beiträge
 
#4

Re: wie bearbeitet ein Compiler if-Abfragen?

  Alt 1. Feb 2005, 07:32
Hallo dragi,

das ganze ist nicht schwierig, aber man muss etwas aufpassen und nachdenken. Da du etwas Quelltextmässiges haben wolltest, kann ich ja mal (grob) skizzieren, wie ein klassischer rekursiv-absteigender Compiler da rangeht. Ich nenne die Dinge mal mit den namen und N. Wirth, weil die meisten das wiedererkennen werden. Die ganzen sprachspezifischen Sonderdinge lass ich mal weg.

Das IF-Statement lautet z.B.: IF <Ausdruck> THEN <Anweisungen> ENDIF

Der Compiler sieht das IF und sagt sich: Aha, ein IF-Statement. Da folgt jetzt ein <Ausdruck>. Danach muss THEN folgen, danach <Anweisungen>, danach ein ENDIF.
Der Trick beim rekursiv-absteigenden Parser ist jetzt, dass das <Ausdruck> eben wieder eine Prozedur ist (genau wie <Anweisungen>).

Um deine Frage nach dem Operatoren-Vorrang zu beantworten, das geht so:

Ein <Ausdruck> ist <einfacher_Ausdruck> {<= <> < > <= >= <einfacher_Ausdruck>}

Ein <einfacher_Ausdruck> ist <Term> { + - <Term>}

Ein <Term> ist <Faktor> {* / <Faktor>}

Ein <Faktor> ist eine Variable, ein Literal, oder aber auch wieder ein <Ausdruck> in Klammern.
Die {} bedeuten hier null oder mehrere Wiederholungen. Jede Struktur (einfacher_Ausdruck, Term, Faktor) bekommt eine eigene Prozedur zum Parsen, die dann wieder die darunterliegenden teile aufruft.

In dieser Struktur wird im Speicher ein Baum aufgebaut, der den Ausdruck abbildet und danach in Code umgesetzt werden kann. Dadurch, dass ein <Faktor> wieder ein geklammerter Ausdruck sein kann, hat man eine rekursive Struktur.

Probier's mal mit X + Y * Z; dabei wird durch die Aufteilung in Term und Faktor automatisch der Ausdruck beim "+" aufgeteilt, und das "*" wird dem Y und dem Z zugeordnet, wo es ja auch hingehört.

Wenn du noch mehr Erläuterung brauchst, kannst Du dich ja nochmal melden. Ist am Anfang etwas verwirrend, aber wenn man es einmal kapiert hat, geht's recht leicht.

Viel Spass

Peter
Peter Rehders
Man sollte niemanden ernst nehmen, der sich ernst nimmt.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz