\documentclass[9pt]{beamer}

\usepackage[utf8x]{inputenc}
\usepackage[english]{babel}
\usepackage{arev,t1enc}

\include{fu-beamer-template}

\titleimage{fu_500}
\title[Compilerbau]
{Zwischenpr\"{a}sentation 1}

\author{B.~B\"{o}hm \and A.~N\"{u}\ss{}lein \and M.~Popov \and T.~Rakowski \and J.~Rekittke \and A.~Sulfrian}

\institute[FU Berlin]
{Freie Universität Berlin}

\date[May~26,~2009]
{Softwareprojekt Compilerbau, SoSe 2009}

\renewcommand{\footlinetext}{\insertshortinstitute, \insertshorttitle, \insertshortdate}
%\AtBeginSubsection[]
%{
%  \begin{frame}<beamer>{Outline}
%    \tableofcontents[currentsection,currentsubsection]
%  \end{frame}
%}


\begin{document}

\begin{frame}[plain]
	\titlepage
\end{frame}


\begin{frame}{Gruppe: Quellsprache}
	\begin{itemize}
		\pause\item\color{fu-green} erfinden der Quellsprache
		\begin{itemize}
			\pause\item\color{fu-green} Paradigma: imperativ, prozedural
			\pause\item\color{fu-green} Typsystem: static, weak, infered
		\end{itemize}
		\pause\item\color{fu-green} erstellen der EBNF
	\end{itemize}
\end{frame}

\begin{frame}[fragile]{Gruppe: Quellsprache (Beispiel)}
	\begin{verbatim}
fun fib[a]
    if a < 2
        @1
    end
    @(fib[a-1] + fib[a-2])
end

fun main[]
    sum = 0
    i = 1
    while i <= 10
        sum = sum + fib[i]
        i = i + 1
    end
    @sum
end
	\end{verbatim}
\end{frame}

\begin{frame}{Gruppe: Schnittstellen}
	\begin{itemize}
		\pause\item Lexer $\Rightarrow$ Parser:
		\pause\begin{itemize}\item\color{fu-green} Tokenstream\end{itemize}
		\pause\item Parser $\Rightarrow$ Zwischencode:
		\pause\begin{itemize}\item\color{fu-green} AST\end{itemize}
		\pause\item Zwischencode $\Rightarrow$ Codegenerator:
		\pause\begin{itemize}\item\color{orange} 3AC\end{itemize}
		\pause\item Codegenerator $\Rightarrow$ Assemblercode:
		\pause\begin{itemize}\item\color{fu-green} vereinfachte MIPS ISA\end{itemize}
	\end{itemize}
\end{frame}

\begin{frame}{Alex: Lexikalische Analyse}
	\begin{itemize}
		\pause\item Tokens:
		\begin{itemize}
			\pause\item\color{fu-green} NUMBER, BOOL, IDENT
			\pause\item\color{fu-green} ASSIGNMENT
			\pause\item\color{fu-green} OPERATOR
			\pause\item\color{fu-green} FUN, RETURN
			\pause\item\color{fu-green} WHILE, IF, ELSE
			\pause\item\color{fu-green} LBRAK, RBRAK, LPAREN, RPAREN, NEWLINE, COMMA, END
		\end{itemize}
		\pause\item\color{fu-green} \"{U}bersetzungsregeln mit Regul\"{a}ren Ausdr\"{u}cken
	\end{itemize}
\end{frame}

\begin{frame}{Alex: Typsystem}
	\begin{itemize}
		\pause\item\color{fu-red} Typinferenz bei Initialisierung von Variablen
		\pause\item\color{fu-red} Statische Typzuweisung in der Symboltabelle
		\pause\item\color{fu-red} ggf. automatische Typkonvertierung
	\end{itemize}
\end{frame}

\begin{frame}{Michael: Syntaxanalyse/Parser}
	\begin{itemize}
		\pause\item Top-Down-Parsing
		\pause\item Ableitungsbaum:
		\begin{itemize}
			\pause\item\color{orange} Program(Node)
			\pause\item\color{orange} Function(Node)
			\pause\item\color{orange} Statement(Node)
			\pause\item\color{orange} IfStatement(Statement)
			\pause\item\color{orange} WhileStatement(Statement)
			\pause\item\color{orange} ReturnStatement(Statement)
			\pause\item\color{orange} AssignStatement(Statement)
			\pause\item\color{orange} FunctionCall(Statement)
			\pause\item\color{orange} Expression(Node)
			\pause\item\color{orange} UnaryExpression(Expression)
			\pause\item\color{orange} BinaryExpression(Expression)
		\end{itemize}
	\end{itemize}

\end{frame}

\begin{frame}{Michael: Semantische Analyse}
	\begin{itemize}
		\pause\item\color{fu-red} Aufbau der Symboltabelle
		\pause\item\color{fu-red} G\"{u}ltigkeitsbereiche der Bezeichner \"{u}berpr\"{u}fen
		\pause\item\color{fu-red} eindeutige Zuweisungen von Bezeichnern
	\end{itemize}
\end{frame}

\begin{frame}{Andreas: Zwischencode}
	\begin{itemize}
		\pause\item Drei-Adress-Code (SSA Form):
		\begin{itemize}
			\pause\item\color{fu-green} Bin\"{a}re Operationen: ADD, SUB, MUL, DIV, MOD, AND, OR
			\pause\item\color{fu-green} Un\"{a}re Operationen: NOT, MINUS
			\pause\item\color{fu-green} Zuweisungen: ASSIGN
			\pause\item\color{orange} Bedingte Spr\"{u}nge: BEQ, BNE, BLT, BGE, BLE, BGT
			\pause\item\color{orange} Nichtbedingte Spr\"{u}nge: JMP
			\pause\item\color{orange} Funktionsaufrufe: PARAM, CALL, RETURN
		\end{itemize}
	\end{itemize}
\end{frame}

\begin{frame}{Andreas: Maschinenunabh\"{a}ngige Optimierung}
	\begin{itemize}
		\pause\item\color{fu-red} Eliminierung gemeinsamer Teilausdr\"{u}cke
		\pause\item\color{fu-red} Kopiepropagation
		\pause\item\color{fu-red} Entfernen von totem Code
		\pause\item\color{fu-red} Konstantenfaltung
	\end{itemize}
\end{frame}

\begin{frame}{Jana: Codegenerator}
	\begin{itemize}
		\pause\item\color{fu-red} Zuweisung von Adressen/Registervergabe
		\pause\item\color{fu-red} Zerlegen von Drei-Adress-Code in Grundbl\"{o}cke
		\pause\item\color{fu-red} Erstellen von Flussgraphen
		\pause\item\color{orange} Befehlsauswahl
		\pause\item\color{orange} Aufrufkonventionen
		\pause\item\color{orange} Ausgabe als Assemblercode
	\end{itemize}
\end{frame}

\begin{frame}{Jana/Bene: MIPS Emulator}
	\begin{itemize}
		\pause\item Vereinfachte MIPS ISA:
		\begin{itemize}
			\pause\item\color{fu-green} Arithmetik: ADD, SUB, MUL, DIV, MOD, SHL, SHR
			\pause\item\color{fu-green} Logik: AND, OR, XOR, NOR
			\pause\item\color{fu-green} Load \& Store: MOV, LB, LH, LW, SB, SH, SW
			\pause\item\color{fu-green} Bedingte Spr\"{u}nge: CMP, BEQ, BNE, BLT, BGE, BLE, BGT
			\pause\item\color{fu-green} Absolute Spr\"{u}nge: J, JAL
			\pause\item\color{fu-green} Andere: SYS
		\end{itemize}
		\pause\item keine Delay-Slots
		\pause\item keine Memory-Management-Unit
		\pause\item I/O durch Nachbildung von System-Calls
	\end{itemize}
\end{frame}

\end{document}
