oops, eerste presentatie weggegooid
[cc1516.git] / deliverables / p2 / p2.tex
1 %&p2
2 \begin{document}
3 \frame{\titlepage}
4
5 \begin{frame}[fragile]
6 \frametitle{\textsc{SPLS}}
7 \begin{block}{Features}
8 \begin{itemize}
9 \item Implementation language:
10 Clean ({\tiny\url{http://clean.cs.ru.nl}})
11 \pause%
12 \item State transformer monad\pause%
13 \begin{CleanCode}
14 :: Gamma :== (Map String Type, [String])
15 :: Env a :== StateT Gamma (Either SemError) a
16 \end{CleanCode}
17 \item Preferably we want to have an \CI{Either} monad transformer
18 but clean does not have that\ldots
19 \end{itemize}
20 \end{block}
21 \end{frame}
22
23 \begin{frame}[fragile]
24 \frametitle{Grammar changes}
25
26 \begin{itemize}
27 \item Function type:\pause%
28 \begin{CleanCode}
29 <FunType> ::= <VoidType> ['->' <FunType>]
30 <VoidType> ::= <Void> | Type
31 \end{CleanCode}
32 \pause Example%
33 \begin{CleanCode}
34 append(l1, l2) :: [t] -> [t] -> [t] {
35 ...
36 }
37 \end{CleanCode}
38 \pause\item We check in the semantic analysis that \CI{Void} is only in
39 the last type.
40 \pause\item This is for future higher-order functions
41 \end{itemize}
42 \end{frame}
43
44 \begin{frame}[fragile]
45 \frametitle{What do we analyze exactly?}
46 \begin{CleanCode}
47 :: Pos = {line :: Int, col :: Int}
48 :: SemOutput :== Either [SemError] (AST, Gamma)
49 :: SemError
50 = ParseError Pos String // Post-parse errors
51 | UnifyError Pos Type Type // Unification
52 | FieldSelectorError Pos Type FieldSelector // hd, tail, fst, snd
53 | OperatorError Pos Op2 Type // 'a' == 5
54 | UndeclaredVariableError Pos String // Variable ordering
55 | Error String
56
57 sem :: AST -> SemOutput
58 \end{CleanCode}
59 \end{frame}
60
61 \begin{frame}[fragile]
62 \frametitle{Analyses}
63 \pause%
64 \begin{block}{Scoping?}
65 Local variables get a new name and are changed in the function body.
66 \end{block}
67 \pause%
68 \begin{block}{Order?}
69 Does matter for variables, not for functions.
70 \end{block}
71 \pause%
72 \begin{block}{Mutual recursion?}
73 Yep!
74 \end{block}
75 \pause%
76 \begin{block}{Higher order functions?}
77 Hopefully in the future
78 \end{block}
79 \end{frame}
80
81 % - Can functions that are defined later in a file call earlier defined functions?
82 % - Can local variables be defined in terms of other local variables?
83 % - How do you deal with assignments?
84 % - Tell us if and how you include the value restriction.
85 %- How do you deal with recursion?
86 %- How do you deal with multiple recursion?
87 %- If you forbid multiple recursion, how do you do so?
88 % - Does your language support higher-order functions?
89 % - How do you deal with polymorphism?
90 % - How do you deal with overloading?
91 % - How does the absence/presence of type signatures influence your type
92 % checker?
93 \end{document}