Seite 1 von 1

Befunge-Shell

Verfasst: Freitag 30. Juli 2010, 01:27
von derdon
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.

Re: Befunge-Shell

Verfasst: Freitag 30. Juli 2010, 08:47
von Rebecca
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...

Re: Befunge-Shell

Verfasst: Freitag 30. Juli 2010, 18:24
von derdon
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).

Re: Befunge-Shell

Verfasst: Samstag 31. Juli 2010, 04:45
von snafu
Wäre noch cool, wenn der Interpreter optional eine Datei als Argument annehmen könnte.

Re: Befunge-Shell

Verfasst: Sonntag 1. August 2010, 11:02
von derdon
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?

Re: Befunge-Shell

Verfasst: Sonntag 1. August 2010, 14:22
von snafu
Verzeihung, dass ich deine Shell auf eine Stufe mit Programmen, die sowohl interaktiv als auch ausführend funktionieren, gestellt habe...

Re: Befunge-Shell

Verfasst: Sonntag 1. August 2010, 20:00
von derdon
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.

Re: Befunge-Shell

Verfasst: Sonntag 1. August 2010, 20:14
von snafu
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. ;)

Re: Befunge-Shell

Verfasst: Sonntag 1. August 2010, 20:19
von derdon
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