diff --git a/verfahren.pdf b/verfahren.pdf index 8647da9..3190cc7 100644 Binary files a/verfahren.pdf and b/verfahren.pdf differ diff --git a/verfahren.tex b/verfahren.tex index 2eafe2e..459859f 100644 --- a/verfahren.tex +++ b/verfahren.tex @@ -270,6 +270,27 @@ \end{itemize} \subsubsection{Sethi-Ullman-Algorithmus} +\begin{enumerate} + \item Baue DAG-Repräsentation von Befehlen, Variablen und Zwischenergebnissen auf + \item Wandle DAG durch Herausschneiden gemeinsamer Teilausdrücke in Wald um + \item Bestimme Ershov-Zahl $r$ (Anzahl der für Auswertung benötigten Register) rekursiv für jeden Teilbaum (vertausche Operanden bei kommutativen Operationen so dass möglichst viele Variablen direkt aus Speicher gelesen werden können):\\ + \begin{align*} + r(t_1\, \texttt{op}\, t_2) &= \begin{cases*} + r(t_1) + 1 & falls $r(t_1) = r(t_2)$\\ + \max(r(t_1), r(t_2)) & sonst + \end{cases*}\\ + r(v) &= \begin{cases*} + 1 & falls linker Operand\\ + 0 & falls rechter Operand + \end{cases*} + \end{align*} + \item Code-Erzeugung und Mitführung eines Stapels unbenutzter Register:\begin{enumerate} + \item Rekursives Traversieren des Ausdrucksbaums + \item Besuchen der Kinder nach absteigendem Registerbedarf + \item Generierung des Befehls für aktuellen Ausdruck + \end{enumerate} + \item Auftrennung des Baumes, wenn Teilbäume mehr Register als verfügbar benötigen $\rightarrow$ Teilbaum vor Auswertung des übrigen Baums im Speicher auswerten +\end{enumerate} \subsection{Ohne Registerzuteilung}