\begin{slide}{Überblick}

ein einfaches Compiler-Frontend


Quellen:
\begin{itemize}\itemsep 0pt
\item Kapitel 2 aus Drachenbuch
\item Code: \url{http://dragonbook.stanford.edu/dragon-front-source.tar}
\end{itemize}

Absicht:
\begin{itemize}\itemsep 0pt
\item sehen, wie es geht (alles \glqq von Hand programmiert\grqq)
\item Übungen: diesen Compiler verstehen und erweitern
\item später:  Nutzen von Werkzeugen und Theorie erkennen
\end{itemize}

\end{slide}

\begin{slide}{Beispiel}

\begin{tabular}{l|l}
\begin{minipage}{0.45\textwidth}
Eingabe ($\approx$ Java):
\begin{verbatim}
{ int i; 
  float prod; 
  float [20] a; 
  float [20] b;
  prod = 0;
  i = 1;
  do {
    prod = prod 
      + a[i]*b[i];
    i = i+1;
  } while (i <= 20);
}
\end{verbatim}
\end{minipage}
&
\begin{minipage}{0.4\textwidth}
Ausgabe 

(Drei-Adress-Code):

\begin{verbatim}
L1: prod = 0
L3: i = 1
L4: t1 = i * 8
    t2 = a [ t1 ]
    t3 = i * 8
    t4 = b [ t3 ]
    t5 = t2 * t4
    prod = prod + t5
L6: i = i + 1
L5: if i <= 20 goto L4
L2:
\end{verbatim}
\end{minipage}
\end{tabular}


\end{slide}

\begin{slide}{Aufbau}

  \begin{itemize}
  \item lexikalische Analyse
  \item syntaktische Analyse
  \item Zwischencode-Erzeugung
  \end{itemize}

  alle Teile benutzen: Symboltabelle(n)

\end{slide}


\begin{slide}{Gliederung}
  \begin{itemize}
  \item Syntax-Definition (Grammatiken)
  \item top-down parsing
  \item lexikalische Analyse
  \item Symboltabellen, Bereiche (scopes)
  \item Zwischencode-Erzeugung
  \end{itemize}

\end{slide}
