\begin{slide}{Konkreter und abstrakter Syntaxbaum}

\begin{itemize}\itemsep0pt
\item
  konkrete Syntax: die tatsächlich benutzte Grammatik
\item
  konkreter Syntaxbaum: Ableitungsbaum für diese Grammatik
\item
  abstrakter Syntaxbaum: 
  nur die \emph{wesentlichen} Knoten davon
\end{itemize}

Beispiel (konkret)
\begin{verbatim}
expression = 
  | { compound } plus lpar [left]:expression
       comma [right]:expression rpar;
\end{verbatim}
Beispiel (abstrakt)
\begin{verbatim}
  | { compound } plus [left]:expression
                      [right]:expression ;
\end{verbatim}

\end{slide}


\begin{slide}{Informationen im Syntaxbaum}

Parser benutzt \emph{kontextfreie} Grammatik

jedes Programm besitzt auch 
\emph{kontextabhängige} Eigenschaften

$\to$ müssen durch Durchlaufen des gesamten
Syntaxbaumes berechnet werden.

Beispiele für solche Informationen:
\begin{itemize}
\item Sichtbarkeiten (public, private, usw.)
\item Typen
\item Datenfluß-Eigenschaften (Lebensdauer) von Variablen
\item Speicher- (Register-)Zuordnung
\end{itemize}

\end{slide}
