i

Codegenerator

Aufgabe des Codegenerators

Der Codegenerator hat die Aufgabe, strukturierte MiniPython-Programme in Programme einer (maschinennahen) Sprache zu übersetzen. Betrachte noch einmal das folgende Beispielprogramm.

x = 2
y = 3
p = 0
while y != 0:
    p = p + x
    y = y - 1
#end

Der Code-Erzeuger verarbeitet als Quellcode das zugehörige strukturierte MiniPython-Programm:

[
  ['=', ('VAR', 'x'), [('ZAHL', '2')]],
  ['=', ('VAR', 'y'), [('ZAHL', '3')]],
  ['=', ('VAR', 'p'), [('ZAHL', '0')]],
  ['while', ['!=', ('VAR', 'y'), ('ZAHL', '0')], 
  [
    ['=', ('VAR', 'p'), ['+', ('VAR', 'p'), ('VAR', 'x')]], 
    ['=', ('VAR', 'y'), ['-', ('VAR', 'y'), ('ZAHL', '1')]]]
  ]
]

Diesen Quellcode transformiert der Code-Erzeuger in die Zielsprache (hier: BonsaiAssembler):

0: tst 0
1: jmp 3
2: jmp 5
3: dec 0
4: jmp 0
5: inc 0
6: inc 0
7: tst 1
8: jmp 10
9: jmp 12
10: dec 1
11: jmp 7
12: inc 1
13: inc 1
14: inc 1
15: tst 2
16: jmp 18
17: jmp 20
18: dec 2
19: jmp 15
20: tst 3
21: jmp 23
22: jmp 25
23: dec 3
24: jmp 20
25: tst 1
26: jmp 28
27: jmp 29
28: inc 3
29: tst 3
30: jmp 32
31: jmp 95
32: tst 2
33: jmp 35
34: jmp 39
35: dec 2
36: inc 4
37: inc 5
38: jmp 32
39: tst 5
40: jmp 42
41: jmp 45
42: dec 5
43: inc 2
44: jmp 39
45: tst 0
46: jmp 48
47: jmp 52
48: dec 0
49: inc 4
50: inc 5
51: jmp 45
52: tst 5
53: jmp 55
54: jmp 58
55: dec 5
56: inc 0
57: jmp 52
58: tst 2
59: jmp 61
60: jmp 63
61: dec 2
62: jmp 58
63: tst 4
64: jmp 66
65: jmp 69
66: dec 4
67: inc 2
68: jmp 63
69: tst 1
70: jmp 72
71: jmp 76
72: dec 1
73: inc 4
74: inc 5
75: jmp 69
76: tst 5
77: jmp 79
78: jmp 82
79: dec 5
80: inc 1
81: jmp 76
82: dec 4
83: tst 1
84: jmp 86
85: jmp 88
86: dec 1
87: jmp 83
88: tst 4
89: jmp 91
90: jmp 94
91: dec 4
92: inc 1
93: jmp 88
94: jmp 20
95: tst 3
96: jmp 98
97: jmp 100
98: dec 3
99: jmp 95
100: hlt
#0
#0
#0
#0
#0
#0

Der Codegenerator verwendet hierzu die im letzten Abschnitt entwickelten Code-Schnipsel für die einzelnen Bauteile eine MiniPython-Programms und setzt sie passend zusammen.

Die Abbildung zeigt noch einmal das Verhalten des Codegenerators.

Codegenerator[1]

Aufgabe 1

Benutze das Simulationsprogramm, um BonsaiAssembler-Code zu vorgegebenen MiniPython-Programmen zu erzeugen.

Demoprogramm[2]

Quellen

Suche

v
7.4.3.3
www.inf-schule.de/rechner/compiler/automatisierung/codegenerator
www.inf-schule.de/7.4.3.3

Rückmeldung geben