diff options
Diffstat (limited to 'docs/chapter10/lattice.gv')
| -rw-r--r-- | docs/chapter10/lattice.gv | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/docs/chapter10/lattice.gv b/docs/chapter10/lattice.gv new file mode 100644 index 00000000..c074f1a4 --- /dev/null +++ b/docs/chapter10/lattice.gv @@ -0,0 +1,135 @@ +digraph Lattice { + // Define nodes + splines=false; + node [shape=circle, style=filled, fillcolor=lightblue]; + nodesep=0.6; + + TOP [label="⊤"]; + BOT [label="⊥"]; + + XCTRL [label="~Ctrl"]; + CTRL [label="Ctrl"]; + + INT_TOP [label="IntTop"]; + INT_BOT [label="IntBot"]; + + INT_MIN [label="-n"]; + INT_MINDOTS [label="..." shape=none style=none]; + INT_ZERO [label="0"]; + INT_MAXDOTS [label="..." shape=none style=none]; + INT_MAX [label="+n"]; + + TUPLE [label="TUPLE"]; + + STRUCT_TOP [label="$TOP"]; + STRUCT_S1 [label="S1"]; + STRUCT_DOTS [label="..." shape=none style=none]; + STRUCT_SN [label="Sn"]; + STRUCT_BOT [label="$BOT"] + + PTR_TOP [label="*$TOP"]; + PTR_NULL [label="null"]; + PTR_VOIDPTR [label="*void"]; + PTR_S1 [label="*S1"]; + PTR_SDOTS [label="..." shape=none style=none]; + PTR_SN [label="*SN"]; + PTR_S1OPT [label="*S1?"]; + PTR_SOPTDOTS [label="..." shape=none style=none]; + PTR_SNOPT [label="*SN?"]; + 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 -> XCTRL; + XCTRL -> CTRL; + CTRL -> BOT; + + TOP -> INT_TOP; + INT_TOP -> INT_MIN; + INT_TOP -> INT_MINDOTS; + INT_TOP -> INT_ZERO; + INT_TOP -> INT_MAXDOTS; + INT_TOP -> INT_MAX; + INT_MIN -> INT_BOT; + INT_MINDOTS -> INT_BOT; + INT_ZERO -> INT_BOT; + INT_MAXDOTS -> INT_BOT; + INT_MAX -> INT_BOT; + INT_BOT -> BOT; + + INT_MIN -> INT_MINDOTS -> INT_ZERO -> INT_MAXDOTS -> INT_MAX [style=invis]; + + TOP -> TUPLE; + TUPLE -> BOT; + + TOP -> STRUCT_TOP; + STRUCT_TOP -> STRUCT_S1; + STRUCT_TOP -> STRUCT_DOTS; + STRUCT_TOP -> STRUCT_SN; + STRUCT_S1 -> STRUCT_BOT; + STRUCT_DOTS -> STRUCT_BOT; + STRUCT_SN -> STRUCT_BOT; + STRUCT_BOT -> BOT; + + STRUCT_S1 -> STRUCT_DOTS -> STRUCT_SN [style=invis]; + + TOP -> PTR_TOP; + PTR_TOP -> PTR_S1; + PTR_TOP -> PTR_SDOTS; + PTR_TOP -> PTR_SN; + PTR_TOP -> PTR_NULL; + PTR_TOP -> PTR_VOIDPTR; + PTR_NULL -> PTR_BOT; + PTR_NULL -> PTR_S1OPT; + PTR_NULL -> PTR_SOPTDOTS; + PTR_NULL -> PTR_SNOPT; + PTR_S1 -> PTR_S1OPT; + PTR_S1 -> PTR_VOIDPTR; + PTR_SDOTS -> PTR_SOPTDOTS; + PTR_SDOTS -> PTR_VOIDPTR; + PTR_SN -> PTR_SNOPT; + PTR_SN -> PTR_VOIDPTR; + PTR_VOIDPTR -> PTR_BOT; + PTR_S1OPT -> PTR_BOT; + PTR_SOPTDOTS -> PTR_BOT; + PTR_SNOPT -> PTR_BOT; + PTR_BOT -> BOT; + + PTR_S1 -> PTR_SDOTS -> PTR_SN [style=invis]; + PTR_S1OPT -> PTR_SOPTDOTS -> PTR_SNOPT [style=invis]; + + 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; XCTRL; STRUCT_TOP; PTR_TOP; MEM_TOP;} + {rank=same; PTR_S1; PTR_SDOTS; PTR_SN;} + {rank=same; INT_MIN; INT_MINDOTS; + INT_ZERO; INT_MAXDOTS; + INT_MAX; TUPLE; STRUCT_S1; STRUCT_DOTS; STRUCT_SN; + PTR_NULL; PTR_VOIDPTR; + MEM_ALIAS1; MEM_ALIAS2; + MEM_ALIASDOTS; MEM_ALIASN;} + {rank=same; PTR_S1OPT; PTR_SOPTDOTS; PTR_SNOPT; } + {rank=same; INT_BOT; CTRL; STRUCT_BOT; PTR_BOT; MEM_BOT;} + {rank=same; BOT;} +} |
