HÜ #1 A1.2

Echo
Mausschubser
Mausschubser
Beiträge: 46
Registriert: 9. Okt 2009 12:27

HÜ #1 A1.2

Beitrag von Echo » 14. Nov 2011 18:35

Hallo,

bei Aufgabe 1.2 fehlt die zugehörige Produktionsregel für den Array AST.
Ich gehe mal davon aus, dass einfach die V-name Produktionsregel (Buch S. 13) ersetzt wird durch:
V-name ::= Identifier | Identifier[Expression]

Ist das so richtig?

EDIT: Und dem IfCommand auf der letzen Seite der Übung fehlt noch ein Command AST Kindknoten.
EDIT2: Müssten die SequentialCommands innerhalb z.B. des "while" nicht in "begin Command end" Blöcken stehen? Ein while erlaubt ja nur ein folgendes "single-Command"... Sry, die Fragenliste wird immer länger =(

Schönen Abend noch,

Tobias
Danke fürs lesen.

Jens Huthmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 192
Registriert: 10. Nov 2011 19:42

Re: HÜ #1 A1.2

Beitrag von Jens Huthmann » 15. Nov 2011 16:00

Echo hat geschrieben:Hallo,
bei Aufgabe 1.2 fehlt die zugehörige Produktionsregel für den Array AST.
Ich gehe mal davon aus, dass einfach die V-name Produktionsregel (Buch S. 13) ersetzt wird durch:
V-name ::= Identifier | Identifier[Expression]

Ist das so richtig?
Ja, das ist so richtig.
Echo hat geschrieben:Und dem IfCommand auf der letzen Seite der Übung fehlt noch ein Command AST Kindknoten.
Ja, hier haben wir tatsächlich einen SkipCommand vergessen, welcher einem leeren Befehl entspricht.
Echo hat geschrieben:Müssten die SequentialCommands innerhalb z.B. des "while" nicht in "begin Command end" Blöcken stehen? Ein while erlaubt ja nur ein folgendes "single-Command"
Nein, die "begin" und "end" Tokens tauchen zwar in der konkreten Grammatik auf um ein korrektes Parsen zu ermöglichen. In der abstrakten Grammatik hingegen welche für den AST verwendet wird, sind diese wie auch die Unterscheidung zwischen Command und SingleCommand u.a. nicht mehr notwendig.

Vergleichen sie dazu die Grammatiken im Buch auf Seite 8 bzw 13.

LordHoto
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 14. Dez 2009 17:00

Re: HÜ #1 A1.2

Beitrag von LordHoto » 23. Nov 2011 19:24

Jens Huthmann hat geschrieben:
Echo hat geschrieben:Und dem IfCommand auf der letzen Seite der Übung fehlt noch ein Command AST Kindknoten.
Ja, hier haben wir tatsächlich einen SkipCommand vergessen, welcher einem leeren Befehl entspricht.
Wenn ich die Syntax von mini-triangle im Buch richtig verstehe, drüfte es ein solches "SkipCommand" gar nicht geben? Von daher meine Frage, wie soll das in der normalen Grammatik aussehen? So ist es doch sehr unklar wie wir das im Programmcode sonst hinschreiben sollten (also entweder "if ... else skip" oder "if ... else" oder noch andere Möglichkeiten ;-).
Compiler 1 Tutor WS 12/13

Jens Huthmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 192
Registriert: 10. Nov 2011 19:42

Re: HÜ #1 A1.2

Beitrag von Jens Huthmann » 24. Nov 2011 10:34

Suchen Sie sich eine passende (und nicht zu komplizierte Variante) aus. In der Aufgabe ist die Position des Skip für uns bei der Korrektur recht offensichtlich wenn sie richtig ist.

Vergessen Sie aber keine Schlüsselwörter wie if, then, else, begin, end ...

Benutzeravatar
itportal2
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 236
Registriert: 25. Jan 2008 15:34
Wohnort: Darmstadt

Re: HÜ #1 A1.2

Beitrag von itportal2 » 3. Feb 2012 11:03

Woher kommen in der Musterlösing der umschließende let-Block und die Deklarationen? Die sind in dem AST nicht drin?

Und wieso gibt es einen Semicolon vor jedem "end" Schlüsselwort? Das ";" ist lediglich ein Trennzeichen dachte ich - somit ist diese Zeichenfolge nicht aus der konkreten Grammatik herleitbar.

Jens Huthmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 192
Registriert: 10. Nov 2011 19:42

Re: HÜ #1 A1.2

Beitrag von Jens Huthmann » 3. Feb 2012 16:01

itportal2 hat geschrieben:Woher kommen in der Musterlösing der umschließende let-Block und die Deklarationen? Die sind in dem AST nicht drin?
Die stammen vom Copy&Paste des verwendeten Beispielprogramms. Ein Fehlen dieser wurde aber nicht als Fehler bewertet.
itportal2 hat geschrieben:Und wieso gibt es einen Semicolon vor jedem "end" Schlüsselwort? Das ";" ist lediglich ein Trennzeichen dachte ich - somit ist diese Zeichenfolge nicht aus der konkreten Grammatik herleitbar.
Der tatsächliche Triangle Parser akzeptiert auch diese Semikolons. Korrekt ist natürlich das hier kein Semikolon stehen sollte.

Antworten

Zurück zu „Archiv“