| Der rekursive Abstieg ist eine Methode, die im Compilerbau angewendet wird. Ein Compiler, der diese Technik benützt, gehört zu den schnellsten
Compilern überhaupt. Die Voraussetzung für den rekursiven Abstieg im Compilerbau ist, daß es sich bei der Grammatik der Programmiersprache um eine
LL1-Sprache handelt. Werden neue Sprachen entwickelt, so ist es kein Problem eine LL1-Sprache zu erstellen. Viele ältere Programmiersprachen sind
jedoch keine LL1-Sprachen (z.B. 'C') und daher nicht für diesen Algorthmus geeignet. Als Beispiel für den rekursiven Abstieg ist hier eine kleine Grammatik angeschrieben und der dazugehörende Teil des rekursiven Abstiegs.
Vereinfachte Grammatik für arithmetischer Ausdrücke:
S = E ";".
E = T {"+" T}.
T = P {"*" P}.
P = ident | number.
Der dazugehörige Syntaxanalysator mit rekursivem Abstieg (in Pascal)
Procedure S ();
begin
success := true;
{ Nächstes Symbol lesen }
NewSymbol(symbol, value);
{ Überprüfen ob es sich um einen Ausdruck handelt,
wenn nicht sofort zurückkehren }
E;
if not success then
return;
{ Handelt es sich bei dem Symbol um einen ";" }
if symbol <> semicolon then
begin
success := false;
return;
end;
NewSymbol(symbol, value);
{ Handelt es sich bei dem Symbol um einen eof }
if symbol <> eof_Symbol then
begin
success := false;
return end;
end;
end; { S }
|