blob: 99dad9cc035561bd62fbc619539580278e63ab44 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
\begin{figure} \fbox{
$\begin{array}{lrcll}
%\mbox{Program} & prog & \rightarrow & binds & \\
%\\
\mbox{Bindings} & binds & \rightarrow
& bind_1 @;@ \ldots @;@~ bind_n & n \geq 1 \\
& bind & \rightarrow & var ~@=@~ vars_f ~@\@ upd~ vars_a ~@->@~expr
& \mbox{Closure} \\
&&&& (vars_f = \freevars{expr} \setminus vars_a) \\
\\
\mbox{Update flag} & upd & \rightarrow & @u@ & \mbox{Updatable} \\
&& | & @n@ & \mbox{Not updatable} \\
\\
\mbox{Expression} & expr
& \rightarrow & @let@~binds~@in@~ expr
& \mbox{Local definition} \\
&& | & @letrec@~binds~@in@~expr
& \mbox{Local recursive definition} \\
&& | & @case@~expr~@of@~alts
& \mbox{Case expression} \\
&& | & var~vars & \mbox{Application}\\
&& | & con~vars
& \mbox{Saturated constructor} \\
&& | & prim~vars
& \mbox{Saturated primitive} \\
&& | & literal & \\
\\
\mbox{Alternatives} & alts & \rightarrow
& calt_1@;@ \ldots @;@~calt_n@; default ->@~ expr
& n \geq 0~\mbox{(Boxed)} \\
&& | & lalt_1@;@ \ldots @;@~lalt_n@;@~var ~@->@~ expr
& n \geq 0~\mbox{(Unboxed)} \\
\\
\mbox{Constructor alt}
& calt & \rightarrow & con~vars~@->@~expr & \\
\mbox{Literal alt}
& lalt & \rightarrow & literal~@->@~expr & \\
\\
\mbox{Literals} & literal
& \rightarrow & integer & \\
&& | & \ldots & \\
\\
\mbox{Primitives} & prim
& \rightarrow & @+@ ~|~ @-@ ~|~ @*@ ~|~ @/@ \\
&& | & \ldots & \\
\\
\mbox{Variable lists} & vars & \rightarrow &
@[@var_1@,@ \ldots @,@~var_n@]@ & n \geq 0 \\
\\
\end{array}$
}
\caption{Syntax of the STG language}
\label{fig:stg-syntax}
\end{figure}
|