Sethi-Ullman-Algorithmus

This commit is contained in:
Marco Ammon 2020-06-26 14:10:44 +02:00
parent 16f83b0f0f
commit 0b075d38d7
2 changed files with 21 additions and 0 deletions

Binary file not shown.

View File

@ -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}