%% -*- mode: latex; TeX-master: "compilerbau.tex"; -*-

\begin{slide}{Attribut-Klassen und -Grammatiken}

\kopf{$ $Id: ag.tex,v 1.1 2011-10-16 14:06:16 waldmann Exp $ $}

Attribut-Grammatik: CF-Grammatik mit Regeln für Attribute

\begin{verbatim}
decl -> type ids { $2.typ = $1.typ }
type -> int { $$.typ = INT } 
     |  char { ... } 
ids  -> id , { 
          $1.action = new_symbol ( $1.name , $$.typ );
          $3.typ = $$.typ
        } ids  
     | id { ... }
\end{verbatim}

% $ 

Einschränkung auf 
\begin{itemize}
\item synthetische A.: hängen nur von A. der Kinder ab,
\item (links-)vererbte A.: hängen nur von A. des Vorgängers
  und der linken Geschwister ab.
\end{itemize}

\end{slide}

\begin{slide}{S- und L-Grammatiken}

L-Attribute: top-down berechnen

S-Attribute: bottom-up berechnen

Umwandlung von L- in S-Attribute
durch Änderung der Grammatik (Beispiel):

\begin{verbatim}
decl ->
      type id { $$.action = new_symbol ($2.name, $1.typ) ; 
                $$.typ = $1.typ ; }
    | decl , id { $$.action = new_symbol ($3.name, $1.typ) ; 
                  $$.typ = $1.typ ; }
\end{verbatim}

\end{slide}

