1 \documentclass[dvipsnames,14pt,t]{beamer} |
1 \documentclass[dvipsnames,14pt,t]{beamer} |
2 \usepackage{../slides} |
2 \usepackage{../slides} |
3 \usepackage{../langs} |
3 \usepackage{../langs} |
4 \usepackage{../data} |
4 \usepackage{../data} |
5 \usepackage{../graphics} |
5 \usepackage{../graphics} |
|
6 \usepackage{../grammar} |
6 |
7 |
7 % beamer stuff |
8 % beamer stuff |
8 \renewcommand{\slidecaption}{CFL 07, King's College London} |
9 \renewcommand{\slidecaption}{CFL 07, King's College London} |
9 \newcommand{\bl}[1]{\textcolor{blue}{#1}} |
10 \newcommand{\bl}[1]{\textcolor{blue}{#1}} |
10 |
11 |
54 \begin{frame}[c] |
55 \begin{frame}[c] |
55 \begin{textblock}{10}(0.5,0.5) |
56 \begin{textblock}{10}(0.5,0.5) |
56 \LARGE |
57 \LARGE |
57 \fontspec{Hoefler Text Black} |
58 \fontspec{Hoefler Text Black} |
58 \textcolor{ProcessBlue}{JVM\\ Code} |
59 \textcolor{ProcessBlue}{JVM\\ Code} |
|
60 \\[12mm] |
|
61 |
|
62 \normalsize |
|
63 Jasmin\\ |
|
64 Krakatau\\ |
|
65 ASM lib |
59 \end{textblock} |
66 \end{textblock} |
|
67 |
|
68 |
60 \fontsize{8}{10}\selectfont |
69 \fontsize{8}{10}\selectfont |
61 %\footnotesize |
70 %\footnotesize |
62 \mbox{}\\[-8mm]\mbox{} |
71 \mbox{}\\[-8mm]\mbox{} |
63 |
72 |
64 \begin{columns} |
73 \begin{columns} |
74 |
83 |
75 \end{frame} |
84 \end{frame} |
76 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
85 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
77 |
86 |
78 |
87 |
79 |
88 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
80 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
89 \begin{frame}[t] |
81 \mode<presentation>{ |
|
82 \begin{frame}[c] |
|
83 |
90 |
84 \begin{center} |
91 \begin{center} |
85 \bl{\begin{tabular}{@{}lcl@{}} |
92 \bl{\begin{tabular}{@{}lcl@{}} |
86 \textit{Stmt} & $\rightarrow$ & $\texttt{skip}$\\ |
93 \\[-12mm] |
87 & $|$ & \textit{Id}\;\texttt{:=}\;\textit{AExp}\\ |
94 \meta{Stmt} & $::=$ & $\texttt{skip}$\\ |
88 & $|$ & \texttt{if}\; \textit{BExp} \;\texttt{then}\; \textit{Block} \;\texttt{else}\; \textit{Block}\\ |
95 & $|$ & \textit{Id}\;\texttt{:=}\;\meta{AExp}\\ |
89 & $|$ & \texttt{while}\; \textit{BExp} \;\texttt{do}\; \textit{Block}\\ |
96 & $|$ & \texttt{if}\; \meta{BExp} \;\texttt{then}\; \meta{Block} \;\texttt{else}\; \meta{Block}\\ |
|
97 & $|$ & \texttt{while}\; \meta{BExp} \;\texttt{do}\; \meta{Block}\\ |
90 & $|$ & \texttt{read}\;\textit{Id}\\ |
98 & $|$ & \texttt{read}\;\textit{Id}\\ |
91 & $|$ & \texttt{write}\;\textit{Id}\\ |
99 & $|$ & \texttt{write}\;\textit{Id}\\ |
92 & $|$ & \texttt{write}\;\textit{String}\medskip\\ |
100 & $|$ & \texttt{write}\;\textit{String}\medskip\\ |
93 \textit{Stmts} & $\rightarrow$ & \textit{Stmt} \;\texttt{;}\; \textit{Stmts}\\ |
101 \meta{Stmts} & $::=$ & \meta{Stmt} \;\texttt{;}\; \meta{Stmts}\\ |
94 & $|$ & \textit{Stmt}\medskip\\ |
102 & $|$ & \meta{Stmt}\medskip\\ |
95 \textit{Block} & $\rightarrow$ & \texttt{\{}\,\textit{Stmts}\,\texttt{\}}\\ |
103 \meta{Block} & $::=$ & \texttt{\{}\,\meta{Stmts}\,\texttt{\}}\\ |
96 & $|$ & \textit{Stmt}\medskip\\ |
104 & $|$ & \meta{Stmt}\medskip\\ |
97 \textit{AExp} & $\rightarrow$ & \ldots\\ |
105 \meta{AExp} & $::=$ & \ldots\\ |
98 \textit{BExp} & $\rightarrow$ & \ldots\\ |
106 \meta{BExp} & $::=$ & \ldots\\ |
99 \end{tabular}} |
107 \end{tabular}} |
100 \end{center} |
108 \end{center} |
101 |
109 \end{frame} |
102 |
110 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
103 \end{frame}} |
111 |
104 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
105 |
112 |
106 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
113 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
107 \begin{frame}[c] |
114 \begin{frame}[c] |
108 \frametitle{\begin{tabular}{c}Fibonacci Numbers\end{tabular}} |
115 \frametitle{\begin{tabular}{c}Fibonacci Numbers\end{tabular}} |
109 |
116 |
216 \item is garbage collected $\Rightarrow$ no buffer overflows |
223 \item is garbage collected $\Rightarrow$ no buffer overflows |
217 \item some languages compiled to the JVM: Scala, Clojure\ldots |
224 \item some languages compiled to the JVM: Scala, Clojure\ldots |
218 \end{itemize} |
225 \end{itemize} |
219 |
226 |
220 \end{frame} |
227 \end{frame} |
221 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
228 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
229 |
222 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
230 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
223 \begin{frame}[t,fragile] |
231 \begin{frame}[t,fragile] |
224 \frametitle{Compiling AExps} |
232 \frametitle{Compiling AExps} |
225 |
233 |
226 For example \bl{$1 + ((2 * 3) + (4 - 3))$}:\medskip |
234 For example \liningnums{\bl{$1 + ((2 * 3) + (4 - 3))$}}:\medskip |
227 |
235 |
228 \begin{columns}[T] |
236 \begin{columns}[T] |
229 \begin{column}{.3\textwidth} |
237 \begin{column}{.3\textwidth} |
230 \begin{center} |
238 \begin{center} |
231 \bl{\begin{tikzpicture} |
239 \bl{\begin{tikzpicture} |
232 \tikzset{level distance=12mm,sibling distance=4mm} |
240 \tikzset{level distance=12mm,sibling distance=4mm} |
233 \tikzset{edge from parent/.style={draw,very thick}} |
241 \tikzset{edge from parent/.style={draw,very thick}} |
234 \Tree [.$+$ [.$1$ ] [.$+$ [.$*$ $2$ $3$ ] [.$-$ $4$ $3$ ]]] |
242 \Tree [.$+$ [.$1$ ] [.$+$ [.$*$ $2$ $3$ ] [.$-$ $4$ $3$ ]]] |
235 \end{tikzpicture}} |
243 \end{tikzpicture}} |
236 \end{center} |
244 \end{center} |
237 \end{column} |
245 \end{column} |
238 \begin{column}{.3\textwidth} |
246 \begin{column}{.3\textwidth} |
239 \begin{lstlisting}[language=JVMIS,numbers=none] |
247 \begin{lstlisting}[language=JVMIS,numbers=none] |
240 ldc 1 |
248 ldc 1 |
241 ldc 2 |
249 ldc 2 |
242 ldc 3 |
250 ldc 3 |
243 imul |
251 imul |
256 |
264 |
257 \end{frame} |
265 \end{frame} |
258 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
266 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
259 |
267 |
260 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
268 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
261 \begin{frame}[t] |
269 \begin{frame}[t,fragile] |
262 \frametitle{\begin{tabular}{c}Compiling AExps\end{tabular}} |
270 \frametitle{Compiling AExps} |
263 |
271 |
264 {\Large\bl{1 + 2 + 3}} |
272 \liningnums{\textbf{\Large\bl{1 + 2 + 3}}} |
265 |
273 |
266 \begin{center} |
274 \begin{lstlisting}[language=JVMIS,numbers=none,xleftmargin=6cm] |
267 \bl{\begin{tabular}{l} |
275 ldc 1 |
268 ldc 1\\ |
276 ldc 2 |
269 ldc 2\\ |
277 iadd |
270 iadd\\ |
278 ldc 3 |
271 ldc 3\\ |
279 iadd |
272 iadd\\ |
280 \end{lstlisting} |
273 \end{tabular}} |
281 |
274 \end{center} |
282 |
275 |
283 \end{frame} |
276 \end{frame} |
284 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
277 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
285 |
278 |
286 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
279 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
287 \begin{frame}[t,fragile] |
280 \mode<presentation>{ |
288 \frametitle{Compiling AExps} |
281 \begin{frame}[t] |
289 |
282 \frametitle{\begin{tabular}{c}Compiling AExps\end{tabular}} |
290 \liningnums{\textbf{\Large\bl{1 + (2 + 3)}}} |
283 |
291 |
284 {\Large\bl{1 + (2 + 3)}} |
292 \begin{lstlisting}[language=JVMIS,numbers=none,xleftmargin=6cm] |
285 |
293 ldc 1 |
286 \begin{center} |
294 ldc 2 |
287 \bl{\begin{tabular}{l} |
295 ldc 3 |
288 ldc 1\\ |
296 iadd |
289 ldc 2\\ |
297 iadd |
290 ldc 3\\ |
298 \end{lstlisting} |
291 iadd\\ |
299 \bigskip\pause |
292 iadd\\ |
|
293 \end{tabular}} |
|
294 \end{center}\bigskip\pause |
|
295 \vfill |
300 \vfill |
296 |
301 |
297 \bl{dadd, fadd, ladd, \ldots} |
302 \textcolor{codepurple}{\textbf{\texttt{dadd}}}, |
298 |
303 \textcolor{codepurple}{\textbf{\texttt{fadd}}}, |
299 \end{frame}} |
304 \textcolor{codepurple}{\textbf{\texttt{ladd}}}, \ldots |
|
305 |
|
306 \end{frame} |
300 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
307 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
301 |
308 |
302 |
309 |
303 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
310 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
304 \begin{frame}[t] |
311 \begin{frame}[t] |
318 |
325 |
319 \end{frame} |
326 \end{frame} |
320 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
327 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
321 |
328 |
322 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
329 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
323 \mode<presentation>{ |
330 \begin{frame}[t,fragile] |
324 \begin{frame}[t] |
|
325 \frametitle{\begin{tabular}{c}Compiling AExps\end{tabular}} |
331 \frametitle{\begin{tabular}{c}Compiling AExps\end{tabular}} |
326 |
332 |
327 {\Large\bl{1 + 2 * 3 + (4 - 3)}} |
333 \liningnums{\textbf{\Large\bl{1 $+$ 2 $*$ 3 $+$ (4 $-$ 3)}}} |
328 |
334 |
329 \begin{center} |
335 \begin{lstlisting}[language=JVMIS,numbers=none,xleftmargin=6cm] |
330 \bl{\begin{tabular}{l} |
336 ldc 1 |
331 ldc 1\\ |
337 ldc 2 |
332 ldc 2\\ |
338 ldc 3 |
333 ldc 3\\ |
339 imul |
334 imul\\ |
340 ldc 4 |
335 ldc 4\\ |
341 ldc 3 |
336 ldc 3\\ |
342 isub |
337 isub\\ |
343 iadd |
338 iadd\\ |
344 iadd |
339 iadd\\ |
345 \end{lstlisting} |
340 \end{tabular}} |
346 |
341 \end{center} |
347 \end{frame} |
342 |
348 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
343 \end{frame}} |
349 |
344 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
350 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
345 |
351 \begin{frame}[c] |
346 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
347 \begin{frame}[t] |
|
348 \frametitle{Variables} |
352 \frametitle{Variables} |
349 |
353 \liningnums{\textbf{\Large\bl{x $:=$ 5 $+$ y $*$ 2}}}\bigskip\pause |
350 {\Large\bl{$x := 5 + y * 2$}}\bigskip\pause |
|
351 |
354 |
352 \begin{itemize} |
355 \begin{itemize} |
353 \item lookup: \bl{$\text{iload}\; index$} |
356 \item lookup: \bl{$\textcolor{codepurple}{\textbf{\texttt{iload}}}\; index$} |
354 \item store: \bl{$\text{istore}\; index$} |
357 \item store: \bl{$\textcolor{codepurple}{\textbf{\texttt{istore}}}\; index$} |
355 \end{itemize}\bigskip\pause |
358 \end{itemize}\bigskip\pause |
356 |
359 |
357 while compilating we have to maintain a map between our identifiers and the |
360 while compilating we have to maintain a map between our identifiers and the |
358 Java bytecode indices |
361 Java bytecode indices |
359 |
362 |
423 |
426 |
424 \end{frame} |
427 \end{frame} |
425 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
428 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
426 |
429 |
427 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
430 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
428 \begin{frame}[c] |
431 \begin{frame}[c,fragile] |
429 \frametitle{Compiling Assignments} |
432 \frametitle{Compiling Assignments} |
430 |
433 |
431 {\Large\bl{$x := x + 1$}} |
434 \liningnums{\textbf{\Large\bl{x $:=$ x $+$ 1}}} |
432 |
435 |
433 \begin{center} |
436 \begin{lstlisting}[language=JVMIS,numbers=none,xleftmargin=6cm] |
434 \bl{\begin{tabular}{l} |
437 iload /*@\bl{$n_x$}@*/ |
435 iload $n_x$\\ |
438 ldc 1 |
436 ldc 1\\ |
439 iadd |
437 iadd\\ |
440 istore /*@\bl{$n_x$}@*/ |
438 istore $n_x$\\ |
441 \end{lstlisting}\medskip |
439 \end{tabular}} |
|
440 \end{center} |
|
441 |
442 |
442 where \bl{$n_x$} is the index corresponding to the variable~\bl{$x$} |
443 where \bl{$n_x$} is the index corresponding to the variable~\bl{$x$} |
443 |
444 |
444 \end{frame} |
445 \end{frame} |
445 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
446 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
484 |
485 |
485 \end{frame} |
486 \end{frame} |
486 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
487 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
487 |
488 |
488 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
489 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
489 \begin{frame}[t] |
490 \begin{frame}[t,fragile] |
490 \frametitle{Conditional Jumps} |
491 \frametitle{Conditional Jumps} |
491 |
492 |
492 \begin{minipage}{1.1\textwidth} |
493 \begin{minipage}{1.1\textwidth} |
493 \begin{itemize} |
494 \begin{itemize} |
494 \item \bl{if\_icmpeq $label$} if two ints are equal, then jump\medskip |
495 \item \textcolor{codepurple}{\textbf{\texttt{if\_icmpeq}}} \bl{$label$} |
495 \item \bl{if\_icmpne $label$} if two ints aren't equal, then jump\medskip |
496 if two ints are equal, then jump\medskip |
496 \item \bl{if\_icmpge $label$} if one int is greater or equal then another, then jump |
497 \item \textcolor{codepurple}{\textbf{\texttt{if\_icmpne}}} \bl{$label$} |
|
498 if two ints aren't equal, then jump\medskip |
|
499 \item \textcolor{codepurple}{\textbf{\texttt{if\_icmpge}}} \bl{$label$} |
|
500 if one int is greater or equal then another, then jump |
497 \item[]\ldots |
501 \item[]\ldots |
498 \end{itemize} |
502 \end{itemize} |
499 \end{minipage}\pause |
503 \end{minipage}\pause |
500 |
504 |
501 |
505 \begin{lstlisting}[language=JVMIS,numbers=none,xleftmargin=2cm] |
502 \begin{center} |
506 /*@\bl{$L_1$:}@*/ |
503 \bl{\begin{tabular}{l} |
507 if_icmpeq /*@\bl{$L_2$}@*/ |
504 $L_1$:\\ |
508 iload 1 |
505 \hspace{5mm}if\_icmpeq\;$L_2$\\ |
509 ldc 1 |
506 \hspace{5mm}iload 1\\ |
510 iadd |
507 \hspace{5mm}ldc 1\\ |
511 if_icmpeq /*@\bl{$L_1$}@*/ |
508 \hspace{5mm}iadd\\ |
512 /*@\bl{$L_2$:}@*/ |
509 \hspace{5mm}if\_icmpeq\;$L_1$\\ |
513 \end{lstlisting} |
510 $L_2$: |
514 |
511 \end{tabular}} |
|
512 \end{center} |
|
513 |
515 |
514 \begin{textblock}{3.5}(11,12) |
516 \begin{textblock}{3.5}(11,12) |
515 \only<3>{labels must be unique} |
517 \only<3>{labels must be unique} |
516 \end{textblock} |
518 \end{textblock} |
517 \end{frame} |
519 \end{frame} |