\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}{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}