slides/slides04.tex
changeset 451 4a5876f321ae
parent 447 68769db65185
child 452 b93f4d2aeee1
equal deleted inserted replaced
450:d91a1748a9be 451:4a5876f321ae
  1051 \end{center}
  1051 \end{center}
  1052 \end{frame}
  1052 \end{frame}
  1053 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  1053 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  1054 
  1054 
  1055 
  1055 
  1056 
  1056 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  1057 \begin{frame}[c]
  1057 \begin{frame}[c]
  1058 
  1058 
  1059 {\footnotesize\lstinputlisting[language=Scala,numbers=none,
  1059 {\footnotesize\lstinputlisting[language=Scala,numbers=none,
  1060 xleftmargin=-5mm] {../progs/app06.scala}}
  1060 xleftmargin=-5mm] {../progs/app06.scala}}
  1061 
  1061 
  1062 \end{frame}
  1062 \end{frame}
       
  1063 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
       
  1064 
       
  1065 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1066 \begin{frame}[t]
       
  1067 \frametitle{Rectification Example}
       
  1068 
       
  1069 \begin{center}
       
  1070 \bl{$\only<1>{(b \cdot c)}%
       
  1071      \only<2-3>{(\underline{b \cdot c})}%
       
  1072      \only<1-3>{+}% 
       
  1073      \only<1>{(\ZERO + \ONE)}%
       
  1074      \only<2-3>{(\underline{\ZERO + \ONE})}$}%
       
  1075 \only<4->{%
       
  1076 \bl{$\underline{(b \cdot c) + (\ZERO + \ONE)}$}%
       
  1077 }
       
  1078 $\mapsto$
       
  1079 \bl{$(b \cdot c) + \ONE$}
       
  1080 \end{center}\bigskip
       
  1081 
       
  1082 \onslide<3->{%
       
  1083 \begin{center}
       
  1084 \begin{tabular}{lcl}
       
  1085 \bl{$f_{s1}$} & \bl{$=$} & \bl{$\lambda v.v$}\\
       
  1086 \bl{$f_{s2}$} & \bl{$=$} & \bl{$\lambda v. \textit{Right}(v)$}
       
  1087 \end{tabular}
       
  1088 \end{center}}
       
  1089 
       
  1090 \only<4>{%
       
  1091 \begin{center}
       
  1092 \begin{tabular}{@{}l@{\hspace{1mm}}l@{}}
       
  1093 \bl{$f_{alt}(f_{s1}, f_{s2}) \dn$}\\
       
  1094 \quad \bl{$\lambda v.\,$} 
       
  1095         case \bl{$v = Left(v')$}: 
       
  1096       & return \bl{$Left(f_{s1}(v'))$}\\
       
  1097 \quad \phantom{$\lambda v.\,$} 
       
  1098         case \bl{$v = Right(v')$}: 
       
  1099       & return \bl{$Right(f_{s2}(v'))$}\\ 
       
  1100 \end{tabular}
       
  1101 \end{center}}%
       
  1102 \only<5->{%
       
  1103 \begin{center}
       
  1104 \begin{tabular}{@{}l@{\hspace{1mm}}l@{}}
       
  1105 \only<5->{\phantom{\bl{$f_{alt}(f_{s1}, f_{s2}) \dn$}}}\\
       
  1106 \quad \bl{$\lambda v.\,$} 
       
  1107         case \bl{$v = Left(v')$}: 
       
  1108       & return \bl{$Left(v')$}\\
       
  1109 \quad \phantom{$\lambda v.\,$} 
       
  1110         case \bl{$v = Right(v')$}: 
       
  1111       & return \bl{$Right(Right(v'))$}\\ 
       
  1112 \end{tabular}
       
  1113 \end{center}}%
       
  1114 
       
  1115 \only<6->{%
       
  1116 \begin{center}
       
  1117 \begin{tabular}{@{}l@{\hspace{4mm}}l@{}}
       
  1118 \bl{$\textit{mkeps}$} simplified case: &
       
  1119 \bl{$\textit{Right}(\textit{Empty})$}\\
       
  1120 rectified case: &
       
  1121 \bl{$\textit{Right}(\textit{Right}(\textit{Empty}))$}
       
  1122 \end{tabular}
       
  1123 \end{center}}%
       
  1124 
       
  1125 \end{frame}
       
  1126 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1063 
  1127 
  1064 
  1128 
  1065 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1129 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1066 \begin{frame}[c]
  1130 \begin{frame}[c]
  1067 \frametitle{Lexing with Simplification}
  1131 \frametitle{Lexing with Simplification}
  1101 
  1165 
  1102 
  1166 
  1103 \end{frame}
  1167 \end{frame}
  1104 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
  1168 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
  1105 
  1169 
       
  1170 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1171 \begin{frame}[c]
       
  1172 \frametitle{Environments}
       
  1173 
       
  1174 Obtaining the ``recorded'' parts of a value: 
       
  1175 
       
  1176 \begin{center}
       
  1177 \begin{tabular}{lcl}
       
  1178   \bl{$env(Empty)$}     & \bl{$\dn$} & \bl{$[]$}\\
       
  1179   \bl{$env(Char(c))$}   & \bl{$\dn$} & \bl{$[]$}\\
       
  1180   \bl{$env(Left(v))$}   & \bl{$\dn$} & \bl{$env(v)$}\\
       
  1181   \bl{$env(Right(v))$}  & \bl{$\dn$} & \bl{$env(v)$}\\
       
  1182   \bl{$env(Seq(v_1,v_2))$}& \bl{$\dn$} & \bl{$env(v_1) \,@\, env(v_2)$}\\
       
  1183   \bl{$env([v_1,\ldots ,v_n])$} & \bl{$\dn$} & 
       
  1184      \bl{$env(v_1) \,@\ldots @\, env(v_n)$}\\
       
  1185   \bl{$env(Rec(x:v))$} & \bl{$\dn$} & \bl{$(x:|v|) :: env(v)$}\\
       
  1186 \end{tabular}
       
  1187 \end{center}
       
  1188 
       
  1189 \end{frame}
       
  1190 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
  1191 
       
  1192 
       
  1193 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1194 \begin{frame}[c]
       
  1195 \frametitle{While Tokens}
       
  1196 
       
  1197 \begin{center}
       
  1198 \begin{tabular}{@{}r@{\hspace{2mm}}c@{\hspace{2mm}}l@{}}
       
  1199 \pcode{WHILE\_REGS} & $\dn$ & \raisebox{-1mm}{\large(}\pcode{("k" : KEYWORD)} +\\ 
       
  1200                   &       & \phantom{(}\pcode{("i" : ID)} +\\ 
       
  1201                   &       & \phantom{(}\pcode{("o" : OP)} + \\
       
  1202                   &       & \phantom{(}\pcode{("n" : NUM)} + \\
       
  1203                   &       & \phantom{(}\pcode{("s" : SEMI)} +\\ 
       
  1204                   &       & \phantom{(}\pcode{("p" : (LPAREN + RPAREN))} +\\ 
       
  1205                   &       & \phantom{(}\pcode{("b" : (BEGIN + END))} +\\ 
       
  1206                   &       & \phantom{(}\pcode{("w" : WHITESPACE)}\raisebox{-1mm}{\large)$^*$}
       
  1207 \end{tabular}
       
  1208 \end{center}
       
  1209 
       
  1210 \end{frame}
       
  1211 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
       
  1212 
       
  1213 
       
  1214 
       
  1215 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1216 \begin{frame}[t]
       
  1217 
       
  1218 \consolas
       
  1219 \begin{center}
       
  1220 \code{"if true then then 42 else +"}
       
  1221 \end{center}
       
  1222 
       
  1223 \only<1>{
       
  1224 \small\begin{tabular}{l}
       
  1225 KEYWORD(if),\\ 
       
  1226 WHITESPACE,\\ 
       
  1227 IDENT(true),\\ 
       
  1228 WHITESPACE,\\ 
       
  1229 KEYWORD(then),\\ 
       
  1230 WHITESPACE,\\ 
       
  1231 KEYWORD(then),\\ 
       
  1232 WHITESPACE,\\ 
       
  1233 NUM(42),\\ 
       
  1234 WHITESPACE,\\ 
       
  1235 KEYWORD(else),\\ 
       
  1236 WHITESPACE,\\ 
       
  1237 OP(+)
       
  1238 \end{tabular}}
       
  1239 
       
  1240 \only<2>{
       
  1241 \small\begin{tabular}{l}
       
  1242 KEYWORD(if),\\ 
       
  1243 IDENT(true),\\ 
       
  1244 KEYWORD(then),\\ 
       
  1245 KEYWORD(then),\\ 
       
  1246 NUM(42),\\ 
       
  1247 KEYWORD(else),\\ 
       
  1248 OP(+)
       
  1249 \end{tabular}}
       
  1250 
       
  1251 \end{frame}
       
  1252 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
  1253 
       
  1254 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1255 \begin{frame}[c]
       
  1256 \frametitle{Two Rules}
       
  1257 
       
  1258 \begin{itemize}
       
  1259 \item Longest match rule (``maximal munch rule''): The 
       
  1260 longest initial substring matched by any regular expression is taken
       
  1261 as next token.\bigskip
       
  1262 
       
  1263 \item Rule priority:
       
  1264 For a particular longest initial substring, the first regular
       
  1265 expression that can match determines the token.
       
  1266 
       
  1267 \end{itemize}
       
  1268 
       
  1269 %\url{http://www.technologyreview.com/tr10/?year=2011}
       
  1270   
       
  1271 %finite deterministic automata/ nondeterministic automaton
       
  1272 
       
  1273 %\item problem with infix operations, for example i-12
       
  1274 
       
  1275 
       
  1276 \end{frame}
       
  1277 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
       
  1278 
       
  1279 
  1106 
  1280 
  1107 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1281 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1108 \begin{frame}[c]
  1282 \begin{frame}[c]
  1109 \begin{center}
  1283 \begin{center}
  1110 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
  1284 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}