Meine Aufgabe ist es, zunächst zu berechnen und FOLLOW-Sets für die folgende Grammatik:die FOLLOW Computing setzt
P ::= S CS .
S ::= (int , int)
CS ::= C CS | epsilon
C ::= left int | right int | low C
Ich habe die folgenden ersten Sätze:
FIRST(S) = {'('}
FIRST(C) = {left,right,low}
FIRST(CS) = {left,right,low,epsilon}
FIRST(P) = FIRST(S) = {'('}
Für folgende Sätze I berechnet:
Ich versuchte meine Lösung mit ersten und folgen Sätze Generator und was ich mit FOLLOW (S) bekam war: FOLLOW(S) = {'.', left, right, low}
. Ist die Lösung des Generators richtig und warum? Ich berechnete meine Lösung mit Formel: FOLLOW(S) = FIRST({left,right,low} concat FOLLOW(P)) = {left, right, low}
. Kann mir bitte jemand erklären, warum meine/generator Lösung nicht stimmt und überprüfen ob ich alles andere richtig verstanden habe? Ich möchte auch wissen, warum ich int
in keinem ersten oder folgen Satz habe und ob das mit Bau Parser später in Ordnung sein wird. Danke
Vielen Dank :) Ich denke, ich verstehe jetzt völlig, wie FIRST und FOLLOW funktioniert. Ich habe nur noch eine Frage. Gemäß diesen Regeln, wie FOLLOW-Sets zu bestimmen sind, kann ich keine Regel sehen, die ein '.' Enthalten würde. in mein FOLLOW (S) set ... Muss ich bei solchen leeren Produktionen nur vorsichtig sein oder gibt es tatsächlich eine Regel, die das bestimmt? – Luki
Es ist die Regel, die ich im zweiten Absatz meiner Antwort, "P → S CS." Wenn CS leer ist, folgt der Punkt unmittelbar auf S. Oder vielleicht verstehe ich nicht, was Sie meinen. Die FOLLOW-Menge eines Nichtterminals ist die Menge von Token, die mir als nächstes nach einer Instanz dieses Nichtterminals als nächstes kommen können. – rici