Einfacher Code-Generator mit getreg
This commit is contained in:
		
							parent
							
								
									2748a80fed
								
							
						
					
					
						commit
						16f83b0f0f
					
				
							
								
								
									
										
											BIN
										
									
								
								verfahren.pdf
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								verfahren.pdf
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -238,6 +238,36 @@ | ||||
| \end{itemize} | ||||
| 
 | ||||
| \subsubsection{Einfacher Code-Generator mit \texttt{getreg}} | ||||
| \begin{itemize} | ||||
| 	\item arbeitet auf maximalen Grundblöcken | ||||
| 	\item alle Variablen vor und nach maximalem Grundblock im Speicher | ||||
| 	\item Durchlaufen aller Zwischencode-Befehle und Mitführen von Register- und Adressdeskriptoren | ||||
| 	\item \begin{equation*} | ||||
| 		\texttt{getreg (}x \leftarrow y\, \texttt{op}\, z \texttt{)}= \begin{cases*} | ||||
| 		R & falls $y$ alleine in $R$ steht und $y$ nicht mehr benötigt wird\\ | ||||
| 		U & falls es unbenutztes Register $U$ gibt\\ | ||||
| 		R & \parbox[t]{.65\textwidth}{falls $x$ in einem Register stehen muss/soll, schreibe Inhalt von $R$ in Speicherplätze aller darin enthaltenen Variablen}\\ | ||||
| 		M_x & sonst | ||||
| 		\end{cases*} | ||||
| 	\end{equation*},\\ | ||||
| 	dazu zusätzlich Deskriptoren anpassen | ||||
| 	\item Für jeden Befehl $x \leftarrow y\, \texttt{op}\, z$:\begin{enumerate} | ||||
| 		\item $L_x = \texttt{getreg (}x \leftarrow y\, \texttt{op}\, z \texttt{)}$ | ||||
| 		\item Wähle $L_y$ aus Adressdeskriptor von $y$ (möglichst Register) | ||||
| 		\item Falls $y$ noch nicht in $L_x$, generiere $L_x = L_y$ | ||||
| 		\item Wähle Platz $L_z$ aus Adressdeskriptor von $z$ (möglichst Register) | ||||
| 		\item Generiere $L_x = L_x\, \texttt{op}\, L_z$ | ||||
| 		\item Deskriptoren aktualisieren:\begin{enumerate} | ||||
| 			\item $L_x$ in Adressdeskriptor von $x$ eintragen | ||||
| 			\item Falls $L_x$ Register, zugehörigen Registerdeskriptor aktualisieren | ||||
| 		\end{enumerate} | ||||
| 		\item Falls keine weitere Verwendung von $y$, $z$ im Grundblock und in Register,\begin{enumerate} | ||||
| 			\item ggf. Werte in Speicher zurückschreiben | ||||
| 			\item Register von $y$ bzw. $z$ freigeben | ||||
| 			\item Deskriptoren aktualisieren | ||||
| 		\end{enumerate} | ||||
| 	\end{enumerate} | ||||
| \end{itemize} | ||||
| 
 | ||||
| \subsubsection{Sethi-Ullman-Algorithmus} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Marco Ammon
						Marco Ammon