Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - problem bei Parser programierung
*Eldorado - Mi 27.07.11 22:59
Titel: problem bei Parser programierung
Hi,
Ich versuche gerade einen eigenen mathe parser zu programieren.
Jetzt habe ich aber das problem, das ich immer einen Fehler bekomme, wobei ich keine ahnung habe, wie der zustande kommen kann.
Vllt. weiß einer von euch ja mehr.
Diese Funktion soll die Multiplikationen und Divisionen lösen.
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: 38: 39: 40: 41: 42: 43:
| function Punkloesung(Rechnung:string):string; var i,l,k,n:integer; var hold1,hold2,res,op1,op2:string; var erg:real; begin hold1:=#0; hold2:=#0; k:=1; l:=1; for i:=1 to length(Rechnung) do begin if (Rechnung[i] = '*') or (Rechnung[i] = '/') then begin while (Rechnung[i-l] <> '+') and (Rechnung[i-l] <> '-') and (Rechnung[i-l] <> '*') and (Rechnung[i-l] <> '/') and (l <> 0) do inc(l); while (Rechnung[i+k] <> '+') and (Rechnung[i+k] <> '-') and (Rechnung[i+k] <> '*') and (Rechnung[i+k] <> '/') and (k <> length(Rechnung)) do inc(k); end; if (i-l > 1) then begin for n:=1 to i-l do hold1[n]:=Rechnung[n]; end; if (length(Rechnung)-(i+k) > 1) then begin for n:=1 to length(Rechnung)-(i+k) do hold2[n]:=Rechnung[i+k+n]; end; for n:=1 to l do op1[n]:=Rechnung[i-l+n-1]; for n:=1 to k do op2[n]:=Rechnung[i+n]; if (Rechnung[i] = '*') then erg:=StrToFloat(op1)*StrToFloat(op2) else erg:=StrToFloat(op1)/StrToFloat(op2); for n:=1 to i-l do res[n]:=Rechnung[n]; res:=res+FloatToStr(erg); for n:=i+k to length(Rechnung) do res[length(res)+1]:=Rechnung[n]; end; result:=res; end; |
Ich bekomme folgenden Fehler:
http://vvcap.net/db/PpfdaiUlG9mZyoNfT6XK.htp
Und werde auf Zeile 29 Rausgeschmissen : /
grüße
Eldorado
Moderiert von
Gausi: Code- durch Delphi-Tags ersetzt
jaenicke - Mi 27.07.11 23:06
op1 ist in Zeile 30 noch leer, du versuchst aber auf Buchstaben in dem (nicht existenten) String zuzugreifen. Das kann nicht gut gehen.
Du kannst z.B. vorher die Länge setzen, damit die Buchstaben schon existieren.
Delete - Do 28.07.11 00:04
Was ist ein Paser?
*Eldorado - Do 28.07.11 09:20
Ihr wisst genau was ich meine :roll:
jaenicke hat folgendes geschrieben : |
op1 ist in Zeile 30 noch leer, du versuchst aber auf Buchstaben in dem (nicht existenten) String zuzugreifen. Das kann nicht gut gehen.
Du kannst z.B. vorher die Länge setzen, damit die Buchstaben schon existieren. |
Stimmt, hätte ich auch selber bemerken können : /
ssb-blume - Do 28.07.11 09:57
Hallo,
wenn Du alleMöglichkeiten (Klammern usw) nutzen willst, mache folgendes:
1. Umwandeln in polnische Notation (mittels Stack leicht)
2. Trennung von Rechenzeichen und Variablen auslesen
3. auswerten und rechnen.
Geht ganz leicht, allerdings machen unäre Operanden etwas Probleme.
mandras - Do 28.07.11 12:27
Was genau soll der Parser tun?
Ich hab hier noch einen selbstgebauten den ich mal
für Formeln in Edits geschrieben habe
Delete - Do 28.07.11 14:15
*Eldorado hat folgendes geschrieben : |
Ihr wisst genau was ich meine :roll: |
Wir schon, aber die Suche nicht. Die Suche würde deinen Beitrag nie finden, wenn man nach Parser sucht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!