oops, eerste presentatie weggegooid
authorMart Lubbers <mart@martlubbers.net>
Wed, 13 Apr 2016 17:21:48 +0000 (19:21 +0200)
committerMart Lubbers <mart@martlubbers.net>
Wed, 13 Apr 2016 17:21:48 +0000 (19:21 +0200)
deliverables/p1/p1.tex [deleted file]
deliverables/p2/.chktexrc [new file with mode: 0644]
deliverables/p2/Makefile [moved from deliverables/p1/Makefile with 79% similarity]
deliverables/p2/clean.sty [moved from deliverables/p1/clean.sty with 100% similarity]
deliverables/p2/p2.tex [new file with mode: 0644]
deliverables/p2/pre.tex [moved from deliverables/p1/pre.tex with 64% similarity]

diff --git a/deliverables/p1/p1.tex b/deliverables/p1/p1.tex
deleted file mode 100644 (file)
index 27c30d1..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-%&p1
-\begin{document}
-\frame{\titlepage}
-
-\section{Introduction}
-\begin{frame}
-       \frametitle{\textsc{SPL}}
-       \begin{block}{Features}
-               \begin{itemize}
-                       \item Implementation language:
-                               Clean ({\tiny\url{http://clean.cs.ru.nl}})
-                               \pause
-                               \begin{itemize}
-                                       \item Pure language
-                                       \item Higher order functions
-                                       \item Monads
-                                       \item Using parser combinator library \textsc{Yard}
-                               \end{itemize}
-                       \pause
-                       \item Positional data available for easy locating of errors.
-                       \pause
-                       \item Standardized parser errors. This means you can set it as
-                               \texttt{buildprg} in \texttt{vim} and you can then use the
-                               quickfix window!
-               \end{itemize}
-       \end{block}
-\end{frame}
-
-\begin{frame}[fragile]
-       \frametitle{\textsc{YARD}}
-       \framesubtitle{A minimal home grown monadic parser combinator library}
-       \begin{itemize}
-               \item Inspired by \textsc{parsec}: $1pc=3.375\cdot10^{16}yd$~\footnote{
-                               A yard is exactly $36$ inch and an inch is exactly the length
-                               of $3$ barleycorns}.
-               \item Definitons:
-                       \begin{CleanCode}
-:: Error = PositionalError Int Int String | Error String
-:: Parser a b = Parser ([a] -> (Either Error b, [a]))
-                       \end{CleanCode}
-               \pause
-                       \item Result is either Error or \texttt{b}, not a \texttt{[b]} as
-                               described Hutton \& Meijer \footnote{G. Hutton and E. Meijer. 
-                               Monadic parser combinators. 1996.}
-               \pause
-               \item Matches longest left-most parser
-               \pause
-               \item Stops immediately on error\pause\\
-                       By design!
-       \end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-       \frametitle{\textsc{YARD} Combinators}
-       \framesubtitle{Designed to be minimal, just 14 parsers/combinators}
-       YARD is designed to be minimal and defines just 14 primitives:
-       \begin{columns}[t]
-               \begin{column}{0.5\textwidth}
-                       \begin{CleanCode}
-top :: Parser a a
-peek :: Parser a a
-fail :: Parser a b
-eof :: Parser a Void
-(until) :: (Parser a b) 
-        (Parser a c) 
-        -> Parser a [b]
-satisfy :: (a -> Bool) 
-        -> Parser a a
-check :: (a -> Bool) 
-        -> Parser a a
-item :: a -> Parser a a
-list :: [a] -> Parser a [a]
-                       \end{CleanCode}
-               \end{column}
-               \begin{column}{0.5\textwidth}
-                       \begin{CleanCode}
-(>>=) :: (Parser a b) 
-       (b -> Parser a c) 
-        -> Parser a c
-(<|>) :: (Parser a b) 
-       (Parser a b) 
-       -> Parser a b
-some :: (Parser a b) 
-       -> Parser a [b]
-many :: (Parser a b) 
-       -> Parser a [b]
-optional :: (Parser a b) 
-      -> Parser a (Maybe b)
-                       \end{CleanCode}
-               \end{column}
-       \end{columns}
-\end{frame}
-
-\begin{frame}[fragile]
-       \frametitle{\textsc{YARD} Combinators}
-       \framesubtitle{Designed to be minimal, just \textbf{7} parsers/combinators}
-       Actually, scrap that, just \textbf{7} primitives:
-       \begin{columns}[t]
-               \begin{column}{0.5\textwidth}
-                       \begin{CleanCode}
-top :: Parser a a
-peek :: Parser a a
-fail :: Parser a b
-eof :: Parser a Void
-                       \end{CleanCode}
-               \end{column}
-               \begin{column}{0.5\textwidth}
-                       \begin{CleanCode}
-(>>=) :: (Parser a b) 
-       (b -> Parser a c) 
-        -> Parser a c
-(<|>) :: (Parser a b) 
-       (Parser a b) 
-       -> Parser a b
-                       \end{CleanCode}
-               \end{column}
-       \end{columns}
-       All others can be (and are) derived from these. e.g.
-       \begin{lstlisting}
-satisfy :: (a -> Bool) -> Parser a a
-satisfy f = top >>= \c -> if (f c) (return c) fail
-       \end{lstlisting}
-\end{frame}
-
-\section{Design choices}
-\begin{frame}
-       \frametitle{Adapting the grammar}
-       \begin{itemize}
-               \item Remove left recursion
-               \item Fixing associativity
-               \item Added small features such as escape characters \texttt{
-                       \textbackslash n\textbackslash b}
-               \pause
-               \item Show grammar now\ldots
-       \end{itemize}
-\end{frame}
-
-\begin{frame}
-       \frametitle{Two-phase design}
-       \framesubtitle{Lexing}
-       Also done with \textsc{YARD} because
-       \begin{itemize}
-               \item Multiline comments
-               \item Alternatives
-               \item Positions
-       \end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-       \frametitle{Two-phase design}
-       \framesubtitle{Parsing}
-       Read from stdin, write to stdout\\
-       Added some handy primitives
-       \begin{CleanCode}
-parseBlock :: Parser Token [Stmt]
-
-parseOpR :: (Parser Token Op2) (Parser Token Expr) -> Parser Token Expr
-parseOpL :: (Parser Token Op2) (Parser Token Expr) -> Parser Token Expr
-
-trans2 :: TokenValue (TokenValue -> a) -> Parser Token a
-trans1 :: TokenValue a -> Parser Token a
-
-peekPos :: Parser Token Pos
-       \end{CleanCode}
-\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{Weird 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}
-
-\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}
diff --git a/deliverables/p2/.chktexrc b/deliverables/p2/.chktexrc
new file mode 100644 (file)
index 0000000..7d63431
--- /dev/null
@@ -0,0 +1 @@
+VerbEnvir { CleanCode }
similarity index 79%
rename from deliverables/p1/Makefile
rename to deliverables/p2/Makefile
index c2f8c38..98517ce 100644 (file)
@@ -1,6 +1,6 @@
 LATEX:=pdflatex
 LATEXFLAGS:=-shell-escape
-DOCUMENT:=p1
+DOCUMENT:=p2
 
 .PHONY: all clean
 .SECONDARY: $(DOCUMENT).fmt
@@ -15,4 +15,4 @@ all: $(DOCUMENT).pdf
        $(LATEX) $(LATEXFLAGS) -ini -jobname="$(basename $@)" "&$(LATEX) $<\dump"
 
 clean:
-       $(RM) -v $(addprefix $(DOCUMENT).,aux fmt log nav out snm toc)
+       $(RM) -v $(addprefix $(DOCUMENT).,aux fmt log nav out snm toc vrb)
diff --git a/deliverables/p2/p2.tex b/deliverables/p2/p2.tex
new file mode 100644 (file)
index 0000000..0399d8d
--- /dev/null
@@ -0,0 +1,93 @@
+%&p2
+\begin{document}
+\frame{\titlepage}
+
+\begin{frame}[fragile]
+       \frametitle{\textsc{SPLS}}
+       \begin{block}{Features}
+               \begin{itemize}
+                       \item Implementation language:
+                               Clean ({\tiny\url{http://clean.cs.ru.nl}})
+                       \pause%
+                       \item State transformer monad\pause%
+                               \begin{CleanCode}
+:: Gamma :== (Map String Type, [String])
+:: Env a :== StateT Gamma (Either SemError) a
+                               \end{CleanCode}
+                       \item Preferably we want to have an \CI{Either} monad transformer
+                               but clean does not have that\ldots
+               \end{itemize}
+       \end{block}
+\end{frame}
+
+\begin{frame}[fragile]
+       \frametitle{Grammar changes}
+
+       \begin{itemize}
+               \item Function type:\pause%
+                       \begin{CleanCode}
+<FunType>  ::= <VoidType> ['->' <FunType>]
+<VoidType> ::= <Void> | Type
+                       \end{CleanCode}
+               \pause Example%
+                       \begin{CleanCode}
+append(l1, l2) :: [t] -> [t] -> [t] {
+    ...
+}
+                       \end{CleanCode}
+               \pause\item We check in the semantic analysis that \CI{Void} is only in
+                       the last type.
+               \pause\item This is for future higher-order functions
+       \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+       \frametitle{What do we analyze exactly?}
+       \begin{CleanCode}
+:: Pos = {line :: Int, col :: Int}
+:: SemOutput :== Either [SemError] (AST, Gamma)
+:: SemError 
+    = ParseError Pos String                     // Post-parse errors
+    | UnifyError Pos Type Type                  // Unification
+    | FieldSelectorError Pos Type FieldSelector // hd, tail, fst, snd
+    | OperatorError Pos Op2 Type                // 'a' == 5
+    | UndeclaredVariableError Pos String        // Variable ordering
+    | Error String
+
+sem :: AST -> SemOutput
+       \end{CleanCode}
+\end{frame}
+
+\begin{frame}[fragile]
+       \frametitle{Analyses}
+       \pause%
+       \begin{block}{Scoping?}
+               Local variables get a new name and are changed in the function body.
+       \end{block}
+       \pause%
+       \begin{block}{Order?}
+               Does matter for variables, not for functions.
+       \end{block}
+       \pause%
+       \begin{block}{Mutual recursion?}
+               Yep!
+       \end{block}
+       \pause%
+       \begin{block}{Higher order functions?}
+               Hopefully in the future
+       \end{block}
+\end{frame}
+
+% - Can functions that are defined later in a file call earlier defined functions?
+% - Can local variables be defined in terms of other local variables?
+% - How do you deal with assignments?
+% - Tell us if and how you include the value restriction.
+%- How do you deal with recursion?
+%- How do you deal with multiple recursion?
+%- If you forbid multiple recursion, how do you do so?
+% - Does your language support higher-order functions?
+% - How do you deal with polymorphism?
+% - How do you deal with overloading?
+% - How does the absence/presence of type signatures influence your type
+%  checker?
+\end{document}
similarity index 64%
rename from deliverables/p1/pre.tex
rename to deliverables/p2/pre.tex
index 5cc364c..59c31d6 100644 (file)
@@ -4,8 +4,8 @@
 \usepackage{listings}
 \usepackage{clean}
 
-\title[cc1516: Lexing \& Parsing]{SPL}
-\subtitle{\texttt{<spl> ::= <spl> <lexer> 'and' <parser>}}
+\title[cc1516: Semantic analysis]{SPLT}
+\subtitle{\texttt{<splt>~::= <spl> <parser> `,' <parser> `and' <typechecker>}}
 \author[P. Jager, M. Lubbers]{Pim Jager\inst{1}\and Mart Lubbers\inst{1}}
 \institute[Radboud University]{%
        \inst{1}%
 \subject{Parser}
 \date{\today}
 
-\AtBeginSection[]{%
-       \begin{frame}
-               \frametitle{Table of Contents}
-               \tableofcontents[currentsection]
-       \end{frame}
-}
-
 \lstset{%
        basicstyle=\ttfamily\footnotesize,
        breaklines