Befunge-Shell

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Hallo,

vielleicht erinnert sich der eine oder andere noch an meine Piet-Shell (Rebecca ;)). Etwas äquivalentes habe ich die letzten Tage auch für Befunge-93 geschrieben: Bitbucket-Repo. Hier eine Beispiel-Session:

Code: Alles auswählen

simon@imac:~/python/hodgepodge (hg)-[default]-% ./befunge_shell.py
>>> show_stack
[]
>>> 5
>>> 5
>>> *
>>> 3
>>> *
>>> 5
>>> 2
>>> *
>>> show_stack
[75, 10]
>>> 2
>>> *
>>> show_stack
[75, 20]
>>> +
>>> 2
>>> +
>>> show_stack
[97]
>>> help
List of all available commands (type "help <command>")
======================================================

Befunge Commands
----------------
0  2  4  6  8  +  *  %  `  <  v  _  "  \  .  #  ~
1  3  5  7  9  -  /  !  >  ^  ?  |  :  $  ,  &  @

Additional helper functions
----------------------------
show_stack  show_pc  quit  help

>>> help ,
Pop value and output as ASCII character
>>> ,
a
>>> help show_stack
print the content of the stack
>>> show_stack
[]
Edit: Ich muss noch einige Exceptions abfangen, z.B. immer wenn ``self.stack.pop()`` aufgerufen wird, kann der stack ja leer sein -> IndexError.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

derdon hat geschrieben:vielleicht erinnert sich der eine oder andere noch an meine Piet-Shell (Rebecca ;)).
Hey, klar! :mrgreen:

Auf den ersten Blick sieht Befunge-93 vom Konzept her ja so aehnlich aus wie Piet...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Update: Jetzt gibt es keinen Traceback mehr, wenn versucht wird, bei einem leeren Stack den ``pop``-Befehl auszuführen. Dafür wird eine Warnung ausgegeben (keine Fehlermeldung, die mit "Error" beginnt, weil der Befunge93-Interpreter bei dem Code "$@" gar keine Meldung ausgibt).
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wäre noch cool, wenn der Interpreter optional eine Datei als Argument annehmen könnte.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Es ist nur eine Shell, kein Interpreter. Der Interpreter kann auf http://catseye.tc/projects/befunge93/ heruntergeladen werden. Da es eine interaktive Shell ist, die jeden Befehl einzeln interpretiert und weder Zeilen- noch Spaltennummern kennt, kann ich gar nicht die Befehle #, p und g unterstützen (und habe es auch gar nicht vor). Was sollte also ein "./befunge_shell.py test.bef" deiner Meinung nach bewirken?
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Verzeihung, dass ich deine Shell auf eine Stufe mit Programmen, die sowohl interaktiv als auch ausführend funktionieren, gestellt habe...
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Dann lag wohl ein Missverständnis vor. Mein vorgestelltes Projekt dient als *Hilfe-Werkzeug* und zum *Schritt-für-Schritt-Debuggen* von Befunge-Skripten. Ich hätte wohl gleich im ersten Post erklären sollen, dass es nicht alle Befehle von Befunge unterstützt und ausschließlich als interaktive Shell gedacht ist.
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

War's auch. Ich hab das Ding nur gesehen, mir danach Infos zu Befunge angeguckt und auf Wikipedia so ein Hello-World Programm mit Richtungswechsel gesehen. Da dachte ich mir, wäre doch cool, wenn dein Programm das auch könnte. Es hätte ja auch ein (abgespeckter) Befunge-Interpreter in Python sein können, weil bei so esoterischem Kram denke ich halt direkt an Lolcode und Konsorten, die ja auch ganz gerne in anderen Sprachen implementiert werden. ;)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Es gibt auch bereits einen Befunge-Interpreter, der in Python geschrieben wurde (den Code dazu habe ich mir übrigens nicht angeguckt). Also wollte ich nicht noch einen schreiben. "Do one thing and do it well" — das war wenigstens mein Ziel :P
Antworten