![]() |
Probleme mit der Umgekerten Polnischen Notation...
Hallo!
Ich habe ein Problem mit dieser procedure:
Delphi-Quellcode:
Das Ziel dieser Procedure ist es das ein array in dem z.b. folgendes steht:
procedure SortTokensToUPN;
var tmp:array of string; i:integer; begin // gleiche Länge wie Tokens: SetLength(tmp,Length(Tokens)); // ersten beiden übernemen: tmp[0]:=Tokens[0]; tmp[1]:=Tokens[1]; // rest durchgehen und Sortieren: for i:=2 to High(Tokens) do begin // Steht i am Ende der Funktion? if i<High(Tokens) then // Ist es eine Zahl und steht links vom Operator? if TryStrToInt(Tokens[i],hallo) and (not TryStrToInt(Tokens[i+1],hallo)) then tmp[i]:=Tokens[i] else // steht i am Anfang der Funktion? if i>2 then begin if TryStrToInt(Tokens[i],hallo) and TryStrToInt(Tokens[i-1],hallo) then tmp[i-1]:=Tokens[i]; end else // Ist es ein Operrator? if not TryStrToInt(Tokens[i],hallo) then if i=High(Tokens) then begin // Ein Operrator ist am ende der Funktion => Syntax Error! Writeln('Unerwarteter Opperator: "'+Tokens[i]+'" => Syntax Error!'); exit; end else tmp[i+1]:=Tokens[i]; end; for i:=0 to High(Tokens) do Tokens[i]:=tmp[i]; end; tst = 1 + 2 ( jede Zeile ein Eintrag) Es in das hier umzuwandeln: tst = 1 2 + Doch unerklärlicherweise steht in dem array danach anscheinend nur folgendes: tst = 1 Hat einer von euch eine ahnung warum das so ist??? gruß Teekeks |
Re: Probleme mit der Umgekerten Polnischen Notation...
Dein Code sieht mir für den allgemeinen Fall etwas zu simpel gestrickt aus. Wenn im Ausdruck auch mehr als + und - vorkommen kann, wirst du um einen richtigen
![]() |
Re: Probleme mit der Umgekerten Polnischen Notation...
Mein Problem ist das ich wirklich nur ein Parser zur Polnischen Notation brauche... es soll nichts gerechnet werden.
Wobei ein richtiger Parser besser währe da dies ein Teil eines von mir momentan entwickelten Compiler ist. (Ja ich weiß das ist eine menge Arbeit...) Könntet ihr mir in dem falle etwas speziell empfehlen? Ich werde jetzt mich weiter auf die suche begeben... danke schonmal... |
Re: Probleme mit der Umgekerten Polnischen Notation...
Ich sollte dazu sagen: Ich benutze Lazarus v0.9.26b
|
Re: Probleme mit der Umgekerten Polnischen Notation...
Zitat:
Du kannst dir also auf jeden Fall einen Matheparser als Vorlage nehmen, auch Lazarus sollte da kein großes Hindernis sein. Zitat:
Für mathematische Ausdrücke und weitere simple Grammatiken genügt ein handgestrickter ![]() |
Re: Probleme mit der Umgekerten Polnischen Notation...
Auf du noch nicht direkt, ich bin aber momentan schon dabei mich damit näher zu beschäftigen...
Eigentlich sollte das Oben sowas in der richtung werden (nur momentan noch simpler gestrickt) deswegen frage ich ja wo mein fehler in der Logik ist das der nicht alles einliest... wenn ihr mir da helfen könntet... gruß Teekeks |
Re: Probleme mit der Umgekerten Polnischen Notation...
Sorry, aber deine Prozedur ist mir zur verkorkst bei der Hitze, da schreib ich lieber schnell eine neue.
Delphi-Quellcode:
function IsOperator(const AValue: string);
var dummy: Integer; begin Result := not TryStrToInt(AValue, dummy); end; procedure Swap(var AValue1, AValue2: string); var temp: string; begin temp := AValue1; AValue1 := AValue2; AValue2 := tmp; end; procedure SortTokensToUPN; var i:integer; begin i := High(Tokens); if (i > 2) and IsOperator(Tokens[i]) then begin // Ein Operrator ist am ende der Funktion => Syntax Error! Writeln('Unerwarteter Opperator: "' + Tokens[i] + '" => Syntax Error!'); Exit; end; Dec(i); while i > 2 do begin if IsOperator(Tokens[i]) then Swap(Tokens[i], Tokens[i + 1]); Dec(i); end; end; |
Re: Probleme mit der Umgekerten Polnischen Notation...
Hallo!
Danke! Du hast mir schonmal sehr geholfen. Ich kann gerade das nur nicht ausprobieren weil ich grade nur am Schleptop bin... Werde aber noch berichten ob das so alles gleich klappte oder ich noch was umändern musste. Du hast mir aufjeden Fall schonmal aus meinen Verkorksten Gedankengängen geholfen. Nochmals Danke! Gruß Teekeks |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz