%!TEX root = Programmierparadigmen.tex \chapter{Java Bytecode} \index{Java Bytecode|(} \begin{definition}[Bytecode]\xindex{Bytecode}% Der Bytecode ist eine Sammlung von Befehlen für eine virtuelle Maschine. \end{definition} Bytecode ist unabhängig von realer Hardware. \begin{definition}[Heap]\xindex{Heap}\xindex{Speicher!dynamischer}% Der dynamische Speicher, auch Heap genannt, ist ein Speicherbereich, aus dem zur Laufzeit eines Programms zusammenhängende Speicherabschnitte angefordert und in beliebiger Reihenfolge wieder freigegeben werden können. \end{definition} \textit{Activation Record} ist ein \textit{Stackframe}.\index{Activation Record|see{Stackframe}} \section{Instruktionen} \begin{table}[h] \begin{tabular}{p{6cm}|ll} \textbf{Beschreibung} & \textbf{int} & \textbf{float} \\ \hline Addition & iadd & fadd \\ Element aus Array auf Stack packen & iaload & faload \\ Element aus Stack in Array speichern & iastore & fastore \\ Konstante auf Stack legen & iconst\_ & fconst\_ \\ Divide second-from top by top & idiv & fdiv \\ Multipliziere die obersten beiden Zahlen des Stacks & imul & fmul \\ \end{tabular} \end{table} \section{Polnische Notation} \begin{definition}[Schreibweise von Rechenoperationen] Sei $f: A \times B \rightarrow C$ eine Funktion, $a \in A$ und $b \in B$. \begin{defenum} \item Die Schreibweise $a\ f\ b$ heißt \textbf{Infix-Notation}\xindex{Infix-Notation}. \item Die Schreibweise $f\ a\ b$ heißt \textbf{Präfixnotation}\xindex{Präfixnotation} \item Die Schreibweise $a\ b\ f$ heißt \textbf{Postfixnotation}\xindex{Postfixnotation}. \end{defenum} \end{definition} \textit{Polnische Notation}\index{Notation!polnische|see{Präfixnotation}} ist ein Synonym für die Präfixnotation. \textit{Umgekehrte polnische Notation}\index{Notation!umgekehrte polnische|see{Postfixnotation}} ist ein Synonym für die Postfixnotation. \begin{beispiel}[Schreibweise von Rechenoperationen] \begin{bspenum} \item $1 + 2$ nutzt die Infix-Notation. \item $f\ a\ b$ nutzt die polnische Notation. \item Wir der Ausdruck $1 + 2 \cdot 3$ in Infix-Notation ohne Operatoren-Präzedenz ausgewertet, so gilt: \[1 + 2 \cdot 3 = 9\] Wird er mit Operatoren-Präzendenz ausgewertet, so gilt: \[1 + 2 \cdot 3 = 7\] \item Der Ausdruck \[1 + 2 \cdot 3 = 7\] entspricht \[+\ 1\ \cdot\ 2\ 3\] in der polnischen Notation und \[1\ 2\ 3\ \cdot\ +\] in der umgekehrten polnischen Notation. \end{bspenum} \end{beispiel} \begin{bemerkung}[Eigenschaften der Prä- und Postfixnotation] \begin{bemenum} \item Die Reihenfolge der Operanden kann beibehalten und gleichzeitig auf Klammern verzichtet werden, ohne dass sich das Ergebnis verändert. \item Die Infix-Notation kann in einer Worst-Case Laufzeit von $\mathcal{O}(n)$, wobei $n$ die Anzahl der Tokens ist mittels des \textit{Shunting-yard-Algorithmus}\xindex{Shunting-yard-Algorithmus} in die umgekehrte Polnische Notation überführt werden. \end{bemenum} \end{bemerkung} \section{Weitere Informationen} \begin{itemize} \item \url{http://cs.au.dk/~mis/dOvs/jvmspec/ref-Java.html} \item \href{http://scanftree.com/Data_Structure/prefix-postfix-infix-online-converter}{scanftree.com}: Infix $\leftrightarrow$ Postfix Konverter \end{itemize} \index{Java Bytecode|)}