summaryrefslogtreecommitdiff
path: root/papers/cfrontend_new/dynsem2.etex
blob: e6f81639e575b618f32d81c44efb551753164db7 (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
\begin{figure}

\numberrules

Statements:
\begin{pannel}

\srule  G, E |- "skip", M \evalstmt "Out_normal", \E0, M
\end
\label{rule:10}

\\[2mm]
\srule  G, E |- "break", M \evalstmt "Out_break", \E0, M
\end
\label{rule:13}

\\[2mm]
\srule  G, E |- "continue", M \evalstmt "Out_continue", \E0, M
\end
\label{rule:14}

\irule
        G, E |- a, M \evalexpr v, \tr, M'
        --------------------------------------------------
        G, E |-  a , M \evalstmt \out, \tr, M'
\end \label{rule:11}

\irule
        G, E |- \unannot{a_1}{\tau}, M \evallvalue \loc, \tr_1, M_1 &
        G, E |- \unannot{a_2}{\tau'}, M_1 \evalexpr v, \tr_2, M_2 \\
        "storeval"(\tau,M_2,\loc,v) = \some{M_3}
        --------------------------------------------------
        G, E |-  {(\unannot{a_1}{\tau} \hbox{" = "} \unannot{a_2}{\tau'})}^{\tau}, M \evalexpr v, \cat {\tr_1} \tr_2, M_3
\end \label{rule:12}

\\
\irule
        G, E |- s_1, M \evalstmt "Out_normal", \tr_1, M_1 &
        G, E |- s_2, M_1 \evalstmt \out, \tr_2, M_2
        --------------------------------------------------
        G, E |- (s_1 ; s_2), M \evalstmt \out, \cat {\tr_1} \tr_2, M_2
\end \label{rule:15}

\irule
        G, E |- s_1, M \evalstmt out, \tr, M' &
        out \not= "Out_normal"
        --------------------------------------------------
        G, E |- (s_1; s_2), M \evalstmt \out, \tr, M'
\end \label{rule:16}

\\
\irule
        G, E |- a, M \evalexpr v, \tr, M' & "is_false"(v) 
        --------------------------------------------------
        G, E |- ("while" (a) ~ s), M \evalstmt  "Out_normal", \tr, M'
\end \label{rule:17}

\irule
        G, E |- a, M \evalexpr v, \tr_1, M_1 & "is_true" (v) \\
        G, E |- s, M_1 \evalstmt \out, \tr_2, M_2 \\
       \out \in \{"Out_break", "Out_return", "Out_return" (v)\}
        --------------------------------------------------
        G, E |- ("while" (a)~s), M \evalstmt "Out_normal", \cat {\tr_1} \tr_2, M_2
\end \label{rule:18}

\irule
        G, E |- a, M \evalexpr v_a, \tr_1, M_1 & "is_true" (v_a) \\
        G, E |- s, M_1 \evalstmt ("Out_normal" \mid "Out_continue"), \tr_2, M_2 \\
        G, E |- ("while" (a)~s), M_2 \evalstmt \out', \tr_3, M_3 
        --------------------------------------------------
        G, E |- ("while" (a)~s), M \evalstmt \out', \cat {\cat {\tr_1} \tr_2} \tr_3, M_3
\end \label{rule:19}

\\
\srule
        G, E |- ("return" \, \None), M \evalstmt "Out_return" , \tr, M
\end \label{rule:20}

\\
\irule
        G, E |- a, M \evalexpr v, \tr, M'
        --------------------------------------------------
        G, E |- ("return" \some a), M \evalstmt "Out_return" (v), \tr, M'
\end \label{rule:21}

\end{pannel}
\caption{Selected rules of the dynamic semantics of Clight (statements execution)}
\label{fig:dynsem2}
\end{figure}