follow[[X*]]

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

follow[[X*]]

Beitrag von LordHoto » 9. Feb 2012 22:12

Ich habe eine Frage zur Definition der follow-Mengen.

Angenommen ich habe eine Produktion:

Code: Alles auswählen

X ::= (a Y)* ; Y
Weiterhin ist dieses gezeigte (a Y)* das Einzige solche Auftreten.

Wie sieht in diesem Fall follow[[(a Y)*]] aus? Mir ist hierbei nicht ganz klar was genau die Folien mit "die in der CFG nach X folgen können" gemeint ist. Konkret welche der der folgenden follow-Mengen ist korrekt:

1)

Code: Alles auswählen

 follow[[(a Y)*]] = {a,;}
2)

Code: Alles auswählen

 follow[[(a Y)*]] = {;}
Mittlerweile tendiere ich eher zu 2, da wohl gemeint ist welche Tokens folgen können, wenn die RE komplett geparst wurde. Für Aufklärung wäre ich dankbar :-).
Compiler 1 Tutor WS 12/13

Dennis Albrecht
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 222
Registriert: 4. Okt 2010 18:15

Re: follow[[X*]]

Beitrag von Dennis Albrecht » 9. Feb 2012 22:21

Du musst erstmal jede Stelle suchen, an der dein (aY)* steht und schauen, was dahinter noch kommt. Nach (aY)* kommt bei dir das Semikolon (schlecht gewählte Terminale!!!, Sonderzeichen sollte man für Beispiele nicht ohne Vorwarnung nutzen :D). Das a von (aY)* wird nicht in die follower-Menge aufgenommen, damit eindeutig entschieden werden kann, ob currentChar = starters[[(aY)*]] folgt und der Stern nochmal zuschlägt, oder ob dein (aY)* fertig ist und das Semikolon folgt.

Gruß

Antworten

Zurück zu „Archiv“