Merge branch 'master' of github.com:dopefishh/cc1516
[cc1516.git] / deliverables / p3 / p3.tex
1 \documentclass{beamer}
2
3 \usepackage{xcolor}
4 \usepackage{listings}
5 \usepackage{clean}
6
7 \title[cc1516: Semantic analysis]{SPLC}
8 \subtitle{\texttt{<splc>~::= <spl> <parser> `,' <lexer> `and' <compiler>}}
9 \author[P. Jager, M. Lubbers]{Pim Jager\inst{1}\and Mart Lubbers\inst{1}}
10 \institute[Radboud University]{%
11 \inst{1}%
12 Computer Science: Software Science\\
13 Radboud University
14 }
15 \subject{Code generation}
16 \date{\today}
17
18 \lstset{%
19 basicstyle=\ttfamily\footnotesize,
20 breaklines
21 }
22
23 \usetheme{Warsaw}
24 \usecolortheme{beaver}
25
26 \begin{document}
27 \frame{\titlepage}
28
29 \begin{frame}[fragile]
30 \frametitle{\textsc{SPLC}}
31 \begin{block}{Features}
32 \begin{itemize}
33 \item Implementation language:
34 Clean ({\tiny\url{http://clean.cs.ru.nl}})
35 \item Type checking and type inference
36 % \item No multiple recursion\ldots\pause\ yet\ldots\pause%
37 \item Higher order functions
38 \end{itemize}
39 \end{block}
40 \begin{block}{Changes}
41 \begin{lstlisting}
42 gen.dcl | 6 +
43 gen.icl | 221 ++++++++++++++
44 grammar/grammar.txt | 19 +-
45 parse.icl | 39 ++-
46 sem.dcl | 10 +-
47 sem.icl | 676 ++++++++++++++++++++++++------------------
48 spl.icl | 35 ++-
49 \end{lstlisting}
50 \end{block}
51 \end{frame}
52
53 \begin{frame}
54 \frametitle{Progress since previous presentation}
55 \begin{itemize}[<+->]
56 \item Completely redid typechecking and inference
57 \item Extended semantic analysis with
58 \begin{itemize}[<+->]
59 \item Complain when unknown functions are used
60 \item Complain when there is no main
61 \item Complain when \CI{Void} is used as a non terminal type
62 \item Complain when duplicate functions are used
63 \item Complain when the main is not of the correct form
64 \end{itemize}
65 \item Higher order functions
66 \item Code generation for expressions
67 \item A lot needs to be done\ldots
68 \end{itemize}
69 \end{frame}
70
71 \begin{frame}[fragile]
72 \frametitle{Type checking}
73 \begin{block}{Two pass}
74 \begin{itemize}
75 \item Constraint collecting
76 \item Constraint satisfaction
77 \end{itemize}
78 \end{block}
79 \pause%
80 \begin{block}{\CI{RWST}}
81 \begin{CleanCode}
82 :: Scheme = Forall [TVar] Type
83 :: Gamma :== Map String Scheme
84 :: Typing a :== StateT (Gamma, [TVar]) (Either SemError) a
85 :: Substitution :== `Map'.Map TVar Type
86 :: Constraints :== [(Type, Type)]
87 :: SemError
88 \end{CleanCode}
89 \end{block}
90 \end{frame}
91
92 \begin{frame}[fragile]
93 \frametitle{Code generation}
94 \begin{block}{}
95 \begin{CleanCode}
96 :: SSMProgram :== [Instr]
97 :: Instr = Instr String [Arg] String
98 | Lab Label
99 :: Label :== String
100 :: Arg = L Label | Lit Int | Raw String
101 :: GenError = Error String
102 :: GenMap :== Map String LoadPlace
103 :: LoadPlace = LDA Int | LDC Int | LDH Int | LDL Int
104 | LDR Int | LDS Int
105 | FUNC Label
106 \end{CleanCode}
107 \end{block}
108 \pause%
109 \begin{block}{\CI{RWST} we meet again}
110 \begin{CleanCode}
111 :: Gen a :== RWST () SSMProgram (GenMap, [Label]) (Either GenError) a
112 \end{CleanCode}
113 \end{block}
114 \end{frame}
115
116 \begin{frame}[fragile]
117 \frametitle{Future}
118 \begin{block}{Higher order functions}
119 Read up on how to implement higher order functions
120 \end{block}
121 \pause%
122 \begin{block}{Hand in hand with code generation}
123 To get a fully working compiler and report before the deadline
124 \end{block}
125 \end{frame}
126 \end{document}