Seite 1 von 1

HÜ #1 A1.2

Verfasst: 14. Nov 2011 18:35
von Echo
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

Re: HÜ #1 A1.2

Verfasst: 15. Nov 2011 16:00
von Jens Huthmann
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.

Re: HÜ #1 A1.2

Verfasst: 23. Nov 2011 19:24
von LordHoto
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 ;-).

Re: HÜ #1 A1.2

Verfasst: 24. Nov 2011 10:34
von Jens Huthmann
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 ...

Re: HÜ #1 A1.2

Verfasst: 3. Feb 2012 11:03
von itportal2
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.

Re: HÜ #1 A1.2

Verfasst: 3. Feb 2012 16:01
von Jens Huthmann
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.