Sethi-Ullman-Algorithmus
This commit is contained in:
parent
16f83b0f0f
commit
0b075d38d7
BIN
verfahren.pdf
BIN
verfahren.pdf
Binary file not shown.
@ -270,6 +270,27 @@
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\subsubsection{Sethi-Ullman-Algorithmus}
|
\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}
|
\subsection{Ohne Registerzuteilung}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user