Add documentation

This commit is contained in:
2026-02-15 04:35:24 +01:00
parent 5959fbb552
commit 580bd7e857
6 changed files with 727 additions and 0 deletions

126
doc/type-system.tex Normal file
View File

@@ -0,0 +1,126 @@
\part{Type system}
\begin{grammar}
<type> = <array-type>
\alt{} <pointer-type>
\alt{} <record-type>
\alt{} <enumeration-type>
\alt{} <procedure-type>
\alt{} <identifier>.
\end{grammar}
\chapter{Primitive types}
\begin{itemize}
\item Pointer
\item Word
\item Int
\item Bool
\item String
\item Char
\end{itemize}
\chapter{Pointer types}
\begin{grammar}
<pointer-type> = `^' <type>.
\end{grammar}
\begin{lstlisting}[caption=Example]
program;
var
x: Int;
y: ^Int;
begin
y := @x;
y^ := 0
end.
\end{lstlisting}
\chapter{Static array}
\begin{grammar}
<array-type> = `[' <expression> `]' <type>.
\end{grammar}
\begin{lstlisting}[caption=Example]
program;
var
array: [3]Int := [1, 2, 3];
begin
array[1] := array[2]
end.
\end{lstlisting}
\chapter{Procedure types}
\begin{grammar}
<procedure-heading> = `proc' <identifier-definition> \\
`(' [<field> \{`,' <field>\}] `)' <return-declaration>.
<block> = <constant-part> <variable-part> <statement-part> `end'.
<procedure-declaration> = <procedure-heading> `;' (block | `extern').
<return-declaration> = [`->' `!\@' | `->' type].
<procedure-type> = `proc' `(' [<types>] `)' <return-declaration>.
\end{grammar}
\begin{lstlisting}[caption=Example]
program;
var
a: proc(Int) -> Int;
proc f(x: Int) -> Int;
end;
begin
a := f;
a(0)
end.
\end{lstlisting}
\chapter{Records}
\begin{grammar}
<field> = <identifier> `:\@' <type>.
<record-type> = `record' [`(' <identifier> `)'] [<field> \{`;' <field>\}] `end'.
\end{grammar}
\begin{lstlisting}[caption=Example]
program;
type
T = record
x: Int
end;
U = record(T)
y: Int;
z: Int
end;
var
u: U;
begin
u := U(0, 1, 2);
u.x := 3
end.
\end{lstlisting}
\chapter{Enumerations}
\begin{grammar}
<enumeration-type> = `(' <identifier> \{`,' <identifier>\} `)'.
\end{grammar}
\begin{lstlisting}[caption=Example]
program;
type
E = (one, two, three);
var
e: E;
begin
e := E.one
end.
\end{lstlisting}