![]() |
||
| Bonsai |
Einführung
Python
Bonsai-Assembler
Übersetzungsschablonen
Assemblerprogramme
Compiler
Maschinensprache
Architektur
Mikroprogrammierung
Binäre Codierung
Hardware
Bau
Simulation
Baukasten
debug
386-Assembler
Betriebssystem
ET-3400
Profi5E
Glossar
Util
Literatur
Holzcomputer
Lehrplan
Links
|
|
|
Interpreter |
Das Simulations-Programm speichert Bonsai-Programme in folgendem Format ab. Zuerst kommen die Befehle, der Opcode besteht aus 3 groß geschriebenen Zeichen, dann folgt die Adresse (2 Zeichen, rechtsbündig). Die Datenzeilen werden durch ein # eingeleitet, dann folgt der Registerinhalt als Zahl (5 Zeichen, rechtsbündig). Es folgen Kommentarzeilen, die mit ; eingeleitet werden.
TST 2 JMP 4 HLT DEC 2 INC 1 JMP 1 # 2 # 3 ;einfaches Additionsprogramm ; ; ; ; ; ; ; ; ;
bonsai.py, ADD1.BON,DIVMODPY.BON
[';Daten', 130, 7, 18, 4, 0, 0] inc(3+4): 1068 dec(3+4): 1046 jmp(3+1): 1806 tst(3+3): 1016 Takte: 28118
28118 Takte brauchen ca. 0,03s.
Der Interpeter boni.py benötigt ply. Der Interpreter kann Eingaben der folgenden Form verarbeiten, dh. man kann symbolische Namen und relative Sprünge (jmp (-3) springt 3 Stellen rückwärts) verwenden. Solchermaßen erstellte 'Code-Schnipsel' sind damit leicht zu einem Ganzen zusammenbaubar.
a = 3 b = 2 tst b jmp (+2) jmp (+4) dec b inc a jmp (-5) print a print b
Wer Genaueres wissen will, kann sich die Sprachdefinition (aus parser.out) ansehen.
Rule 0 S' -> bon Rule 1 bon -> befehl bon Rule 2 bon ->Rule 3 befehl -> inc Rule 4 befehl -> dec Rule 5 befehl -> jmp Rule 6 befehl -> tst Rule 7 befehl -> zuw Rule 8 befehl -> print Rule 9 inc -> INC VAR Rule 10 dec -> DEC VAR Rule 11 jmp -> JMP NUMBER Rule 12 jmp -> JMP ( NUMBER ) Rule 13 tst -> TST VAR Rule 14 zuw -> VAR = NUMBER Rule 15 print -> PRINT VAR Terminals, with rules where they appear ( : 12 ) : 12 = : 14 DEC : 10 INC : 9 JMP : 11 12 NUMBER : 11 12 14 PRINT : 15 TST : 13 VAR : 9 10 13 14 15 error : Nonterminals, with rules where they appear befehl : 1 bon : 1 0 dec : 4 inc : 3 jmp : 5 print : 8 tst : 6 zuw : 7 Parsing method: LALR