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{../graphics} |
4 \usepackage{../graphics} |
5 \usepackage{../grammar} |
5 \usepackage{../grammar} |
|
6 |
6 %\usepackage{soul} |
7 %\usepackage{soul} |
7 |
8 |
8 \makeatletter |
9 %\newcommand\hl[1]{% |
9 \newenvironment<>{btHighlight}[1][] |
10 % \tikz[baseline,% |
10 {\begin{onlyenv}#2\begingroup\tikzset{bt@Highlight@par/.style={#1}}\begin{lrbox}{\@tempboxa}} |
11 % outer sep=-15pt, inner sep = 0pt% |
11 {\end{lrbox}\bt@HL@box[bt@Highlight@par]{\@tempboxa}\endgroup\end{onlyenv}} |
12 % ]% |
12 |
13 % \node[decorate,rectangle,fill=yellow,anchor=text]{#1};% |
13 \newcommand<>\btHL[1][]{% |
14 %}% |
14 \only#2{\begin{btHighlight}[#1]\bgroup\aftergroup\bt@HL@endenv}% |
15 \newcommand{\hl}[1]{#1} |
15 } |
|
16 \def\bt@HL@endenv{% |
|
17 \end{btHighlight}% |
|
18 \egroup |
|
19 } |
|
20 \newcommand{\bt@HL@box}[2][]{% |
|
21 \tikz[#1]{% |
|
22 \pgfpathrectangle{\pgfpoint{1pt}{0pt}}{\pgfpoint{\wd #2}{\ht #2}}% |
|
23 \pgfusepath{use as bounding box}% |
|
24 \node[anchor=base west, fill=orange!30,outer sep=0pt,inner xsep=1pt, inner ysep=0pt, rounded corners=3pt, minimum height=\ht\strutbox+1pt,#1]{\raisebox{1pt}{\strut}\strut\usebox{#2}}; |
|
25 }% |
|
26 } |
|
27 \makeatother |
|
28 |
|
29 |
16 |
30 % beamer stuff |
17 % beamer stuff |
31 \renewcommand{\slidecaption}{APP 09, King's College London} |
18 \renewcommand{\slidecaption}{APP 09, King's College London} |
32 \newcommand{\bl}[1]{\textcolor{blue}{#1}} |
19 \newcommand{\bl}[1]{\textcolor{blue}{#1}} |
33 |
20 |
863 | \meta{Exp} = \meta{Exp} |
850 | \meta{Exp} = \meta{Exp} |
864 | \meta{num} |
851 | \meta{num} |
865 | \meta{var}\\ |
852 | \meta{var}\\ |
866 : \meta{Stmt} ::= \meta{label} : |
853 : \meta{Stmt} ::= \meta{label} : |
867 | \meta{var} := \meta{Exp} |
854 | \meta{var} := \meta{Exp} |
868 | jump? \meta{Exp} \meta{label} |
855 | jmp? \meta{Exp} \meta{label} |
869 | goto \meta{label}\\ |
856 | goto \meta{label}\\ |
870 : \meta{Prog} ::= \meta{Stmt} \ldots\\ |
857 : \meta{Prog} ::= \meta{Stmt} \ldots\\ |
871 \end{plstx}} |
858 \end{plstx}} |
872 |
859 |
873 \end{frame} |
860 \end{frame} |
884 | \meta{Exp} = \meta{Exp} |
871 | \meta{Exp} = \meta{Exp} |
885 | \meta{num} |
872 | \meta{num} |
886 | \meta{var}\\ |
873 | \meta{var}\\ |
887 : \meta{Stmt} ::= \meta{label} : |
874 : \meta{Stmt} ::= \meta{label} : |
888 | \meta{var} := \meta{Exp} |
875 | \meta{var} := \meta{Exp} |
889 | jump? \meta{Exp} \meta{label} |
876 | jmp? \meta{Exp} \meta{label} |
890 | goto \meta{label}\\ |
877 | goto \meta{label}\\ |
891 : \meta{Prog} ::= \meta{Stmt} \ldots\\ |
878 : \meta{Prog} ::= \meta{Stmt} \ldots\\ |
892 \end{plstx}} |
879 \end{plstx}} |
893 |
880 |
894 \begin{textblock}{0}(7.8,2.5) |
881 \begin{textblock}{0}(7.8,2.5) |
971 \end{cases}$\\ |
958 \end{cases}$\\ |
972 \end{tabular}} |
959 \end{tabular}} |
973 \end{center} |
960 \end{center} |
974 |
961 |
975 \footnotesize |
962 \footnotesize |
976 \begin{lstlisting}[language=Scala,numbers=none,xleftmargin=-5mm] |
963 \begin{lstlisting}[numbers=none,xleftmargin=-5mm] |
977 def eval_exp(e: Exp, env: Env) : Int = e match { |
964 def eval_exp(e: Exp, env: Env) : Int = e match { |
978 case Num(n) & n |
965 case Num(n) => n |
979 case Var(x) & env(x) |
966 case Var(x) => env(x) |
980 case Plus(e1, e2) & eval_exp(e1, env) + eval_exp(e2, env) |
967 case Plus(e1, e2) => eval_exp(e1, env) + eval_exp(e2, env) |
981 case Times(e1, e2) & eval_exp(e1, env) * eval_exp(e2, env) |
968 case Times(e1, e2) => eval_exp(e1, env) * eval_exp(e2, env) |
982 case Equ(e1, e2) & |
969 case Equ(e1, e2) => |
983 if (eval_exp(e1, env) == eval_exp(e2, env)) 1 else 0 |
970 if (eval_exp(e1, env) == eval_exp(e2, env)) 1 else 0 |
984 } |
971 } |
985 \end{lstlisting} |
972 \end{lstlisting} |
986 |
973 |
987 \end{frame} |
974 \end{frame} |
1089 |
1076 |
1090 \footnotesize |
1077 \footnotesize |
1091 \begin{lstlisting}[language=Scala,numbers=none,xleftmargin=-5mm] |
1078 \begin{lstlisting}[language=Scala,numbers=none,xleftmargin=-5mm] |
1092 def eval(sn: Snips) : Env = { |
1079 def eval(sn: Snips) : Env = { |
1093 def eval_stmts(sts: Stmts, env: Env) : Env = sts match { |
1080 def eval_stmts(sts: Stmts, env: Env) : Env = sts match { |
1094 case Nil & env |
1081 case Nil => env |
1095 case Label(l)::rest & eval_stmts(rest, env) |
1082 case Label(l)::rest => eval_stmts(rest, env) |
1096 case Assign(x, e)::rest & |
1083 case Assign(x, e)::rest => |
1097 eval_stmts(rest, env + (x -> eval_exp(e, env))) |
1084 eval_stmts(rest, env + (x -> eval_exp(e, env))) |
1098 case Jump(b, l)::rest & |
1085 case Jmp(b, l)::rest => |
1099 if (eval_exp(b, env) == 1) eval_stmts(sn(l), env) |
1086 if (eval_exp(b, env) == 1) eval_stmts(sn(l), env) |
1100 else eval_stmts(rest, env) |
1087 else eval_stmts(rest, env) |
1101 case Goto(l)::rest & eval_stmts(sn(l), env) |
1088 case Goto(l)::rest => eval_stmts(sn(l), env) |
1102 } |
1089 } |
1103 |
1090 |
1104 eval_stmts(sn(""), Map()) |
1091 eval_stmts(sn(""), Map()) |
1105 } |
1092 } |
1106 \end{lstlisting} |
1093 \end{lstlisting} |
1139 \begin{bubble}[4.7cm]\footnotesize |
1126 \begin{bubble}[4.7cm]\footnotesize |
1140 \begin{lstlisting}[numbers=none, |
1127 \begin{lstlisting}[numbers=none, |
1141 language={}, |
1128 language={}, |
1142 basicstyle=\ttfamily, |
1129 basicstyle=\ttfamily, |
1143 xleftmargin=1mm, |
1130 xleftmargin=1mm, |
1144 escapeinside={(*@}{@*)}] |
1131 escapeinside={(*}{*)}] |
1145 a := (*@\hl{'+'}@*) |
1132 a := (*\hl{'+'}*) |
1146 n := (*@\hl{'+'}@*) |
1133 n := (*\hl{'+'}*) |
1147 top: jmp? n = (*@\hl{'0'}@*) done |
1134 top: jmp? n = (*\hl{'0'}*) done |
1148 a := a * n |
1135 a := a * n |
1149 n := n + (*@\hl{'-'}@*) |
1136 n := n + (*\hl{'-'}*) |
1150 goto top |
1137 goto top |
1151 done: |
1138 done: |
1152 \end{lstlisting} |
1139 \end{lstlisting} |
1153 \end{bubble} |
1140 \end{bubble} |
1154 \end{column} |
1141 \end{column} |