slides/slides09.tex
changeset 336 3cb200fa6d6a
parent 335 06d5fc15594d
child 337 92a718b88e14
equal deleted inserted replaced
335:06d5fc15594d 336:3cb200fa6d6a
     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)
   897 \begin{lstlisting}[numbers=none,
   884 \begin{lstlisting}[numbers=none,
   898                    basicstyle=\ttfamily,
   885                    basicstyle=\ttfamily,
   899                    language={},xleftmargin=3mm]
   886                    language={},xleftmargin=3mm]
   900       a := 1
   887       a := 1
   901       n := 5 
   888       n := 5 
   902 top:  jump? n = 0 done 
   889 top:  jmp? n = 0 done 
   903       a := a * n 
   890       a := a * n 
   904       n := n + -1 
   891       n := n + -1 
   905       goto top 
   892       goto top 
   906 done:
   893 done:
   907 \end{lstlisting}
   894 \end{lstlisting}
   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}