summaryrefslogtreecommitdiff
path: root/ghc/docs/add_to_compiler/stg-summary-fig.verb
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}