Kapitel 6

Höhere Programmiersprachen:

  • Syntax: erlaubte Programme
  • Semantik: abstrakte Maschine zur Ausführung
programm HP
  var A, B: integer;
(1)procedure P ( I: integer ): integer;
    var H: integer;
begin (2)
      if I <= 0
        then return 0
else H := 1 + P ( I - 1 ); (3)(4)
return H;
    end;
  begin
    read ( A ); B := P ( A ); (5)(6) write ( B );
  end.

Konturmodell - Maschine:

Konturmodell (abb6-1.jpg)
Abb. 6-1: Konturmodell
Maschine zur Ausführung von Maschinensprachprogrammen:
Die Maschine (abb6-2.jpg)
Abb. 6-2: Die Maschine
- Maschine für höhere Sprache H: Programmiersystem für H - Mit M Programmiersystem für H bilden Programmiersystem für H: Editor für H-Programme:
Interpretierer für HÜbersetzer:
H->M+BS
Übersetzer:
H->M+LZS+BS
Laufzeitsystem LZS Binder
Tab. 6-1
Lader und Binder: (Linker) Binden: statisches Binden dynamisches Binden ________________ COM/ActiveX Java => Komponenten Testhilfeprogramme Betriebssytem Maschine M Interpretierer Übersetzer / Compilierer Compilieren: - vorab - Just in Time Laufzeitsysteme / Libraries Zwischensprachen EARLY-Diagramme Algorithmus A in Sprache S
(abb6-2a.jpg)
Maschine mit Sprache M
(abb6-2b.jpg)
Algorithmus A in Sprache S mit Eingabe I und Ausgabe O
(abb6-2c.jpg)
Übersetzer von S1 nach S3 in M
(abb6-2d.jpg)
Übersetzer; Cross-Übersetzer:
(abb6-2e.jpg)
Interpretierer
(abb6-2f.jpg)
folgende Themen: - Daten - Ausdrücke - Prozeduren Daten - Variablen
var A:integer;
      B:char;
      R:real;
      V:record
           I:integer;
           B:set of {1..15};
          end;
       F:array[0..3]of integer;
type H=record
                suc:printer to H;
                Con:integer;
              end;
var P:printer to H;

begin
   P:new(H);
   P^.Con:=5;
   P^.Succ:=new(H);
   ...
   dispose;
   ...
   end.
dP=-21
dF=-19
ddF(i)=i*2
dV=-11
    ddF=0
    ddB=2
dR=-7
dB=-3
dA=-2
(abb6-3.jpg)
Abb. 6-3: Keller + Heap
Ausdrücke
ein Beispiel: (A+3)*B-100*C Strukturbaum:
Der Strukturbaum zum Beispiel (abb6-4.jpg)
Abb. 6-4: Der Strukturbaum zum Beispiel
Das Beispiel in POST-FIX-Notation: A 3 + B * 100 C * - Beispiel im AKKU-Maschinencode: AC:=A AC:=AC+3 AC:=AC*B H1:=AC Hilfsvariablen einführen AC:=100 AC:=AC*C H2:=AC AC:=H1 AC:=AC-H2 Optimierung: - HV-Verwendung - HV-Anzahl (Söhne vertauschen) (Reihenfolge vertauschen) Register-Maschine: Hilfsvariablen u.U. per Register Prozeduren und wieder ein Beispiel: program Pr; var X; procedure P(A,B:integer):integer; var H1,H2:integer; begin ... X:=H1; ... end; dx(A5):=dH1(A6) Veranschaulicht:
Prozeduren (abb6-5.jpg)
Abb. 6-5: Schachtelung der Prozedur
Optimierung: Daten- und Adreßregistereinsatz - Zwischenergebnisse - Laufvariablen in Schleifen - Schachtelbasisadressen - Feld-, Verbundbasisadressen Befehlssatz ausnutzen - spezielle Befehlstypen (In-/Dekrement, Schleifen) - spezielle Operandenzugriffsarten Ausdrucksberechnung - bool'sche Ausdrücke (Verzweigungskaskaden) - Mehrfachberechnungen vermeiden - Hilfsvariablenverwendung minimieren Schleifenoptimierung - Laufvariable, Abbruchkontrolle - Vorzielen invarianter Ausdrücke Basis: Programmanalyse - Datenflußanalyse - Symbolische Ausführung Probleme - goto - Seiteneffekte bei Prozeduren Ansatz - Basisblöcke in Block: Datenfluß zur Übersetzungszeit abschätzbar Übersetzerarchitektur
Ü-Architektur (abb6-6.jpg)
Abb. 6-6: Übersetzerarchitektur