Eigener Interpreter in Python verarbeitet if-else nicht richtig

Ich habe für meine eigene Programmiersprache einen Interpreter in Python geschrieben. Funktioniert auch soweit alles, nur die if-else Funktionen nicht. Hier ist einmal der Code:
START
SET var(x) = 20

IF var(x) == 20:
SAY text(Variable is 20)
ELSE:
SAY text(Variable is not 20)
ENDIF

END
START
SET var(x) = 20

IF var(x) == 20:
SAY text(Variable is 20)
ELSE:
SAY text(Variable is not 20)
ENDIF

END
8 Replies
Bl4cklist🔥System
:hack: - Danke für deine Frage! › Unsere Community freut sich schon, dir bei deinem Problem weiterzuhelfen! Sei so lieb und unterstütze die Personen welche dir weitergeholfen in dem du die Antwort welche das Problem lösen konnte akzeptierst. - :accept: = Akzeptiert die Antwort und markiert dein Problem als gelöst. Alternativ kannst du auch /solved verwenden, falls du es selbst herausgefunden hast. Pushe deinen Post für mehr Aufmerksamkeit mit /push. ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
Raku | Felix 🐊
Raku | Felix 🐊OP14mo ago
Grade wird "Variable is not 20" ausgegeben, owohl die Variable ja 20 ist. Hat jemand vielleicht eine Idee warum? @Martin B. ツ, du vielleicht?
Laqco
Laqco14mo ago
hey ganz interessant, da ich mich selber gerade viel mit compilern beschäftige und interpreter sind da ja nicht mal so weit entfernt... direkt zum code eine sache: bitte benutz for statt while + inkrement 😭 xD außerdem: sowohl dein handle_say als auch dein parse_text checken den string und trimmen ihn ([5:-1]). wozu doppelt? xD Das einzige "neue" feature in parse_text ist der regex check, und den kannst du auch direkt in handle_say machen ^^ gut, ich geh mal nicht zu tief auf den code ein, sondern direkt auf deine frage: - erstens: deine condition ist ja "var(x) == 20". das wird also gesplittet in parts: ["var(x) ", "==", " 20"]. das heißt, dein var_name ist "var(x) " (man beachte das Leerzeichen am Ende)! - zweitens: dein stripping von var() machst du nur hier, beim setten aber nicht. das heißt, deine gespeicherte variable hat als namen "var(x)", du suchst aber nur nach "x" - drtittens: du trimmst auch deinen value_str nicht richtig: float(" 2") = 2.0 bleibt für value übrig, was offensichtlich ungleich der gespeicherten "20" (ja, man beachte den Datentyp str) ist! lösungsansatz gebe ich gerade bewusst nicht, einmal zum tüfteln für dich :D, und aus Zeitgründen meinerseits :// (ich schreib in knapp 8h ne Klausur und muss noch bissl lernen upsi) edit: wär gut wenn ich richtig lesen würde (auch in der klausur dann lol) - jetzt stimmt aber glaube ich alles edit2: gut nach einer viertel stunde geb ich jetzt die suche nach weiteren fehlern erstmal auf - fix erstmal die drei, und dann kannst du ja auch nochmal weitersuchen! debug logs helfen im übrigen immer extrem bei solchen aufgaben! es gibt bessere ansätze für interpreterbau, evtl. kann ich mal einen guide dazu schreiben... wenn ich denn generell mal die Zeit für guides finden würde ¯\_(ツ)_/¯ schreibs mir, falls es dich interessiert, gerne in den thread, weil ich weiß nicht ob ich mich in paar wochen bis monaten noch daran erinnern werde 😅
Raku | Felix 🐊
Raku | Felix 🐊OP14mo ago
Hey, joa, sowas wär doch gut. Aber jetzt erstmal Danke für die Hilfe. Optimiere mal.
Laqco
Laqco14mo ago
Klar, gerne! Für den Guide: Schreibs in meinen Post dazu, damit ich die Idee wiederfinde ^^ Wenn übrigens deine Frage gelöst ist, schließ die über den Button oben, ansonsten kannst du auch gerne weitere Fragen stellen :)
Raku | Felix 🐊
Raku | Felix 🐊OP14mo ago
Ich weiß wie man die schließt, aber will es jetzt grad eher nochmal offen lassen.
! Yannic
! Yannic14mo ago
langsam kannste aber schließen
Bl4cklist🔥System
- Problem selbst gelöst: Der Ersteller dieser Frage hat das Problem selbst gelöst.

Did you find this page helpful?