slides/slides06.tex
changeset 598 e3ad67cd5123
parent 597 ce8419e3915c
child 599 33c4b580092b
equal deleted inserted replaced
597:ce8419e3915c 598:e3ad67cd5123
   108 
   108 
   109    
   109    
   110 
   110 
   111 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   111 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   112 \begin{frame}[c]
   112 \begin{frame}[c]
   113 
   113 \frametitle{Parser Combinators}
       
   114   
   114 Atomic parsers, for example
   115 Atomic parsers, for example
   115 
   116 
   116 \begin{center}
   117 \begin{center}
   117 \bl{$1::rest \;\Rightarrow\; \{(1, rest)\}$} 
   118 \bl{$1::rest \;\Rightarrow\; \{(1, rest)\}$} 
   118 \end{center}\bigskip
   119 \end{center}\bigskip
   518   \draw [->,line width=4mm] (B) -- (C); 
   519   \draw [->,line width=4mm] (B) -- (C); 
   519   \draw [->,line width=4mm] (C) -- (1); 
   520   \draw [->,line width=4mm] (C) -- (1); 
   520   \end{tikzpicture}
   521   \end{tikzpicture}
   521   \end{center}
   522   \end{center}
   522   
   523   
   523 We have lexer and parser.
   524 We have a lexer and a parser\ldots
   524   
   525   
   525 \end{frame}
   526 \end{frame}
   526 
   527 
   527 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   528 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   528 \begin{frame}[c]
   529 \begin{frame}[c]
   529 
   530 
   530 \begin{center}
   531 \begin{center}
   531 \bl{\begin{tabular}{@{}lcl@{}}
   532 \bl{\begin{tabular}{@{}lcl@{}}
   532 \textit{Stmt} & $::=$ &  $\texttt{skip}$\\
   533 \meta{Stmt} & $::=$ &  $\texttt{skip}$\\
   533               & $|$ & \textit{Id}\;\texttt{:=}\;\textit{AExp}\\
   534               & $|$ & \textit{Id}\;\texttt{:=}\;\meta{AExp}\\
   534               & $|$ & \texttt{if}\; \textit{BExp} \;\texttt{then}\; \textit{Block} \;\texttt{else}\; \textit{Block}\\
   535               & $|$ & \texttt{if}\; \meta{BExp} \;\texttt{then}\; \meta{Block} \;\texttt{else}\; \meta{Block}\\
   535               & $|$ & \texttt{while}\; \textit{BExp} \;\texttt{do}\; \textit{Block}\\
   536               & $|$ & \texttt{while}\; \meta{BExp} \;\texttt{do}\; \meta{Block}\\
   536               & $|$ & \texttt{read}\;\textit{Id}\\
   537               & $|$ & \texttt{read}\;\textit{Id}\\
   537               & $|$ & \texttt{write}\;\textit{Id}\\
   538               & $|$ & \texttt{write}\;\textit{Id}\\
   538               & $|$ & \texttt{write}\;\textit{String}\medskip\\
   539               & $|$ & \texttt{write}\;\textit{String}\medskip\\
   539 \textit{Stmts} & $::=$ &  \textit{Stmt} \;\texttt{;}\; \textit{Stmts}\\
   540 \meta{Stmts} & $::=$ &  \meta{Stmt} \;\texttt{;}\; \meta{Stmts}\\
   540               & $|$ & \textit{Stmt}\medskip\\
   541               & $|$ & \meta{Stmt}\medskip\\
   541 \textit{Block} & $::=$ &  \texttt{\{}\,\textit{Stmts}\,\texttt{\}}\\
   542 \meta{Block} & $::=$ &  \texttt{\{}\,\meta{Stmts}\,\texttt{\}}\\
   542                 & $|$ & \textit{Stmt}\medskip\\
   543                 & $|$ & \meta{Stmt}\medskip\\
   543 \textit{AExp} & $::=$ & \ldots\\
   544 \meta{AExp} & $::=$ & \ldots\\
   544 \textit{BExp} & $::=$ & \ldots\\
   545 \meta{BExp} & $::=$ & \ldots\\
   545 \end{tabular}}
   546 \end{tabular}}
   546 \end{center}
   547 \end{center}
   547 \end{frame}
   548 \end{frame}
   548 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   549 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   549 
   550 
   556 \end{frame}}
   557 \end{frame}}
   557 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   558 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   558 
   559 
   559 
   560 
   560 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   561 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   561 \mode<presentation>{
   562 \begin{frame}[c]
   562 \begin{frame}[c]
   563 \frametitle{An Interpreter}
   563 \frametitle{\begin{tabular}{c}An Interpreter\end{tabular}}
       
   564 
   564 
   565 \begin{center}
   565 \begin{center}
   566 \bl{\begin{tabular}{l}
   566 \bl{\begin{tabular}{l}
   567 $\{$\\
   567 $\{$\\
   568 \;\;$x := 5 \text{;}$\\
   568 \;\;$x := 5 \text{;}$\\
   577 \item the interpreter has to record the value of \bl{$x$} before assigning a value to \bl{$y$}\pause
   577 \item the interpreter has to record the value of \bl{$x$} before assigning a value to \bl{$y$}\pause
   578 \item \bl{\text{eval}(stmt, env)}
   578 \item \bl{\text{eval}(stmt, env)}
   579 \end{itemize}
   579 \end{itemize}
   580 
   580 
   581 
   581 
   582 \end{frame}}
   582 \end{frame}
   583 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   583 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   584 
   584 
   585 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   585 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   586 \mode<presentation>{
   586 \begin{frame}[c]
   587 \begin{frame}[c]
   587 \frametitle{An Interpreter}
   588 \frametitle{\begin{tabular}{c}Interpreter\end{tabular}}
       
   589 
   588 
   590 \begin{center}
   589 \begin{center}
   591 \bl{\begin{tabular}{@{}lcl@{}}
   590 \bl{\begin{tabular}{@{}lcl@{}}
   592 $\text{eval}(n, E)$ & $\dn$ & $n$\\
   591 $\text{eval}(n, E)$ & $\dn$ & $n$\\
   593 $\text{eval}(x, E)$ & $\dn$ & $E(x)$ \;\;\;\textcolor{black}{lookup \bl{$x$} in \bl{$E$}}\\
   592 $\text{eval}(x, E)$ & $\dn$ & $E(x)$ \;\;\;\textcolor{black}{lookup \bl{$x$} in \bl{$E$}}\\
   598 $\text{eval}(a_1\,!\!= a_2, E)$ & $\dn$ & $\neg(\text{eval}(a_1, E) = \text{eval}(a_2, E))$\\
   597 $\text{eval}(a_1\,!\!= a_2, E)$ & $\dn$ & $\neg(\text{eval}(a_1, E) = \text{eval}(a_2, E))$\\
   599 $\text{eval}(a_1 < a_2, E)$ & $\dn$ & $\text{eval}(a_1, E) < \text{eval}(a_2, E)$\
   598 $\text{eval}(a_1 < a_2, E)$ & $\dn$ & $\text{eval}(a_1, E) < \text{eval}(a_2, E)$\
   600 \end{tabular}}
   599 \end{tabular}}
   601 \end{center}
   600 \end{center}
   602 
   601 
   603 \end{frame}}
   602 \end{frame}
   604 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   603 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   605 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   604 
   606 \mode<presentation>{
   605 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
   607 \begin{frame}[c]
   606 \begin{frame}[c]
   608 \frametitle{\begin{tabular}{c}Interpreter (2)\end{tabular}}
   607 \frametitle{An Interpreter (2)}
   609 
   608 
   610 \begin{center}
   609 \begin{center}
   611 \bl{\begin{tabular}{@{}lcl@{}}
   610 \bl{\begin{tabular}{@{}lcl@{}}
   612 $\text{eval}(\text{skip}, E)$ & $\dn$ & $E$\\
   611 $\text{eval}(\text{skip}, E)$ & $\dn$ & $E$\\
   613 $\text{eval}(x:=a, E)$ & $\dn$ & \bl{$E(x \mapsto \text{eval}(a, E))$}\\
   612 $\text{eval}(x:=a, E)$ & $\dn$ & \bl{$E(x \mapsto \text{eval}(a, E))$}\\
   622 \multicolumn{3}{@{}l@{}}{\hspace{2cm}$\text{else}\; E$}\\
   621 \multicolumn{3}{@{}l@{}}{\hspace{2cm}$\text{else}\; E$}\\
   623 $\text{eval}(\text{write}\; x, E)$ & $\dn$ & $\{\;\text{println}(E(x))\; ;\;E\;\}$\\
   622 $\text{eval}(\text{write}\; x, E)$ & $\dn$ & $\{\;\text{println}(E(x))\; ;\;E\;\}$\\
   624 \end{tabular}}
   623 \end{tabular}}
   625 \end{center}
   624 \end{center}
   626 
   625 
   627 \end{frame}}
   626 \end{frame}
   628 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   627 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   629 
   628 
   630 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   629 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   631 \begin{frame}[c]
   630 \begin{frame}[c]
   632 \frametitle{\begin{tabular}{c}Test Program\end{tabular}}
   631 \frametitle{\begin{tabular}{c}Test Program\end{tabular}}
   671 
   670 
   672 \end{frame}}
   671 \end{frame}}
   673 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   672 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   674 
   673 
   675 
   674 
       
   675 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   676 \begin{frame}[c]
       
   677   \frametitle{Coursework: MkEps}
       
   678 
       
   679 \begin{center}
       
   680 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
       
   681   \bl{$mkeps([c_1 c_2 \ldots c_n])$}  & \bl{$\dn$} & $\bl{undefined}$\\
       
   682   \bl{$mkeps(r^*)$}                   & \bl{$\dn$} & $\bl{Stars\,[]}$\\
       
   683   \bl{$mkeps(r^{\{n\}})$}              & \bl{$\dn$} & $\bl{Stars\,(mkeps(r))^n}$\\
       
   684   \bl{$mkeps(r^{\{n..\}})$}            & \bl{$\dn$} & $\bl{Stars\,(mkeps(r))^n}$\\
       
   685   \bl{$mkeps(r^{\{..n\}})$}            & \bl{$\dn$} & $\bl{Stars\,[]}$\\
       
   686   \bl{$mkeps(r^{\{n..m\}})$}           & \bl{$\dn$} & $\bl{Stars\,(mkeps(r))^n}$\medskip\\
       
   687   
       
   688   \bl{$mkeps(r^+)$}                   & \bl{$\dn$} & \bl{$mkeps(r^{\{1..\}})$}\\
       
   689   \bl{$mkeps(r^?)$}                   & \bl{$\dn$} & \bl{$mkeps(r^{\{..1\}})$}\\
       
   690 \end{tabular}
       
   691 \end{center}
       
   692 
       
   693 \end{frame}
       
   694 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
       
   695 
       
   696 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   697 \begin{frame}[c]
       
   698   \frametitle{Coursework: Inj}
       
   699 
       
   700 \begin{center}
       
   701 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
       
   702   \bl{$inj([c_1 c_2 \ldots c_n])\,c\,Empty$}  & \bl{$\dn$} & $\bl{Chr\,c}$\\
       
   703   \bl{$inj(r^*)\,c\;(Seq\,v\,(Stars\,vs))$}                   & \bl{$\dn$} & $\bl{Stars\,(inj\,r\,c\,v::vs)}$\\
       
   704   \bl{$inj(r^{\{n\}})\,c\;(Seq\,v\,(Stars\,vs))$}              & \bl{$\dn$} & $\bl{Stars\,(inj\,r\,c\,v::vs)}$\\
       
   705   \bl{$inj(r^{\{n..\}})\,c\;(Seq\,v\,(Stars\,vs))$}            & \bl{$\dn$} & $\bl{Stars\,(inj\,r\,c\,v::vs)}$\\
       
   706   \bl{$inj(r^{\{..n\}})\,c\;(Seq\,v\,(Stars\,vs))$}            & \bl{$\dn$} & $\bl{Stars\,(inj\,r\,c\,v::vs)}$\\
       
   707   \bl{$inj(r^{\{n..m\}})\,c\;(Seq\,v\,(Stars\,vs))$}           & \bl{$\dn$} & $\bl{Stars\,(inj\,r\,c\,v::vs)}$\medskip\\
       
   708   
       
   709   \bl{$inj(r^+)\,c\,v$}                   & \bl{$\dn$} & \bl{$inj(r^{\{1..\}})\,c\,v$}\\
       
   710   \bl{$inj(r^?)\,c\,v$}                   & \bl{$\dn$} & \bl{$inj(r^{\{..1\}})\,c\,v$}\\
       
   711 \end{tabular}
       
   712 \end{center}
       
   713 
       
   714 \end{frame}
       
   715 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
       
   716 
       
   717 
       
   718 
   676 \end{document}
   719 \end{document}
   677 
   720 
   678 %%% Local Variables:  
   721 %%% Local Variables:  
   679 %%% mode: latex
   722 %%% mode: latex
   680 %%% TeX-master: t
   723 %%% TeX-master: t