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.