hi,
ich habe mir einen kleine Stringpraser nachgebaut für +, -, * und / an sich nichts schweres, doch auch nach dem Studium dieses Artikels
Artikel für einen komplexeren Praser stellt sich mir die Frage wie man das Problem bei mehrfacher Subtraktion lösen kann z.B. 100-2-2-2-2-2 = 90 nach dem Praser kommt als Ergebnis allerdings 98 heraus, was auch nach dem Methoden des Prasers logisch ist, denn er berechnet ja immer eine "Seite" des Terms, wobei er ja eigentlich 100-10 rechnen müsste.
Hat jemand von euch sich schon mal über dieses Problem gedanken gemacht oder vllt einen Lösungsvorschlag?
Hier ist noch mal der Code meines Prasers:
Delphi-Quellcode:
function Termberechnen(const Term: String):Extended;
var
tmp1, tmp2: string;
begin
if Pos('+', Term) > 0 then
begin
tmp1:= Trim(Copy(Term,1,Pos('+', Term)-1));
tmp2:= Trim(Copy(Term,Pos('+', Term)+1, MaxInt));
result:= Termberechnen(tmp1)+Termberechnen(tmp2);
end
else
begin
if Pos('-', Term) > 0 then
begin
tmp1:= Trim(Copy(Term,1,Pos('-', Term)-1));
tmp2:= Trim(Copy(Term,Pos('-', Term)+1, MaxInt));
result:= Termberechnen(tmp1)-Termberechnen(tmp2);
end
else
begin
if Pos('*', Term) > 0 then
begin
tmp1:= Trim(Copy(Term,1,Pos('*', Term)-1));
tmp2:= Trim(Copy(Term,Pos('*', Term)+1, MaxInt));
result:= Termberechnen(tmp1)*Termberechnen(tmp2);
end
else
begin
if Pos('/', Term) > 0 then
begin
tmp1:= Trim(Copy(Term,1,Pos('/', Term)-1));
tmp2:= Trim(Copy(Term,Pos('/', Term)+1, MaxInt));
result:= Termberechnen(tmp1)/Termberechnen(tmp2);
end
else
begin
if Term <> '' then
begin
result:= StrToFloat(Term);
end
else
begin
result:= 0;
end;
end;
end;
end;
end;
end;
grüße
guitar1