Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - RechenParser
safak67 - Fr 05.06.09 10:14
Titel: RechenParser
Ich soll für mein Taschenrechner ein Parser schreiben(programmieren). Ich habe aber keine Ahnung wie das geht, wenn mir jemand helfen könnte wäre das cool.. Ich bin noch ein Noob was programmieren angeht aber ich muss das machen. wenn einer vllt ein beispiel quelltext hat oder wäre das gut.. der rechner soll z.B 5+4*2+4-3 rechnen können.
jaenicke - Fr 05.06.09 10:25
Zum Thema Parser gibt es ja schon einige Beiträge. Am besten ist es vermutlich, wenn du einfach erst einmal die Priorität der Rechenzeichen ignorierst. Dann kannst du einfach von vorne nach hinten zeichenweise durchgehen und bei einem Rechenzeichen die letzte Zahl entsprechend auslesen und verrechnen.
Das heißt, wenn du an den Operator kommst, nimmst du die Zahl davor und rechnest damit weiter.
Eins muss ich dazu aber doch noch sagen: Bevor das einen Sinn hat, solltest du deinen bisherigen Quelltext wirklich komplett verstanden haben. Sonst brauchst du gar nicht erst anfangen, dann wird das nur ein Herumraten.
Wenn dir da also etwas noch nicht klar sein sollte (und davon gehe ich nach deinen bisherigen Posts eigentlich sicher aus), dann frag in deinen Threads dazu erst einmal nach und wage dich dann an einen Parser...
zuma - Fr 05.06.09 10:31
gemeint ist bestimmt, das du die Eingabe '5+4*2+4-3', die du als String bekommst, zerlegst und die einzelnen Zeichen auswertest. Also, was ist eine Zahl, was ein Operator.
Dazu kannst du den String Zeichenweise abklappern und dir dann die Zahlen und die Operatoren daraus in lokalen Variablen merken. wenn du alles 'geparst' hast, brauchst du 'nur' noch mit den Zahlen zu rechnen.
Beispiele für einen Taschenrechner findest du hier sicher genug, wenn du mal die SuFu benutzt.
@Jaenicke: Sicher hast du recht, aber als noob muss er nicht sofort perfekten Code schreiben, eine 'tut erstmal'-Lösung wird ihm mehr helfen, evtl. Freude am Programmieren zu bekommen. Wenn er die erstmal hat, wird er sich auch von alleine tiefer in die Materie 'einwühlen'.
safak67 - Fr 05.06.09 11:29
Hi also Beispiele für ein Taschenrechner habe gefunden, aber leider kein Beispiel von einem Parser. Also ich hab schon was zusammengebau aber der ist nicht ganz vollständig und fehlerhaft..
ffgorcky - Fr 05.06.09 18:34
Also ich denke, dass das Ganze für eine einfache, einzeilige Aufgabe doch in etwa so gehen müsste:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| function IsInt(Check: String): Boolean; begin try StrToInt(Check); Result := True; except Result := False; end; end;
function endwertLinearBerechnen(Rechenaufgabe:String):Integer; var momentaneZahl:string; ersterWert:bool; rechenArt, momentanerWert, vorherigerWert:Integer;begin ersterWert:=true; zahl1:=0; for i:=0 to Length(Rechenaufgabe)-1 do begin if isInt(Rechenaufgabe[i]) then if ersterWert then momentaneZahl:=momentaneZahl+Rechenaufgabe[i]; else begin vorherigerWert:=momentanerWert; momentanerWert:=StrToInt(momentaneZahl); momentaneZahl:=''; case Rechenaufgabe[i] of '/':rechenArt:=3 'x':rechenArt:=2 '+':rechenArt:=1 '-':rechenArt:=0 end; ersterWert:=false; end; end; end; |
Wobei da ja immer die Frage ist, ob Du linear rechnen willst oder Punkt-vor-Strichrechnung beachten möchtest, was mit meinem Ansatz so (noch?) nicht geht...
...und Kommas kennt der auch noch nicht!
Ist aber noch in Bearbeitung! - Muss nur jetzt erst mal essen gehen!
- oder hilft Dir das schon weiter?
Ach vergiss meine Möglichkeit hier am besten wieder ganz!
Ich steige da im Moment leider nach meinem Abendbrot selber schon nicht mehr durch!
- Was natürlich auch an meinem am 23.7.2006 (durch Motorradunfall) abhanden gekommenden Kurzzeitgedächtnis liegen kann!...
alzaimar - Fr 05.06.09 18:46
Ohne Punkt-Vor-Strich-Rechnung ist das doch sinnlos. Ein Parser, der die Grundrechenarten beherrscht, ist nicht trivial. Ich hätte mir sowas als Anfänger nicht zugetraut.
Tropby - Fr 05.06.09 19:58
safak67 ist in beiden Themen der ersteller. Also denke ich, dass das andere Thema nicht die Lösung bietet.
EDIT:
Ich habe hier irgendwo einen Praser für soetwas liegen. Er ist zwar aus den anfängen meiner Programmierung aber er geht (so einiger maßen). Wenn ich den finde o.O dann kann ich den vielleicht nachher mal hochladen... Nur selber machen solltest du das ja schon ^^
Jakob_Ullmann - Fr 05.06.09 20:13
Ein Beispiel für nen Parser gibt's hier:
http://delphi.zsg-rottenburg.de/parser.html. Ist auch alles schön erklärt. Ich bin mir allerdings nicht sicher, ob Rekursion für nen Anfänger das richtige Thema ist...
jaenicke - Sa 06.06.09 00:27
Da das hier noch nicht verlinkt ist, hier gibts u.a. auch noch nen (langen) Crosspost zu dem Taschenrechner, da gehts mittlerweile um ein ähnliches Thema:
http://www.delphipraxis.net/topic159067.html
ffgorcky - Sa 06.06.09 09:08
Da wird wohl bei beiden
safak67 der gleiche Ersteller sein.
Solch ein Name fiele mir zumindest nicht so schnell ein...
Es wäre also schön, wenn er auf das Thema als Crosspost verwiesen hätte!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!