BuK-Übung08 G2

Aus ProgrammingWiki
Archivierte Version vom 2011-05-25T18:03:01+00:00. Aktuelle Version

Inhaltsverzeichnis

RAM-Berechenbarkeit

Aufgabe

Zeigen Sie, dass die Multiplikationsfunktion für natürliche Zahlen RAM-berechenbar ist.

Lösung

GOTO-Interpreter

Aufgabe

Verwenden Sie VCC aus AtoCC, um einen Interpreter für GOTO-Programme zu entwickeln.

Lösung

Ein GOTO-Programm besteht aus Marken M_i denen jeweils eine Anweisung A_i getrennt durch einen Doppelpunkt (:). Marken, auf die kein GOTO-Befehl verweist, können weggelassen werden.

M_1 : A_1; M_2 : A_2; ...; M_k : A_k

Es stehen 5 verschiedene Anweisungen zur Auswahl:

  • Wertzuweisungen: x_i := x_j \pm c (x_i := 0, wenn x_j - c < 0)
  • unbedingter Sprung: GOTO M_i
  • bedingter Sprung: IF x_i = c THEN GOTO M_i
  • Stop: HALT

x_{i,j} sind Variablen, c ist eine Konstante (c \in \mathbb{N}_0)

Ein GOTO-Programm zur Berechnung von 3 * 5. Das Ergebnis befindet sich in x_1

     x2 := x2 + 3
M1 : IF x2 = 0 THEN GOTO M2
     x1 := x1 + 5
     x2 := x2 - 1
     GOTO M1
M2 : HALT

Für die Entwicklung des Interpreters mit VCC haben wir zuerst mit kfG-Edit diese Grammatik erstellt.

G = (N, T, P, s)
N = {P, LINES, LINE, MARKER, INSTRUCTION, ASSIGNMENT, VARIABLE, OPERATOR, JUMP, IF_THEN}
T = {:, M, KONSTANTE, HALT, :=, X, +, -, GOTO, IF, =, THEN}
P = {
  P           -> LINES 
  LINES       -> LINE | LINE LINES 
  LINE        -> MARKER : INSTRUCTION 
               | INSTRUCTION 
  MARKER      -> M KONSTANTE 
  INSTRUCTION -> HALT | IF_THEN | ASSIGNMENT | JUMP 
  ASSIGNMENT  -> VARIABLE := VARIABLE OPERATOR KONSTANTE 
  VARIABLE    -> X KONSTANTE 
  OPERATOR    -> + | - 
  JUMP        -> GOTO MARKER 
  IF_THEN     -> IF VARIABLE = KONSTANTE THEN JUMP 
}
s = P

Der daraufhin entwickelte Interpreter kann im CompilerWiki getestet werden.