\framesubtitle{Parsing}
Added some handy primitives
\begin{lstlisting}
-parseSColon :: (Parser Token a) -> Parser Token a
parseBlock :: Parser Token [Stmt]
+
parseOpR :: (Parser Token Op2) (Parser Token Expr) -> Parser Token Expr
parseOpL :: (Parser Token Op2) (Parser Token Expr) -> Parser Token Expr
-parseBBraces :: (Parser Token a) -> Parser Token a
-parseBCBraces :: (Parser Token a) -> Parser Token a
-parseBSqBraces :: (Parser Token a) -> Parser Token a
-trans :: TokenValue (TokenValue -> a) -> Parser Token (Pos, a)
+
trans2 :: TokenValue (TokenValue -> a) -> Parser Token a
trans1 :: TokenValue a -> Parser Token a
+
peekPos :: Parser Token Pos
\end{lstlisting}
\end{frame}
+\begin{frame}[fragile]
+ \frametitle{Statistics}
+ \framesubtitle{Lines of code}
+ \lstinputlisting{|"wc -l ../../*.[di]cl"}
+ \pause
+ \begin{block}{}
+ \emph{``Measuring programming progress by lines of code is like
+ measuring aircraft building progress by weight.''}\\
+ {---} Bill Gates
+ \end{block}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Statistics}
+ \framesubtitle{Hours of work}
+ We have no clue how much time we have worked on it\ldots
+ \pause
+ \begin{block}{}
+ \emph{``Choose a job you love, and you will never have to work a day in
+ your life.''}\\
+ {---} Confucius
+ \end{block}
+\end{frame}
\section{Examples}
+\begin{frame}
+ \frametitle{Wierd inputs}
+ \begin{itemize}
+ \item \pause Heap full
+ \pause\ldots Increase heap\\
+ \texttt{\$ ./spl -h 2000M}
+ \item \pause Stack full
+ \pause\ldots Increase stack\\
+ \texttt{\$ ./spl -s 200M}
+ \item \pause Segmentation fault
+ \pause\ldots Enable memory overcommitting\\
+ \texttt{\# echo 1 > /proc/sys/vm/overcommit\_memory}
+ \item \pause Still segmentation fault
+ \pause\ldots Buy more \textsc{RAM}
+ \item \pause Still segmentation fault?
+ \pause\ldots Divide into modules and parse separatly~\footnote{To be
+ implemented}
+ \item \pause Thus, we are only limited by hardware\ldots
+ \end{itemize}
+\end{frame}
-%- Anything that is specific to your parser
-% - Positions Pim
-% - yard (parser combinators) Pim
-% - Implementation language Pim
-% - Elaborate diffulties and eases (Tussendoor)
-% - LL* Mart
-%- Did you split it into two phases lexing and parsing, or just one phase? Pim
-% - Why parser combinator for lexer
-%- Did you change the grammar, and if so how? Mart
-% - Standard tricks, remove left assoc, get operator assoc correct.
-% - How did you solve the problems of precedence and associativity?
-% - Stops, this is design, parsing should be correct!!!1!
-%- For a couple of example programs, when you do a sequence of Mart
-% 1. parse
-% 2. pretty-print
-% 3. parse
-% 4. pretty-print
-% -- Dit gaan we met een shell scriptje doen
-%- Code metrics, loc, etc, met stomme xkcd Mart
-% How many lines of code do you have, how many hours did you work on it?
-% “Measuring programming progress by lines of code is like measuring
-% aircraft building progress by weight.”
-%
-% ― Bill Gates
-% Hoeveel uur, ook geen idee. Ook een stomme quote
-%- Did you try your parser on weird inputs, like 100 megabyte of nested Mart
-%parenthesis? 1 gigabyte?
-% - Yes, we did, didn't work out. Uses big heap and stack
-%- Problems and learned things
-%- Demonstrate your parser and pretty-printer on two or three programs that you
-% find interesting Mart (teminaldingen kun jij goed ;))
+\begin{frame}
+ \frametitle{Learned lessons}
+ \begin{itemize}
+ \item \pause Parser combinators are elegant!
+ \item \pause Positional errors are a must!
+ \item \ldots
+ \end{itemize}
+\end{frame}
\end{document}