\begin{slide}{Übung: Beispiele für Übersetzer}

Java: 
\begin{verbatim}
javac Foo.java # erzeugt Bytecode (Foo.class)
java Foo       # führt Bytecode aus (JVM)
\end{verbatim}
Einzelheiten der Übersetzung:
\begin{verbatim}
javap -c Foo   # druckt Bytecode
\end{verbatim}

C:
\begin{verbatim}
gcc -c bar.c   # erzeugt Objekt(Maschinen)code (bar.o)
gcc -o bar bar.o # linkt (lädt) Objektcode (Resultat: bar)
./bar         # führt gelinktes Programm aus
\end{verbatim}
Einzelheiten:
\begin{verbatim}
gcc -S bar.c # erzeugt Assemblercode (bar.s)
\end{verbatim}

Aufgaben:
\begin{itemize}
\item
  geschachtelte arithmetische Ausdrücke in Java und C:
  vergleiche Bytecode mit Assemblercode
\item
  vergleiche Assemblercode für Intel und Sparc
  (einloggen auf goliath, dann gcc wie oben)
\end{itemize}



gcc für Java (gcj):
\begin{verbatim}
gcj -c Foo.java # erzeugt Objektcode
gcj -o Foo Foo.o --main=Foo # linken, wie oben
\end{verbatim}

\begin{itemize}
\item Assemblercode ansehen, vergleichen
\begin{verbatim}
gcj -S Foo.java # erzeugt Assemblercode (Foo.s)
\end{verbatim}
  
\item
  Kompatibilität des Bytecodes ausprobieren 
  zwischen Sun-Java und GCJ (beide Richtungen)

\begin{verbatim}
gcj -C Foo.java # erzeugt Class-File (Foo.class)
\end{verbatim}

\end{itemize}



\end{slide}
