Praktikumsaufgabe Sommersemester 2022

Die Programmiersprache KLX

KLX könnte für Komputer Language X stehen; eine andere Erklärung geht von der amerikanischen Aussprache aus: X wie ecks, und KLX wie Klecks.

Die Sprache KLX

In dieser Aufgabe wollen wir eine Sprache entwickeln und implementieren, mit der einfache (und vielleicht auch komplizierte) Farbflächen also Kleckse programmiert werden können. Diese Sprache nennen wir KLX.

Ein einfaches "Programm" in dieser Sprache könnte so aussehen:

/* ein primitiver KLX */

Rechteck;

Ein etwas komplizierteres etwa so:

// Die Variablen x und y
x = 200;
y = 200;

// ein Klecks, der Parameter Schleifen und anderes
// illustriert
procedure kr(w,l)
{ [x,y] Kreis;
  [x,y]  rgb(1,1,0) Sektor Winkel: w/2;
  for i=w to 359 step w do 
    [x,y]  < i  blau Sektor Winkel: w/2;

  [150+x,y-100] %200 Rechteck;
  [200+x,y-50] 
    { for i=1 to l step 1 do 
        %100/i  < i*-20 [0, 50] rgb(1, i*1/l,0) Rechteck ;
    }
}

// derselbe Klecks
// mit verschiedenen Parametern in verschiedener Größe
    kr(45,10);
%20 kr(90,3);


// Ein rekursiver Klecks
procedure q(n, i)
{ if 0<n then {
    rgb(i,1,i*0.5) Rechteck;
    if 0=i then j=1; else j=0;
    %50 { [0,100]   q(n-1,i);
          [100,100] q(n-1,j); 
          [100,0]   q(n-1,i);        
        }
  }
}

// und so sieht der rekursive Klecks dann aus:
[100,400] %200 q(10,1);

Diese Beispiele vermitteln etwas von der Intention der Sprache KLX.

  • Es gibt primitive Kleckse (Rechteck, Kreis, Sektor).
  • Kleckse können verschoben ([10,200]) werden.
  • Kleckse können skaliert (%20) werden.
  • Kleckse können rotiert (< 90) werden.
  • Kleckse können gefärbt (blau, rot, rgb(...)) werden.
  • Es gibt zusammengesetzte Kleckse ({}).
  • Es gibt Variablen, Prozeduren und Kontrollstrukturen.
  • Kommentare im C++ Stil sind möglich.
Die Einzelheiten sind dabei eher zufällig. Man könnte genau so gut auch Englisch, Russisch oder Spanisch nehmen, sich an Python oder FORTRAN orientieren und die Kleckse auch anders formulieren. Hauptsache es ist klar, was gemeint ist, d.h. wir haben lesbare Programme.

Es wird daher hier ausdrücklich auf eine Spezifikation der Sprache KLX verzichtet. Die Spezifikation der Sprache ist Teil ihrer Aufgabe und Sie sind dabei ganz frei zu tun und zu lassen was Sie für richtig erachten.

Trotzdem sei eine Warnung angebracht. Ich habe mir natürlich bei obigen Beispielen einiges gedacht, und wenn Sie eigene Wege gehen werden Sie sicher auch auf eigene Schwierigkeiten treffen, mit denen Sie vorher nicht gerechnet haben. Es sei deshalb empfohlen einmal mit einer Sprache nach obigem Muster zu beginnen und dann eigene Ideen experimentell zu entwickeln.

Aufgabenstellung Teil 1

Analysieren Sie die obigen KLX Programme und identifizieren Sie die verschiedenen Token. Schreiben Sie einen lexical Analyser mit (f)lex.

Aufgabenstellung Teil 2

Analysieren Sie die obigen KLX Programme und identifizieren Sie die verschiedenen Strukturen. Schreiben sie eine yacc Grammatik, die die Sprache KLX erkennt.

Aufgabenstellung Teil 3

Was nützt die schönste Sprache, wenn sie niemand versteht!

Wir brauchen also einen Übersetzer, der Programme in der Sprache KLX übersetzt in eine Sprache, die der Computer versteht. Üblicherweise werden deshalb Programme in die Maschinensprache übersetzt. In unserem Fall ist die Maschinensprache eines Intel 8086 eher ungeeignet, weil ein Intel 8086 nicht über die Fähigkeit verfügt Graphik auszugeben. Wir wählen daher die virtuelle Maschine eines PostScript Interpreters und übersetzen KLX nach PostScript. Ein beliebiger PostScript Viewer oder ein PostScript fähiger Drucker kann dann benutzt werden um das Programm auszuführen.

Die obigen Beispiele sind deshalb gleich rechts mit einem Bild versehen auf dem man die Übersetzung sehen kann. Hinter dem Bild steht ein Link auf den übersetzten Code (PostScript), den man sich einerseits in einem Texteditor oder aber auch in einem PostScript Viewer anschauen kann.

Die dritte Aufgabe ist also: Generieren Sie PostScript Code. Beschränken Sie sich vorerst auf ganz einfache KLX Programme. Wir werden den KLX Übersetzer im Laufe des Praktikums schrittweise erarbeiten.