Erster Meilenstein: Codeerzeugung

Deadline: Freitag, 18. Mai 2001, 1200 Uhr
 

Im ersten Projektabschnitt soll ein Backend implementiert werden. Ausgehend von der Zwischendarstellung soll eine Textdatei erzeugt werden, die dann als Eingabe für Jasmin dient. Diese Zwischendarstellung wird durch ein bereitgestelltes Frontend aufgebaut. Die Schnittstelle zum Frontend ist im nachstehenden Beispielcode veranschaulicht:

/* /home/stud/mlangen/TassKaf/examples/Main.java */

import frontend.Analyzer;
import frontend.parser;
import frontend.Yylex;
import java_cup.runtime.*;
import lib.Node;
import lib.GDLVisualizer;
import java.io.*;

public class Main
{
  public static void main(String argv[])
  {
    try {
      // allocate a parser object
      Yylex lex=new Yylex(System.in);
      parser parse_obj=new parser(lex);

      // get the syntax tree
      Node root=(Node)parse_obj.parse().value;

      // this way, a vcg file is created
      GDLVisualizer.createFile("SYNTAX.gdl", root);

      // do semantic analysis
      Analyzer a=new Analyzer(root);
      a.analyze();
      GDLVisualizer.createFile("ANALYZED.gdl", root);

      // the vgc-graph has to be extended in order to
      // write a file with declaration references
      GDLVisualizer.setWriteDecls(true);
      GDLVisualizer.createFile("EXTENDED.gdl",
                               a.getExtendedTree());

      // emit jasmin assembler code

    } catch (java.lang.Exception ex) {
      System.err.println("Exception: " + ex.getMessage());
    }
  }
}
 

In diesem Beispielprogramm wird das Quellprogramm von der Standardeingabe (stdin) gelesen, damit sollte der erzeugte Compiler wie folgt aufgerufen werden:

% java Main < filename
 

Ihre Aufgabe besteht darin, ein Backend zu schreiben, daß Code für den Jasmin Assember erzeugt, der semantisch mit dem Eingabeprogramm äquivalent sein sollte ;) Eine Beschreibung der Zwischendarstellung, wie sie das Frontend erzeugt, ist hier verfügbar.

Im Frontend werden verschiedene GDL-Dateien erzeugt. Diese können mittels xvcg bzw. aiSee betrachtet werden. Es ist anzuraten, sich die Visualisierung der Zwischendarstellung mit diesem Tool anzuschauen.

Die Textdatei, welche durch das Backend erzeugt wird, enthält die Eingabe für den Jasmin Assembler. Ein Blick auf dessen Dokumentation dürfte also nicht schaden. Jasmin abstrahiert von einigen Sachen, mit denen man sich rumschlagen müßte, wenn man Klassendateien direkt schreiben würde. So muß man sich zum Beispiel um Konstantentabellen oder die Berechnung von Sprungzielen keine Sorgen machen. Jasmin liest eine Assemblerdatei und erzeugt eine Klassendatei, indem man folgendes tippt:

% jasmin filename

Die erzeugte Klassendatei kann mittels Suns Java-Interpreter java getestet werden.

Wer einen näheren Blick wagen möchte, dem sei der ClassFileBrowser, eine Java-Applikation, mit der man Klassendateien betrachten und modifizieren kann, empfohlen. Er wurde von Andy Walter und Daniel Simon geschrieben.


Für dieses Teilprojekt nützliche Dokumente:



This page is maintained by Marc Langenbach. For questions and suggestions send email to mlangen@cs.uni-sb.de.
Last updated Apri 23 2001.