140 likes | 259 Views
ALP II: Objektorientierte Programmierung Sommersemester 2006. Elfriede Fehr, Mohammad Al Saad. WHILE-Anweisungen: x := 0; x := x + 1; x := x – 1; while x y do <Anweisungen> end. Befehlssatz der Registermaschine: zero i succ i pred i je i, j, m goto m.
E N D
ALP II: Objektorientierte ProgrammierungSommersemester 2006 Elfriede Fehr, Mohammad Al Saad
WHILE-Anweisungen: x := 0; x := x + 1; x := x – 1; while x y do <Anweisungen> end Befehlssatz der Registermaschine: zero i succ i pred i je i, j, m goto m Teil I: Grundlagen der BerechenbarkeitDie Programmiersprache WHILE unddie universelle Registermaschine
Übersetzung von WHILE-Programmen in Registermaschinenprogramme:Erster Schritt: Erzeugen der Symboltabelle stBeispiel für eine Symboltabelle
Zweiter Schritt: Anwendung des Übersetzungsschemas (Ü) Achtung:m ist die Adresse des ersten Befehls, der zur While-Schleife gehört und k ist die Adresse des ersten Befehls, der nicht mehr zur While-Schleife gehört.
Beispiel: Fakultätsfunktion Funktionales Programm (Haskell): f 0 = 1 f x = x * f (x - 1) Imperatives Programm (in der Sprache WHILE): y := 1; h:= 0; while x ≠ h do y := x * y; x := x - 1; end
Übersetzung des WHILE-Programms in ein Registermaschinenprogramm
Übersetzung von WHILE nach Java Übersetzung von Java in Bytecode analog zur Übersetzung von WHLIE in Registermaschinenprogramme. Illustration unter http://www.artima.com/insidejvm/applets/EternalMath.html
Ein vollständiges Java-Programm public class Fak { //Aufruf: Fak x , Ausgabe: Fakultät von x = Ergebnis //Hauptprogramm public static void main (String[] args) { // Deklaration aller benötigter Variablen int x, y, h; // Eingabe von x x = Integer.parseInt (args[0]); // Berechne y := Fakultät von x y = 1; h = x; while (h != 0) { y = h * y; h = h - 1; } // Ausgabe des kommentierten Ergebnisses System.out.println("Fakultät von " + x + " = " + y); } }
Type: PrimitiveType ReferenceType PrimitiveType: NumericType boolean NumericType: IntegralType FloatingPointType IntegralType: one of byte short int long char FloatingPointType: one of float double James Gosling et al.: The Java Language Specification, sun microsystems 2005 Datentyp: PrimitiverTyp VerweisTyp PrimitiverTyp: NumerischerTyp boolean NumerischerTyp: GanzzahligerTyp GleitkommaTyp GanzzahligerTyp: einer von byte short int long char GleitkommaTyp: einer von float double Teil II: Datentypen in Java Syntax
Arithmetische Operationenerklärt auf allen numerischen Typen
Vergleichsoperationen erklärt auf allen numerischen Typen, die beiden letzten auch auf boolean
Typanpassung • Implizit von engeren zu weiteren Typen • Explizit in beide Richtungen Definition der Relation „enger“ ( ): byte short int long float double char int Bemerkung: Die Relation ist transitiv. Explizite Typanpassung des Wertes eines Ausdrucks A an einen Typ t durch Anwendung des einstelligen Operators (t) auf den Ausdruck A. Beispiele: byte b = 9; b = b + 1; ist illegal! byte b = 9; b = (byte) (b+1); ist legal. int x = 6, y = 10; double q = x / y; der Wert von q ist 0.0 double q = (double)x / y; der Wert von q ist 0.6
Syntaxregeln für Bedingte Anweisungen und Schleifen CondStmt: if (Exp) Stmt [ else Stmt ] WhileStmt: while (Exp) Stmt ForStmt: for ( [Init]; [Exp]; [Update]) Stmt