Die Suche im Syntaxbaum lässt sich wesentlich vereinfachen, wenn die
anzuwendende Regel durch das jeweils betrachtete Zeichen (oder eine feste Zahl
von Folgezeichen) des zu erkennenden Ausdrucks eindeutig festgelegt ist.
In diesem Fallen lassen sich nämlich Sackgassen im Syntaxbaum vermeiden.
Wir betrachten dies am Beispiel der Grammatik G2 für wohldefinierte Klammerterme:
S ::= ( S ) S Regel 1
S ::= - (nichts) Regel 2
Prozedurkopf bleibt gleich Die Regeln sind als Unter- prozeduren realisiert. Regel 1 der Grammatik G2 Regel 2 der Grammatik G2 (ersetzen durch nichts) Hier sieht man, dass die anzu- wendende Regel von Symbol des zu erkennenden Textes an der entsprechenden Stelle abhängt. Backtracking entfällt. |
procedure TForm1.Baumsuche(Eingabe : String; erzeugter_text : String; stelle : Integer; var ok : Boolean); var probetext :String; s_stelle : Integer; procedure regel1(var stimmt:Boolean); begin probetext := erzeugter_text; ersetze('S','(S)S',probetext); baumsuche(Eingabe,probeknoten,probetext,s_stelle+1,stimmt) end; procedure regel2(var stimmt:Boolean); begin probetext := erzeugter_text; ersetze('S','',probetext); baumsuche(Eingabe,probeknoten,probetext,stelle,stimmt) end;(* of Proc regel 3 *) begin (* of Proc baumsuche *) if erzeugter_text = Eingabe then ok := true else begin ok := false; if (stelle <= length(Eingabe)) then begin s_stelle := pos('S',erzeugter_text); if s_stelle > 0 then begin if Eingabe[s_stelle]='(' then regel1(ok) else regel2(ok); end end end ; end; |
![]() |
|
![]() |
|
![]() |
Zur
nächsten Seite
![]() |
© 2001 LK 13 If und G. Kubitz | Hannah-Arendt-Gymnasium, Lengerich |