blob: 406a62c3459a72647ec10c83fa35fac73994984e (
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
digraph Lattice {
// Define nodes
splines=false;
node [shape=circle, style=filled, fillcolor=lightblue];
nodesep=0.6;
TOP [label="⊤"];
BOT [label="⊥"];
CTRL [label="Ctrl"];
XCTRL [label="~Ctrl"];
INT_TOP [label="IntTop"];
INT_BOT [label="IntBot"];
INT_MIN [label="-n"];
INT_MINDOTS [label="..." shape=none style=none];
INT_MINUS [label="-1"];
INT_ZERO [label="0"];
INT_PLUS [label="1"];
INT_MAXDOTS [label="..." shape=none style=none];
INT_MAX [label="+n"];
STRUCT_TOP [label="$TOP"];
STRUCT_S1 [label="S1"];
STRUCT_S2 [label="S2"];
STRUCT_BOT [label="$BOT"]
PTR_TOP [label="*$TOP"];
PTR_NULL [label="null"];
PTR_VOIDPTR [label="*void"];
PTR_S1 [label="*S1"];
PTR_S2 [label="*S2"];
PTR_S1OPT [label="*S1?"];
PTR_S2OPT [label="*S2?"];
PTR_BOT [label="*$BOT?"];
MEM_TOP [label="MEM#TOP"];
MEM_ALIAS1 [label="#1"];
MEM_ALIAS2 [label="#2"];
MEM_ALIASDOTS [label="..." shape=none style=none];
MEM_ALIASN [label="#n"];
MEM_BOT [label="MEM#BOT"];
// Define edges
edge [arrowhead=none];
TOP -> CTRL;
CTRL -> XCTRL;
XCTRL -> BOT;
TOP -> INT_TOP;
INT_TOP -> INT_MIN;
INT_TOP -> INT_MINDOTS;
INT_TOP -> INT_MINUS;
INT_TOP -> INT_ZERO;
INT_TOP -> INT_PLUS;
INT_TOP -> INT_MAXDOTS;
INT_TOP -> INT_MAX;
INT_MIN -> INT_BOT;
INT_MINDOTS -> INT_BOT;
INT_MINUS -> INT_BOT;
INT_ZERO -> INT_BOT;
INT_PLUS -> INT_BOT;
INT_MAXDOTS -> INT_BOT;
INT_MAX -> INT_BOT;
INT_BOT -> BOT;
INT_MIN -> INT_MINDOTS -> INT_MINUS -> INT_ZERO -> INT_PLUS -> INT_MAXDOTS -> INT_MAX [style=invis];
TOP -> STRUCT_TOP;
STRUCT_TOP -> STRUCT_S1;
STRUCT_TOP -> STRUCT_S2;
STRUCT_S1 -> STRUCT_BOT;
STRUCT_S2 -> STRUCT_BOT;
STRUCT_BOT -> BOT;
TOP -> PTR_TOP;
PTR_TOP -> PTR_S1;
PTR_TOP -> PTR_S2;
PTR_TOP -> PTR_NULL;
PTR_TOP -> PTR_VOIDPTR;
PTR_NULL -> PTR_BOT;
PTR_NULL -> PTR_S1OPT;
PTR_NULL -> PTR_S2OPT;
PTR_S1 -> PTR_S1OPT;
PTR_S1 -> PTR_VOIDPTR;
PTR_S2 -> PTR_S2OPT;
PTR_S2 -> PTR_VOIDPTR;
PTR_VOIDPTR -> PTR_BOT;
PTR_S1OPT -> PTR_BOT;
PTR_S2OPT -> PTR_BOT;
PTR_BOT -> BOT;
TOP -> MEM_TOP;
MEM_TOP -> MEM_ALIAS1;
MEM_TOP -> MEM_ALIAS2;
MEM_TOP -> MEM_ALIASDOTS;
MEM_TOP -> MEM_ALIASN;
MEM_ALIAS1 -> MEM_BOT;
MEM_ALIAS2 -> MEM_BOT;
MEM_ALIASDOTS -> MEM_BOT;
MEM_ALIASN -> MEM_BOT;
MEM_BOT -> BOT;
MEM_ALIAS1 -> MEM_ALIAS2 -> MEM_ALIASDOTS -> MEM_ALIASN [style=invis];
// Additional customization
{rank=same; TOP}
{rank=same; INT_TOP; CTRL; STRUCT_TOP; PTR_TOP; MEM_TOP;}
{rank=same; PTR_S1; PTR_S2;}
{rank=same; INT_MIN; INT_MINDOTS;
INT_MINUS; INT_ZERO;
INT_PLUS; INT_MAXDOTS;
INT_MAX; STRUCT_S1; STRUCT_S2;
PTR_NULL; PTR_VOIDPTR;
MEM_ALIAS1; MEM_ALIAS2;
MEM_ALIASDOTS; MEM_ALIASN;}
{rank=same; PTR_S1OPT; PTR_S2OPT;}
{rank=same; INT_BOT; XCTRL; STRUCT_BOT; PTR_BOT; MEM_BOT;}
{rank=same; BOT;}
}
|