summaryrefslogtreecommitdiff
path: root/papers/cfrontend_new/dynsem1.etex
blob: 136c0cda8e6fe3084fce9607aaccedf3f045a7a6 (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
\begin{figure}

\numberrules

Expressions in l-value position:
\begin{pannel}

\irule
        E(\id) = b
        --------------------------------------------------
        G, E |- \id^\tau, M \evallvalue (b, 0), \E0, M
\end \label{rule:1}

\irule
%        G, E |- a, M \evalexpr {\tt Vptr}(\loc), \tr, M'
        G, E |- a, M \evalexpr \loc, \tr, M'
        --------------------------------------------------
        G, E |- (\hbox{"*"}a)^\tau, M \evallvalue \loc, \tr, M'
\end \label{rule:2}

\irule
        G, E |- \unannot{a_1}{\tau_1}, M \evalexpr v_1, \tr_1, M_1 \\
        G, E |- \unannot{a_2}{\tau_2}, M_1 \evalexpr v_2, \tr_2, M_2 \\
        "add" (v_1, \tau_1, v_2, \tau_2) = \some{\loc}
        --------------------------------------------------
        G, E |- (\unannot{a_1}{\tau_1} [\unannot{a_2}{\tau_2}])^\tau, M \evallvalue \loc, \cat {\tr_1} \tr_2, M_2
\end \label{rule:3}

\irule
        G, E |- \unannot{a}{\tau}, M \evallvalue (b,\ofs), \tr, M' \\
        \tau = "Tstruct" (\id, \fl) &
%        "type_of" (a) = "Tstruct" (\id, \fl) &
       "field_offset" (f, \fl) =  \some{\delta}
        --------------------------------------------------
        G, E |- (\unannot{a}{\tau} \dot f)^{\tau_s}, M \evallvalue (b,\ofs + "repr" (\delta)), \tr, M'
\end \label{rule:4}

\irule
        G, E |- \unannot{a}{\tau}, M \evallvalue \loc, \tr, M' &
         \tau = "Tunion" (\id, \fl) 
        --------------------------------------------------
        G, E |- (\unannot{a}{\tau} \dot f)^{\tau_u}, M \evallvalue \loc, \tr, M'
\end \label{rule:5}

\end{pannel}
Expressions in r-value position:
\begin{pannel}

\irule
        G, E |- \unannot{a}\tau, M \evallvalue \loc, \tr, M' &
        "loadval" (\tau, M', \loc) = \some{v}
        --------------------------------------------------
        G, E |- \unannot{a}\tau, M \evalexpr v, \tr, M'
\end \label{rule:6}

\irule
        G, E |- a, M \evallvalue \loc, \tr, M'
        --------------------------------------------------
        G, E |- (\hbox{"&"}a)^\tau, M \evalexpr \loc, \tr, M'
\end \label{rule:7}

\irule
        G, E |- \unannot{a_1}{\tau_1}, M \evalexpr v_1, \tr_1, M_1 &
        G, E |- \unannot{a_2}{\tau_2}, M_1 \evalexpr v_2, \tr_2, M_2 \\
        "eval_binary_operation" (\op, v_1,\tau_1, v_2,\tau_2) =  \some{v}
        --------------------------------------------------
        G, E |- (\unannot{a_1}{\tau_1} \op \, \unannot{a_2}{\tau_2})^\tau, M \evalexpr v, \cat \tr_1 \tr_2, M_2
\end \label{rule:8}

\irule
        G, E |- \unannot{a}{\tau_a}, M \evalexpr v', \tr, M' &
        "cast" (v',\tau_a,\tau) = \some{v}
        --------------------------------------------------
        G, E |- ((\tau)\unannot{a}{\tau_a}))^\tau, M \evalexpr v, \tr, M'
\end \label{rule:9}
\end{pannel}

\caption{Selected rules of the dynamic semantics of Clight (expression evaluation)}
\label{fig:dynsem1}
\end{figure}