\begin{slide}{Daten-Fluß-Analyse}

bestimmt für jeden Code-Block:
\begin{itemize}
\item gelesene Variablen
\item geschriebene Variablen
\end{itemize}

ermöglicht Beantwortung der Fragen:
\begin{itemize}
\item ist Variable $x$ hier initialisiert?
\item wann wird Variable $y$ zum letzten mal benutzt?
\item ändert sich Wert des Ausdrucks $A$?
\end{itemize}

\end{slide}

\begin{slide}{Datenfluß (II)}

Problem: zur exakten Beantwortung müßte man Code ausführen.
(Bsp: Verzweigungen, Schleifen)

\begin{verbatim}
while ( .. ) {
  int x = 3;   int y;
  if ( .. ) { x = 2 * y; } // ??
  else      { y = 2 * x; } 
}
\end{verbatim}

Ausweg: Approximation (sichere Vereinfachung) 
durch \emph{abstrakte Interpretation},
die Mengen der initialisierten/benutzten/geänderten Variablen
je Block berechnet (d. h. als Attribut in Syntaxbaum schreibt)

z. B. bei Verzweigungen beide Wege \glqq gleichzeitig\grqq\ nehmen

weiteres Beisp. f. abst. Interpretation: Typprüfung
\end{slide}
