HSG |
|
Der MiniPython-Compiler mpc.py benötigt das Modul PLY.
Der Aufruf (unter Windows 'python3' durch 'python' ersetzen)
python3 mpc.py divmod.py
erzeugt aus der Datei (bitte Blöcke mit #end beenden)
a = 23 b = 5 q = 0 r = a while r>=b: r = r-b q = q+1 #end print(q) print(r)
die Ausgabe
tst 1 jmp 4 jmp 8 dec 1 inc 4 inc 5 jmp 1 tst 5 jmp 11 jmp 14 dec 5 inc 1 jmp 8 tst 4 jmp 19 tst 2 jmp 27 jmp 26 tst 2 jmp 22 jmp 26 dec 4 dec 2 inc 6 jmp 14 inc 5 tst 6 jmp 30 jmp 34 dec 6 inc 4 inc 2 jmp 27 tst 5 jmp 37 jmp 53 dec 5 tst 2 jmp 41 jmp 45 dec 2 dec 4 inc 6 jmp 38 tst 6 jmp 48 jmp 51 dec 6 inc 2 jmp 45 inc 3 jmp 14 hlt # 23 a # 5 b # 0 q # 0 r # 0 __h1 # 0 __h2
Diese Ausgabe lässt sich natürlich mit
python3 mpc.py divmod.py > divmod.bon
in eine Datei umleiten.
Der Bonsai-Interpreter bi.py verarbeitet die Datei divmod.bon folgendermaßen:
mk@x2:~/Arbeitsfläche/Technotag2012$ python3 bi.py divmod.bon a = 23 , b = 5 , q = 0 , r = 0 , __h1 = 0 , __h2 = 0 186 inc 179 dec 320 jmp 0 jmp() 185 tst 1 hlt 871 gesamt a = 23 , b = 5 , q = 4 , r = 3 , __h1 = 0 , __h2 = 0
Mehr Unix-like kann man das Gleiche auch so erreichen, dass der Inhalt der Datei divmod.py in die Standardeingabe gegeben wird, wo er von dem Script mpc.py verarbeitet wird, dessen Ausgabe über das Pipe-Symbol in die Eingabe des Scripts bi.py umgeleitet wird.
mk@x2:~/Arbeitsfläche/Technotag2012$ <divmod.py ./mpc.py|./bi.py
Die Datei divmod.bon wird vom alten Bonsai-Programm nicht korrekt gelesen, da die Adresse aus dem 4. und 5. Zeichen einer Zeile bestimmt wird. Somit wird 'jmp 41' auf einmal zu 'jmp 4'. Wer ganz pragmatisch das Problem lösen will, lädt die Datei in einen einfachen Editor z.B. wordpad und löscht in allen Zeilen mit zweistelligen Adressen die Leerstelle vor der Adresse, z.B.
jmp 37 ---> jmp37
Mit Hilfe des Streaming-Editors sed kann man das auch automatisieren. gsed407x.zip stellt sed auch für Windows zur Verfügung.
sed -r 's/([a-z]{3}) ([0-9]{2})/\1\2/g' divmod.bon > dm_dos0.bon Syntax: sed 's/alt/neu/g'
Arbeitet man unter einer Unix-Umgebung, so wird die Datei dm_dos0.bon noch Unix-Zeilensprünge haben. Wieder hilft sed.
sed -r 's/$/\r/g' dm_dos0.bon > dm_dos.bon
Die Datei dm_dos.bon hat ein Format, das das alte Bonsai-Programm (gestartet z.B. in der DosBox) verarbeiten kann.