diff options
| author | Cliff Click <cliffc@acm.org> | 2026-09-29 09:44:41 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-09-29 09:44:41 -0700 |
| commit | e1bba17ff54400a34ede0eaacad863420d021119 (patch) | |
| tree | 99bef5b646f0febf919208e6f4cbce81227811eb /chapter10b/docs | |
| parent | 41be002e89358649da46c33c8245aa786afdad6a (diff) | |
| download | Simple-e1bba17ff54400a34ede0eaacad863420d021119.tar.gz Simple-e1bba17ff54400a34ede0eaacad863420d021119.zip | |
Split ch10
Basic memory introduction in 10a, then precise aliases in 10b.
Diffstat (limited to 'chapter10b/docs')
| -rw-r--r-- | chapter10b/docs/10-grammar.md | 125 | ||||
| -rw-r--r-- | chapter10b/docs/Makefile | 14 | ||||
| -rw-r--r-- | chapter10b/docs/example1.gv | 11 | ||||
| -rw-r--r-- | chapter10b/docs/example1.svg | 91 | ||||
| -rw-r--r-- | chapter10b/docs/example2a.gv | 10 | ||||
| -rw-r--r-- | chapter10b/docs/example2a.svg | 82 | ||||
| -rw-r--r-- | chapter10b/docs/example2b.gv | 10 | ||||
| -rw-r--r-- | chapter10b/docs/example2b.svg | 101 | ||||
| -rw-r--r-- | chapter10b/docs/example2c.gv | 10 | ||||
| -rw-r--r-- | chapter10b/docs/example2c.svg | 56 | ||||
| -rw-r--r-- | chapter10b/docs/lattice.gv | 161 | ||||
| -rw-r--r-- | chapter10b/docs/lattice.svg | 516 |
12 files changed, 1187 insertions, 0 deletions
diff --git a/chapter10b/docs/10-grammar.md b/chapter10b/docs/10-grammar.md new file mode 100644 index 00000000..9a80d6ea --- /dev/null +++ b/chapter10b/docs/10-grammar.md @@ -0,0 +1,125 @@ +# Grammar for Chapter 10b + +```antlrv4 +grammar SimpleLanguage; + +program + : statement+ EOF + ; + +statement + : returnStatement + | structDeclaration + | declStatement + | blockStatment + | expressionStatement + | ifStatement + | whileStatement + | breakStatement + | continueStatment + ; + +field + : 'int' IDENTIFIER ';' + ; + +fields + : field+ + ; + +structDeclaration + : 'struct' IDENTIFIER '{' fields '}' + ; + +whileStatement + : 'while' '(' expression ')' statement + ; + +breakStatement + : 'break' ';' + ; + +continueStatement + : 'continue' ';' + ; + +ifStatement + : 'if' '(' expression ')' statement ('else' statement)? + ; + + +expressionStatement + : IDENTIFIER '=' expression ';' + | fieldExpression '=' expression ';' + ; + +blockStatement + : '{' statement+ '}' + ; + +structName + : IDENTIFIER + ; + +declStatement + : 'int' IDENTIFIER '=' expression ';' + | structName ('?')? IDENTIFIER '=' expression ';' + ; + +returnStatement + : 'return' expression ';' + ; + +expression + : comparisonExpression + ; + +comparisonExpression + : additiveExpression (('==' | '!='| '>'| '<'| '>='| '<=') additiveExpression)* + ; + +additiveExpression + : multiplicativeExpression (('+' | '-') multiplicativeExpression)* + ; + +multiplicativeExpression + : unaryExpression (('*' | '/') unaryExpression)* + ; + +unaryExpression + : ('-') unaryExpression + | '!' unaryExpression + | primaryExpression + ; + +newExpression + : 'new' IDENTIFIER + ; + +fieldExpression + : primaryExpresson '.' IDENTIFIER + ; + +primaryExpression + : IDENTIFIER + | INTEGER_LITERAL + | 'true' + | 'false' + | 'null' + | newExpression + | '(' expression ')' + | fieldExpression + ; + +INTEGER_LITERAL + : [1-9][0-9]* + | [0] + ; + +IDENTIFIER + : NON_DIGIT (NON_DIGIT | DIGIT)* + ; + +NON_DIGIT: [a-zA-Z_]; +DEC_DIGIT: [0-9]; +``` diff --git a/chapter10b/docs/Makefile b/chapter10b/docs/Makefile new file mode 100644 index 00000000..055882b2 --- /dev/null +++ b/chapter10b/docs/Makefile @@ -0,0 +1,14 @@ +GV := $(wildcard *.gv) +SVG := $(patsubst %.gv,%.svg,$(GV)) +.DELETE_ON_ERROR: + +.PHONY: all +all: $(SVG) + +%.svg: %.gv + dot -Tsvg $< > $@ + @sed -i 's/\r$$//' $@ + +.PHONY: clean +clean: + @rm -f $(SVG) diff --git a/chapter10b/docs/example1.gv b/chapter10b/docs/example1.gv new file mode 100644 index 00000000..d1b2d456 --- /dev/null +++ b/chapter10b/docs/example1.gv @@ -0,0 +1,11 @@ +digraph Memory { + rankdir=LR; + node [shape=box]; + M [label="Initial memory"]; + X [label="Store x = 42"]; + Y [label="Loop: Store y"]; + L [label="Load x -> 42"]; + M -> X -> L [color=blue]; M -> Y [color=green]; + X -> MemMerge [color=blue]; Y -> MemMerge [color=green]; + MemMerge -> Return; L -> Return; +} diff --git a/chapter10b/docs/example1.svg b/chapter10b/docs/example1.svg new file mode 100644 index 00000000..bcd2a221 --- /dev/null +++ b/chapter10b/docs/example1.svg @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 12.2.0 (20241103.1931) + --> +<!-- Title: Memory Pages: 1 --> +<svg width="448pt" height="98pt" + viewBox="0.00 0.00 447.50 98.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 94)"> +<title>Memory</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-94 443.5,-94 443.5,4 -4,4"/> +<!-- M --> +<g id="node1" class="node"> +<title>M</title> +<polygon fill="none" stroke="black" points="98.5,-63 0,-63 0,-27 98.5,-27 98.5,-63"/> +<text text-anchor="middle" x="49.25" y="-39.95" font-family="Times New Roman,serif" font-size="14.00">Initial memory</text> +</g> +<!-- X --> +<g id="node2" class="node"> +<title>X</title> +<polygon fill="none" stroke="black" points="222.12,-90 137.88,-90 137.88,-54 222.12,-54 222.12,-90"/> +<text text-anchor="middle" x="180" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Store x = 42</text> +</g> +<!-- M->X --> +<g id="edge1" class="edge"> +<title>M->X</title> +<path fill="none" stroke="blue" d="M98.92,-55.21C107.84,-57.08 117.18,-59.04 126.2,-60.93"/> +<polygon fill="blue" stroke="blue" points="125.43,-64.34 135.93,-62.97 126.86,-57.49 125.43,-64.34"/> +</g> +<!-- Y --> +<g id="node3" class="node"> +<title>Y</title> +<polygon fill="none" stroke="black" points="225.5,-36 134.5,-36 134.5,0 225.5,0 225.5,-36"/> +<text text-anchor="middle" x="180" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Loop: Store y</text> +</g> +<!-- M->Y --> +<g id="edge3" class="edge"> +<title>M->Y</title> +<path fill="none" stroke="green" d="M98.92,-34.79C106.77,-33.15 114.94,-31.43 122.94,-29.76"/> +<polygon fill="green" stroke="green" points="123.52,-33.21 132.59,-27.73 122.09,-26.36 123.52,-33.21"/> +</g> +<!-- L --> +<g id="node4" class="node"> +<title>L</title> +<polygon fill="none" stroke="black" points="349.5,-90 261.5,-90 261.5,-54 349.5,-54 349.5,-90"/> +<text text-anchor="middle" x="305.5" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Load x -> 42</text> +</g> +<!-- X->L --> +<g id="edge2" class="edge"> +<title>X->L</title> +<path fill="none" stroke="blue" d="M222.47,-72C231.24,-72 240.62,-72 249.8,-72"/> +<polygon fill="blue" stroke="blue" points="249.73,-75.5 259.73,-72 249.73,-68.5 249.73,-75.5"/> +</g> +<!-- MemMerge --> +<g id="node5" class="node"> +<title>MemMerge</title> +<polygon fill="none" stroke="black" points="346.5,-36 264.5,-36 264.5,0 346.5,0 346.5,-36"/> +<text text-anchor="middle" x="305.5" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text> +</g> +<!-- X->MemMerge --> +<g id="edge4" class="edge"> +<title>X->MemMerge</title> +<path fill="none" stroke="blue" d="M222.47,-53.87C232.56,-49.46 243.46,-44.69 253.92,-40.11"/> +<polygon fill="blue" stroke="blue" points="255.04,-43.45 262.8,-36.23 252.24,-37.03 255.04,-43.45"/> +</g> +<!-- Y->MemMerge --> +<g id="edge5" class="edge"> +<title>Y->MemMerge</title> +<path fill="none" stroke="green" d="M225.94,-18C234.66,-18 243.88,-18 252.8,-18"/> +<polygon fill="green" stroke="green" points="252.79,-21.5 262.79,-18 252.79,-14.5 252.79,-21.5"/> +</g> +<!-- Return --> +<g id="node6" class="node"> +<title>Return</title> +<polygon fill="none" stroke="black" points="439.5,-63 385.5,-63 385.5,-27 439.5,-27 439.5,-63"/> +<text text-anchor="middle" x="412.5" y="-39.95" font-family="Times New Roman,serif" font-size="14.00">Return</text> +</g> +<!-- L->Return --> +<g id="edge7" class="edge"> +<title>L->Return</title> +<path fill="none" stroke="black" d="M349.81,-60.86C357.86,-58.79 366.2,-56.65 374.06,-54.63"/> +<polygon fill="black" stroke="black" points="374.84,-58.04 383.65,-52.16 373.1,-51.26 374.84,-58.04"/> +</g> +<!-- MemMerge->Return --> +<g id="edge6" class="edge"> +<title>MemMerge->Return</title> +<path fill="none" stroke="black" d="M346.8,-28.36C355.72,-30.66 365.15,-33.08 373.96,-35.35"/> +<polygon fill="black" stroke="black" points="373.07,-38.73 383.63,-37.83 374.82,-31.95 373.07,-38.73"/> +</g> +</g> +</svg> diff --git a/chapter10b/docs/example2a.gv b/chapter10b/docs/example2a.gv new file mode 100644 index 00000000..50f7ec80 --- /dev/null +++ b/chapter10b/docs/example2a.gv @@ -0,0 +1,10 @@ +digraph Memory { + rankdir=LR; + node [shape=box]; + M [label="Default memory"]; + X [label="Store x"]; + Y [label="Store y"]; + M -> X [color=blue]; M -> Y [color=green]; + M -> MemMerge [label="default"]; X -> MemMerge [label="x",color=blue]; + Y -> MemMerge [label="y",color=green]; MemMerge -> Return; +} diff --git a/chapter10b/docs/example2a.svg b/chapter10b/docs/example2a.svg new file mode 100644 index 00000000..74cb48e0 --- /dev/null +++ b/chapter10b/docs/example2a.svg @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 12.2.0 (20241103.1931) + --> +<!-- Title: Memory Pages: 1 --> +<svg width="423pt" height="128pt" + viewBox="0.00 0.00 422.50 127.80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 123.8)"> +<title>Memory</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-123.8 418.5,-123.8 418.5,4 -4,4"/> +<!-- M --> +<g id="node1" class="node"> +<title>M</title> +<polygon fill="none" stroke="black" points="106.75,-65.8 0,-65.8 0,-29.8 106.75,-29.8 106.75,-65.8"/> +<text text-anchor="middle" x="53.38" y="-42.75" font-family="Times New Roman,serif" font-size="14.00">Default memory</text> +</g> +<!-- X --> +<g id="node2" class="node"> +<title>X</title> +<polygon fill="none" stroke="black" points="198.75,-119.8 143.75,-119.8 143.75,-83.8 198.75,-83.8 198.75,-119.8"/> +<text text-anchor="middle" x="171.25" y="-96.75" font-family="Times New Roman,serif" font-size="14.00">Store x</text> +</g> +<!-- M->X --> +<g id="edge1" class="edge"> +<title>M->X</title> +<path fill="none" stroke="blue" d="M93.93,-66.23C106.63,-72.15 120.65,-78.69 133.17,-84.52"/> +<polygon fill="blue" stroke="blue" points="131.36,-87.54 141.9,-88.59 134.31,-81.19 131.36,-87.54"/> +</g> +<!-- Y --> +<g id="node3" class="node"> +<title>Y</title> +<polygon fill="none" stroke="black" points="198.75,-65.8 143.75,-65.8 143.75,-29.8 198.75,-29.8 198.75,-65.8"/> +<text text-anchor="middle" x="171.25" y="-42.75" font-family="Times New Roman,serif" font-size="14.00">Store y</text> +</g> +<!-- M->Y --> +<g id="edge2" class="edge"> +<title>M->Y</title> +<path fill="none" stroke="green" d="M107.23,-47.8C115.55,-47.8 124.01,-47.8 131.93,-47.8"/> +<polygon fill="green" stroke="green" points="131.91,-51.3 141.91,-47.8 131.91,-44.3 131.91,-51.3"/> +</g> +<!-- MemMerge --> +<g id="node4" class="node"> +<title>MemMerge</title> +<polygon fill="none" stroke="black" points="323.5,-65.8 241.5,-65.8 241.5,-29.8 323.5,-29.8 323.5,-65.8"/> +<text text-anchor="middle" x="282.5" y="-42.75" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text> +</g> +<!-- M->MemMerge --> +<g id="edge3" class="edge"> +<title>M->MemMerge</title> +<path fill="none" stroke="black" d="M83.72,-29.32C100.58,-19.8 122.56,-9.18 143.75,-4.3 167.57,1.19 175.02,1.56 198.75,-4.3 214.73,-8.24 231.03,-15.89 244.89,-23.68"/> +<polygon fill="black" stroke="black" points="242.81,-26.52 253.21,-28.57 246.36,-20.48 242.81,-26.52"/> +<text text-anchor="middle" x="171.25" y="-7.5" font-family="Times New Roman,serif" font-size="14.00">default</text> +</g> +<!-- X->MemMerge --> +<g id="edge4" class="edge"> +<title>X->MemMerge</title> +<path fill="none" stroke="blue" d="M198.98,-88.59C209.64,-83.32 222.23,-77.1 234.33,-71.11"/> +<polygon fill="blue" stroke="blue" points="235.56,-74.41 242.97,-66.85 232.45,-68.14 235.56,-74.41"/> +<text text-anchor="middle" x="220.12" y="-82.84" font-family="Times New Roman,serif" font-size="14.00">x</text> +</g> +<!-- Y->MemMerge --> +<g id="edge5" class="edge"> +<title>Y->MemMerge</title> +<path fill="none" stroke="green" d="M198.98,-47.8C208.35,-47.8 219.21,-47.8 229.93,-47.8"/> +<polygon fill="green" stroke="green" points="229.9,-51.3 239.9,-47.8 229.9,-44.3 229.9,-51.3"/> +<text text-anchor="middle" x="220.12" y="-51" font-family="Times New Roman,serif" font-size="14.00">y</text> +</g> +<!-- Return --> +<g id="node5" class="node"> +<title>Return</title> +<polygon fill="none" stroke="black" points="414.5,-65.8 360.5,-65.8 360.5,-29.8 414.5,-29.8 414.5,-65.8"/> +<text text-anchor="middle" x="387.5" y="-42.75" font-family="Times New Roman,serif" font-size="14.00">Return</text> +</g> +<!-- MemMerge->Return --> +<g id="edge6" class="edge"> +<title>MemMerge->Return</title> +<path fill="none" stroke="black" d="M323.91,-47.8C332.09,-47.8 340.66,-47.8 348.75,-47.8"/> +<polygon fill="black" stroke="black" points="348.62,-51.3 358.62,-47.8 348.62,-44.3 348.62,-51.3"/> +</g> +</g> +</svg> diff --git a/chapter10b/docs/example2b.gv b/chapter10b/docs/example2b.gv new file mode 100644 index 00000000..7ef10ec8 --- /dev/null +++ b/chapter10b/docs/example2b.gv @@ -0,0 +1,10 @@ +digraph Memory { + rankdir=LR; + node [shape=box]; + P [label="MemPhi(x)"]; + B [label="BulkMemPhi(All except x)"]; + Left -> P [label="slice x",color=blue]; Right -> P [label="slice x",color=blue]; + Left -> B; Right -> B; + Region -> P [style=dashed]; Region -> B [style=dashed]; + P -> MemMerge [label="x",color=blue]; B -> MemMerge [label="default"]; +} diff --git a/chapter10b/docs/example2b.svg b/chapter10b/docs/example2b.svg new file mode 100644 index 00000000..fae583e6 --- /dev/null +++ b/chapter10b/docs/example2b.svg @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 12.2.0 (20241103.1931) + --> +<!-- Title: Memory Pages: 1 --> +<svg width="456pt" height="163pt" + viewBox="0.00 0.00 455.75 163.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 159)"> +<title>Memory</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-159 451.75,-159 451.75,4 -4,4"/> +<!-- P --> +<g id="node1" class="node"> +<title>P</title> +<polygon fill="none" stroke="black" points="249.12,-54 169.38,-54 169.38,-18 249.12,-18 249.12,-54"/> +<text text-anchor="middle" x="209.25" y="-30.95" font-family="Times New Roman,serif" font-size="14.00">MemPhi(x)</text> +</g> +<!-- MemMerge --> +<g id="node6" class="node"> +<title>MemMerge</title> +<polygon fill="none" stroke="black" points="447.75,-81 365.75,-81 365.75,-45 447.75,-45 447.75,-81"/> +<text text-anchor="middle" x="406.75" y="-57.95" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text> +</g> +<!-- P->MemMerge --> +<g id="edge7" class="edge"> +<title>P->MemMerge</title> +<path fill="none" stroke="blue" d="M249.6,-37.43C277.23,-38.89 314.95,-41.79 347.75,-47.5 349.91,-47.88 352.1,-48.29 354.31,-48.74"/> +<polygon fill="blue" stroke="blue" points="353.39,-52.13 363.91,-50.9 354.92,-45.3 353.39,-52.13"/> +<text text-anchor="middle" x="329" y="-50.7" font-family="Times New Roman,serif" font-size="14.00">x</text> +</g> +<!-- B --> +<g id="node2" class="node"> +<title>B</title> +<polygon fill="none" stroke="black" points="292.25,-109 126.25,-109 126.25,-73 292.25,-73 292.25,-109"/> +<text text-anchor="middle" x="209.25" y="-85.95" font-family="Times New Roman,serif" font-size="14.00">BulkMemPhi(All except x)</text> +</g> +<!-- B->MemMerge --> +<g id="edge8" class="edge"> +<title>B->MemMerge</title> +<path fill="none" stroke="black" d="M292.59,-79.21C313.42,-76.22 335.2,-73.1 354.03,-70.41"/> +<polygon fill="black" stroke="black" points="354.44,-73.88 363.84,-69 353.45,-66.96 354.44,-73.88"/> +<text text-anchor="middle" x="329" y="-79.36" font-family="Times New Roman,serif" font-size="14.00">default</text> +</g> +<!-- Left --> +<g id="node3" class="node"> +<title>Left</title> +<polygon fill="none" stroke="black" points="54.5,-97 0.5,-97 0.5,-61 54.5,-61 54.5,-97"/> +<text text-anchor="middle" x="27.5" y="-73.95" font-family="Times New Roman,serif" font-size="14.00">Left</text> +</g> +<!-- Left->P --> +<g id="edge1" class="edge"> +<title>Left->P</title> +<path fill="none" stroke="blue" d="M54.57,-67.8C60.55,-65.5 66.94,-63.25 73,-61.5 100.58,-53.55 132.05,-47.45 157.69,-43.21"/> +<polygon fill="blue" stroke="blue" points="158.21,-46.67 167.53,-41.63 157.1,-39.76 158.21,-46.67"/> +<text text-anchor="middle" x="90.62" y="-64.7" font-family="Times New Roman,serif" font-size="14.00">slice x</text> +</g> +<!-- Left->B --> +<g id="edge3" class="edge"> +<title>Left->B</title> +<path fill="none" stroke="black" d="M54.64,-80.74C70.8,-81.82 92.62,-83.28 114.74,-84.76"/> +<polygon fill="black" stroke="black" points="114.23,-88.23 124.44,-85.4 114.69,-81.25 114.23,-88.23"/> +</g> +<!-- Right --> +<g id="node4" class="node"> +<title>Right</title> +<polygon fill="none" stroke="black" points="54.5,-155 0.5,-155 0.5,-119 54.5,-119 54.5,-155"/> +<text text-anchor="middle" x="27.5" y="-131.95" font-family="Times New Roman,serif" font-size="14.00">Right</text> +</g> +<!-- Right->P --> +<g id="edge2" class="edge"> +<title>Right->P</title> +<path fill="none" stroke="blue" d="M54.87,-120.55C70.84,-110.17 91.32,-96.1 108.25,-82 116.94,-74.76 116.65,-69.98 126.25,-64 136.02,-57.91 147.27,-52.97 158.25,-49.02"/> +<polygon fill="blue" stroke="blue" points="159.26,-52.37 167.63,-45.88 157.04,-45.73 159.26,-52.37"/> +<text text-anchor="middle" x="90.62" y="-110.72" font-family="Times New Roman,serif" font-size="14.00">slice x</text> +</g> +<!-- Right->B --> +<g id="edge4" class="edge"> +<title>Right->B</title> +<path fill="none" stroke="black" d="M54.7,-143.04C70.42,-145.67 90.72,-147.29 108.25,-143 130.7,-137.51 153.73,-126.02 172.01,-115.23"/> +<polygon fill="black" stroke="black" points="173.65,-118.33 180.36,-110.14 170,-112.35 173.65,-118.33"/> +</g> +<!-- Region --> +<g id="node5" class="node"> +<title>Region</title> +<polygon fill="none" stroke="black" points="55,-36 0,-36 0,0 55,0 55,-36"/> +<text text-anchor="middle" x="27.5" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Region</text> +</g> +<!-- Region->P --> +<g id="edge5" class="edge"> +<title>Region->P</title> +<path fill="none" stroke="black" stroke-dasharray="5,2" d="M55.32,-16.6C61.15,-16.35 67.28,-16.13 73,-16 88.66,-15.65 92.66,-14.46 108.25,-16 124.55,-17.61 142.14,-20.68 157.95,-23.93"/> +<polygon fill="black" stroke="black" points="157.11,-27.33 167.62,-25.99 158.57,-20.48 157.11,-27.33"/> +</g> +<!-- Region->B --> +<g id="edge6" class="edge"> +<title>Region->B</title> +<path fill="none" stroke="black" stroke-dasharray="5,2" d="M48.17,-36.19C55.53,-42.23 64.24,-48.55 73,-53 86.08,-59.65 100.48,-65.27 114.87,-69.98"/> +<polygon fill="black" stroke="black" points="113.8,-73.32 124.39,-72.96 115.89,-66.63 113.8,-73.32"/> +</g> +</g> +</svg> diff --git a/chapter10b/docs/example2c.gv b/chapter10b/docs/example2c.gv new file mode 100644 index 00000000..fb827b3e --- /dev/null +++ b/chapter10b/docs/example2c.gv @@ -0,0 +1,10 @@ +digraph Memory { + rankdir=LR; + node [shape=box]; + M [label="Prior x memory"]; + L [label="Load p.x"]; + S [label="Store p.x"]; + M -> L [color=blue]; M -> S [color=blue]; + L -> S [style=dashed,label="execute load first"]; + Y [label="Store p.y: independent"]; +} diff --git a/chapter10b/docs/example2c.svg b/chapter10b/docs/example2c.svg new file mode 100644 index 00000000..d8e5cf96 --- /dev/null +++ b/chapter10b/docs/example2c.svg @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 12.2.0 (20241103.1931) + --> +<!-- Title: Memory Pages: 1 --> +<svg width="444pt" height="98pt" + viewBox="0.00 0.00 444.00 98.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 94)"> +<title>Memory</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-94 440,-94 440,4 -4,4"/> +<!-- M --> +<g id="node1" class="node"> +<title>M</title> +<polygon fill="none" stroke="black" points="121.38,-36 17.62,-36 17.62,0 121.38,0 121.38,-36"/> +<text text-anchor="middle" x="69.5" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Prior x memory</text> +</g> +<!-- L --> +<g id="node2" class="node"> +<title>L</title> +<polygon fill="none" stroke="black" points="240.75,-70 176,-70 176,-34 240.75,-34 240.75,-70"/> +<text text-anchor="middle" x="208.38" y="-46.95" font-family="Times New Roman,serif" font-size="14.00">Load p.x</text> +</g> +<!-- M->L --> +<g id="edge1" class="edge"> +<title>M->L</title> +<path fill="none" stroke="blue" d="M121.86,-30.76C135.96,-34.26 151.1,-38.02 164.66,-41.39"/> +<polygon fill="blue" stroke="blue" points="163.61,-44.73 174.16,-43.75 165.29,-37.94 163.61,-44.73"/> +</g> +<!-- S --> +<g id="node3" class="node"> +<title>S</title> +<polygon fill="none" stroke="black" points="436,-40 370.5,-40 370.5,-4 436,-4 436,-40"/> +<text text-anchor="middle" x="403.25" y="-16.95" font-family="Times New Roman,serif" font-size="14.00">Store p.x</text> +</g> +<!-- M->S --> +<g id="edge2" class="edge"> +<title>M->S</title> +<path fill="none" stroke="blue" d="M121.61,-18.62C186.66,-19.4 297.92,-20.74 358.98,-21.48"/> +<polygon fill="blue" stroke="blue" points="358.58,-24.97 368.62,-21.59 358.66,-17.97 358.58,-24.97"/> +</g> +<!-- L->S --> +<g id="edge3" class="edge"> +<title>L->S</title> +<path fill="none" stroke="black" stroke-dasharray="5,2" d="M241.22,-47.05C273.37,-42.05 323.25,-34.29 358.97,-28.73"/> +<polygon fill="black" stroke="black" points="359.19,-32.24 368.54,-27.24 358.12,-25.32 359.19,-32.24"/> +<text text-anchor="middle" x="305.62" y="-47.15" font-family="Times New Roman,serif" font-size="14.00">execute load first</text> +</g> +<!-- Y --> +<g id="node4" class="node"> +<title>Y</title> +<polygon fill="none" stroke="black" points="139,-90 0,-90 0,-54 139,-54 139,-90"/> +<text text-anchor="middle" x="69.5" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Store p.y: independent</text> +</g> +</g> +</svg> diff --git a/chapter10b/docs/lattice.gv b/chapter10b/docs/lattice.gv new file mode 100644 index 00000000..f87acfed --- /dev/null +++ b/chapter10b/docs/lattice.gv @@ -0,0 +1,161 @@ +digraph Lattice { + compound = true; + // Define nodes + splines=false; + node [shape=circle, style=filled]; + nodesep=0.6; + + TOP [label=<<B>⊤</B >>, fillcolor=black, fontcolor=white]; + BOT [label=<<B>⊥</B>>, fillcolor=black, fontcolor=white]; + + // ---------------------- + // Control + XCTRL [label=<<B>⊤</B >:ctrl>, fillcolor=yellow, shape=oval]; + CTRL [label=<<B>⊥</B>:ctrl>, fillcolor=yellow, shape=oval]; + + TOP -> XCTRL; + XCTRL -> CTRL; + CTRL -> BOT; + + // ---------------------- + // Integers + INT_TOP [label=<<B>⊤</B >:int>, fillcolor=lightblue, shape=oval]; + INT_BOT [label=<<B>⊥</B>:int>, fillcolor=lightblue, shape=oval]; + + INT_MINDOTS [label="...", fillcolor=lightblue, shape=oval]; + INT_ZERO [label="0" , fillcolor=lightblue]; + INT_MAXDOTS [label="...", fillcolor=lightblue, shape=oval]; + + TOP -> INT_TOP; + INT_TOP -> INT_MINDOTS; + INT_TOP -> INT_ZERO; + INT_TOP -> INT_MAXDOTS; + INT_MINDOTS -> INT_BOT; + INT_ZERO -> INT_BOT; + INT_MAXDOTS -> INT_BOT; + INT_BOT -> BOT; + + INT_MINDOTS -> INT_ZERO -> INT_MAXDOTS [style=invis]; + + // ---------------------- + // Pointers, just a boolean nil/not and a struct + PTR [shape=none, fillcolor=none, label=< + <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> + <TR><TD BGCOLOR="green"><FONT color="white">*ptr</FONT></TD></TR> + <TR><TD BGCOLOR="lightgreen">struct</TD></TR> + </TABLE> + >]; + PTR0 [shape=none, fillcolor=none, label=< + <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> + <TR><TD BGCOLOR="green"><FONT color="white">*ptr?</FONT></TD></TR> + <TR><TD BGCOLOR="lightgreen">struct</TD></TR> + </TABLE> + >]; + + TOP -> PTR; + PTR -> PTR0; + PTR0 -> BOT; + + // ---------------------- + // Structs + STRUCT_TOP [label=<<B>⊤</B >:struct>, fillcolor=lightgreen, shape=oval]; + STRUCT_BOT [label=<<B>⊥</B>:struct>, fillcolor=lightgreen, shape=oval]; + + STRUCT_S1 [shape=none, fillcolor=none, label=< + <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> + <TR><TD BGCOLOR="lightgreen">field</TD><TD BGCOLOR="lightblue:green" gradientangle="315">int/ptr</TD></TR> + </TABLE> + >]; + STRUCT_S2 [shape=none, fillcolor=none, label=< + <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> + <TR><TD BGCOLOR="lightgreen">field</TD><TD BGCOLOR="lightblue:green" gradientangle="315">int/ptr</TD></TR> + <TR><TD BGCOLOR="lightgreen">field</TD><TD BGCOLOR="lightblue:green" gradientangle="315">int/ptr</TD></TR> + </TABLE> + >]; + STRUCT_SN [shape=none, fillcolor=none, label=< + <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> + <TR><TD BGCOLOR="lightgreen">field</TD><TD BGCOLOR="lightblue:green" gradientangle="315">int/ptr</TD></TR> + <TR><TD BGCOLOR="lightgreen">... </TD><TD BGCOLOR="lightblue:green" gradientangle="315">int/ptr</TD></TR> + <TR><TD BGCOLOR="lightgreen">field</TD><TD BGCOLOR="lightblue:green" gradientangle="315">int/ptr</TD></TR> + </TABLE> + >]; + + + TOP -> STRUCT_TOP; + STRUCT_TOP -> STRUCT_S1; + STRUCT_TOP -> STRUCT_S2; + STRUCT_TOP -> STRUCT_SN; + STRUCT_S1 -> STRUCT_BOT; + STRUCT_S2 -> STRUCT_BOT; + STRUCT_SN -> STRUCT_BOT; + STRUCT_BOT -> BOT; + + STRUCT_S1 -> STRUCT_S2 -> STRUCT_SN [style=invis]; + + // ---------------------- + // Memory + MEM_TOP [label=<<B>⊤</B >:mem>, fillcolor=blue, fontcolor=white, shape=oval]; + MEM_BOT [label=<<B>⊥</B>:mem>, fillcolor=blue, fontcolor=white, shape=oval]; + MEM_ALIAS1 [label="#2" , fillcolor=blue, fontcolor=white]; + MEM_ALIASDOTS [label="..." , fillcolor=blue, fontcolor=white, shape=oval]; + MEM_ALIASN [label="#n" , fillcolor=blue, fontcolor=white]; + + TOP -> MEM_TOP; + MEM_TOP -> MEM_ALIAS1; + MEM_TOP -> MEM_ALIASDOTS; + MEM_TOP -> MEM_ALIASN; + MEM_ALIAS1 -> MEM_BOT; + MEM_ALIASDOTS -> MEM_BOT; + MEM_ALIASN -> MEM_BOT; + MEM_BOT -> BOT; + + MEM_ALIAS1 -> MEM_ALIASDOTS -> MEM_ALIASN [style=invis]; + + // ---------------------- + // Tuples + + TUPLE_TOP [label=<<B>⊤</B >:tuple>, fillcolor=pink, shape=oval]; + TUPLE_BOT [label=<<B>⊥</B>:tuple>, fillcolor=pink, shape=oval]; + + TUPLE1 [shape=none, fillcolor=none, label=< + <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> + <TR><TD BGCOLOR="pink">Tuple</TD></TR> + <TR><TD BGCOLOR="black" ><FONT color="white">type</FONT></TD></TR> + </TABLE> + >]; + TUPLE2 [shape=none, fillcolor=none, label=< + <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> + <TR><TD BGCOLOR="pink">Tuple</TD></TR> + <TR><TD BGCOLOR="black" ><FONT color="white">type</FONT></TD></TR> + <TR><TD BGCOLOR="black" ><FONT color="white">type</FONT></TD></TR> + </TABLE> + >]; + TUPLEN [shape=none, fillcolor=none, label=< + <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> + <TR><TD BGCOLOR="pink">Tuple</TD></TR> + <TR><TD BGCOLOR="black" ><FONT color="white">type</FONT></TD></TR> + <TR><TD BGCOLOR="black" ><FONT color="white">...</FONT></TD></TR> + <TR><TD BGCOLOR="black" ><FONT color="white">type</FONT></TD></TR> + </TABLE> + >]; + + + TOP -> TUPLE_TOP; + TUPLE_TOP -> TUPLE1; + TUPLE_TOP -> TUPLE2; + TUPLE_TOP -> TUPLEN; + TUPLE1 -> TUPLE_BOT; + TUPLE2 -> TUPLE_BOT; + TUPLEN -> TUPLE_BOT; + TUPLE_BOT -> BOT; + + // ---------------------- + // Additional customization + {rank=same; TOP;} + {rank=same; INT_TOP; XCTRL; STRUCT_TOP; MEM_TOP; TUPLE_TOP} + {rank=same; INT_MINDOTS; INT_ZERO; INT_MAXDOTS; + STRUCT_S1; STRUCT_S2; STRUCT_SN; + MEM_ALIAS1; MEM_ALIASDOTS; MEM_ALIASN;} + {rank=same; INT_BOT; CTRL; STRUCT_BOT; MEM_BOT; TUPLE_BOT} + {rank=same; BOT;} +} diff --git a/chapter10b/docs/lattice.svg b/chapter10b/docs/lattice.svg new file mode 100644 index 00000000..4023b68c --- /dev/null +++ b/chapter10b/docs/lattice.svg @@ -0,0 +1,516 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 12.2.0 (20241103.1931) + --> +<!-- Title: Lattice Pages: 1 --> +<svg width="1308pt" height="440pt" + viewBox="0.00 0.00 1307.51 440.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 436.5)"> +<title>Lattice</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-436.5 1303.51,-436.5 1303.51,4 -4,4"/> +<!-- TOP --> +<g id="node1" class="node"> +<title>TOP</title> +<ellipse fill="black" stroke="black" cx="478.51" cy="-411.37" rx="21.12" ry="21.12"/> +<text text-anchor="start" x="470.63" y="-406.95" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊤</text> +</g> +<!-- XCTRL --> +<g id="node3" class="node"> +<title>XCTRL</title> +<ellipse fill="yellow" stroke="black" cx="36.51" cy="-327.75" rx="36.51" ry="18"/> +<text text-anchor="start" x="17.76" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text> +<text text-anchor="start" x="33.51" y="-323.7" font-family="Times New Roman,serif" font-size="14.00">:ctrl</text> +</g> +<!-- TOP->XCTRL --> +<g id="edge1" class="edge"> +<title>TOP->XCTRL</title> +<path fill="none" stroke="black" d="M457.49,-406.49C389.63,-393.96 175.41,-354.4 81.44,-337.04"/> +<polygon fill="black" stroke="black" points="82.28,-333.64 71.81,-335.27 81.01,-340.53 82.28,-333.64"/> +</g> +<!-- INT_TOP --> +<g id="node5" class="node"> +<title>INT_TOP</title> +<ellipse fill="lightblue" stroke="black" cx="220.51" cy="-327.75" rx="33.95" ry="18"/> +<text text-anchor="start" x="203.63" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text> +<text text-anchor="start" x="219.38" y="-323.7" font-family="Times New Roman,serif" font-size="14.00">:int</text> +</g> +<!-- TOP->INT_TOP --> +<g id="edge4" class="edge"> +<title>TOP->INT_TOP</title> +<path fill="none" stroke="black" d="M458.26,-403.97C415.59,-390.47 315.75,-358.88 259.97,-341.23"/> +<polygon fill="black" stroke="black" points="261.14,-337.93 250.55,-338.25 259.03,-344.61 261.14,-337.93"/> +</g> +<!-- PTR --> +<g id="node10" class="node"> +<title>PTR</title> +<polygon fill="none" stroke="none" points="387.51,-354.25 333.51,-354.25 333.51,-301.25 387.51,-301.25 387.51,-354.25"/> +<polygon fill="green" stroke="none" points="342.51,-327.75 342.51,-350.25 378.51,-350.25 378.51,-327.75 342.51,-327.75"/> +<polygon fill="none" stroke="black" points="342.51,-327.75 342.51,-350.25 378.51,-350.25 378.51,-327.75 342.51,-327.75"/> +<text text-anchor="start" x="349.63" y="-333.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">*ptr</text> +<polygon fill="lightgreen" stroke="none" points="342.51,-305.25 342.51,-327.75 378.51,-327.75 378.51,-305.25 342.51,-305.25"/> +<polygon fill="none" stroke="black" points="342.51,-305.25 342.51,-327.75 378.51,-327.75 378.51,-305.25 342.51,-305.25"/> +<text text-anchor="start" x="345.51" y="-311.45" font-family="Times New Roman,serif" font-size="14.00">struct</text> +</g> +<!-- TOP->PTR --> +<g id="edge14" class="edge"> +<title>TOP->PTR</title> +<path fill="none" stroke="black" d="M461.35,-398.5C444.42,-386.79 418.03,-368.54 396.49,-353.64"/> +<polygon fill="black" stroke="black" points="398.75,-350.95 388.54,-348.14 394.77,-356.7 398.75,-350.95"/> +</g> +<!-- STRUCT_TOP --> +<g id="node12" class="node"> +<title>STRUCT_TOP</title> +<ellipse fill="lightgreen" stroke="black" cx="514.51" cy="-327.75" rx="44.7" ry="18"/> +<text text-anchor="start" x="489.76" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text> +<text text-anchor="start" x="505.51" y="-323.7" font-family="Times New Roman,serif" font-size="14.00">:struct</text> +</g> +<!-- TOP->STRUCT_TOP --> +<g id="edge17" class="edge"> +<title>TOP->STRUCT_TOP</title> +<path fill="none" stroke="black" d="M486.86,-391.44C491.45,-381.02 497.24,-367.9 502.33,-356.35"/> +<polygon fill="black" stroke="black" points="505.5,-357.86 506.33,-347.29 499.09,-355.03 505.5,-357.86"/> +</g> +<!-- MEM_TOP --> +<g id="node17" class="node"> +<title>MEM_TOP</title> +<ellipse fill="blue" stroke="black" cx="853.51" cy="-327.75" rx="43.67" ry="18"/> +<text text-anchor="start" x="829.51" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊤</text> +<text text-anchor="start" x="845.26" y="-323.7" font-family="Times New Roman,serif" font-size="14.00" fill="white">:mem</text> +</g> +<!-- TOP->MEM_TOP --> +<g id="edge27" class="edge"> +<title>TOP->MEM_TOP</title> +<path fill="none" stroke="black" d="M499.2,-405.87C556.98,-393.29 721.22,-357.54 804.21,-339.48"/> +<polygon fill="black" stroke="black" points="804.86,-342.92 813.89,-337.37 803.37,-336.08 804.86,-342.92"/> +</g> +<!-- TUPLE_TOP --> +<g id="node22" class="node"> +<title>TUPLE_TOP</title> +<ellipse fill="pink" stroke="black" cx="1126.51" cy="-327.75" rx="42.65" ry="18"/> +<text text-anchor="start" x="1103.26" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text> +<text text-anchor="start" x="1119.01" y="-323.7" font-family="Times New Roman,serif" font-size="14.00">:tuple</text> +</g> +<!-- TOP->TUPLE_TOP --> +<g id="edge37" class="edge"> +<title>TOP->TUPLE_TOP</title> +<path fill="none" stroke="black" d="M499.7,-407.7C589.67,-396.37 941.49,-352.05 1074.87,-335.25"/> +<polygon fill="black" stroke="black" points="1074.97,-338.77 1084.46,-334.05 1074.1,-331.82 1074.97,-338.77"/> +</g> +<!-- BOT --> +<g id="node2" class="node"> +<title>BOT</title> +<ellipse fill="black" stroke="black" cx="448.51" cy="-21.12" rx="21.12" ry="21.12"/> +<text text-anchor="start" x="440.63" y="-16.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊥</text> +</g> +<!-- CTRL --> +<g id="node4" class="node"> +<title>CTRL</title> +<ellipse fill="yellow" stroke="black" cx="36.51" cy="-104.75" rx="36.51" ry="18"/> +<text text-anchor="start" x="17.76" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text> +<text text-anchor="start" x="33.51" y="-100.7" font-family="Times New Roman,serif" font-size="14.00">:ctrl</text> +</g> +<!-- XCTRL->CTRL --> +<g id="edge2" class="edge"> +<title>XCTRL->CTRL</title> +<path fill="none" stroke="black" d="M36.51,-309.5C36.51,-271.02 36.51,-181.25 36.51,-134.4"/> +<polygon fill="black" stroke="black" points="40.01,-134.45 36.51,-124.45 33.01,-134.45 40.01,-134.45"/> +</g> +<!-- CTRL->BOT --> +<g id="edge3" class="edge"> +<title>CTRL->BOT</title> +<path fill="none" stroke="black" d="M69.88,-97.14C147.7,-81.72 340.42,-43.54 416.69,-28.43"/> +<polygon fill="black" stroke="black" points="417.29,-31.88 426.41,-26.5 415.93,-25.01 417.29,-31.88"/> +</g> +<!-- INT_MINDOTS --> +<g id="node7" class="node"> +<title>INT_MINDOTS</title> +<ellipse fill="lightblue" stroke="black" cx="68.51" cy="-216.25" rx="27" ry="18"/> +<text text-anchor="middle" x="68.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">...</text> +</g> +<!-- INT_TOP->INT_MINDOTS --> +<g id="edge5" class="edge"> +<title>INT_TOP->INT_MINDOTS</title> +<path fill="none" stroke="black" d="M200.95,-312.66C174.03,-293.27 125.48,-258.29 95.24,-236.5"/> +<polygon fill="black" stroke="black" points="97.5,-233.82 87.34,-230.81 93.41,-239.5 97.5,-233.82"/> +</g> +<!-- INT_ZERO --> +<g id="node8" class="node"> +<title>INT_ZERO</title> +<ellipse fill="lightblue" stroke="black" cx="156.51" cy="-216.25" rx="18" ry="18"/> +<text text-anchor="middle" x="156.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">0</text> +</g> +<!-- INT_TOP->INT_ZERO --> +<g id="edge6" class="edge"> +<title>INT_TOP->INT_ZERO</title> +<path fill="none" stroke="black" d="M210.79,-310.12C200.2,-292 183.15,-262.82 170.98,-242.01"/> +<polygon fill="black" stroke="black" points="174.12,-240.45 166.05,-233.58 168.08,-243.98 174.12,-240.45"/> +</g> +<!-- INT_MAXDOTS --> +<g id="node9" class="node"> +<title>INT_MAXDOTS</title> +<ellipse fill="lightblue" stroke="black" cx="244.51" cy="-216.25" rx="27" ry="18"/> +<text text-anchor="middle" x="244.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">...</text> +</g> +<!-- INT_TOP->INT_MAXDOTS --> +<g id="edge7" class="edge"> +<title>INT_TOP->INT_MAXDOTS</title> +<path fill="none" stroke="black" d="M224.26,-309.64C228.03,-292.44 233.9,-265.64 238.35,-245.33"/> +<polygon fill="black" stroke="black" points="241.74,-246.23 240.46,-235.72 234.9,-244.73 241.74,-246.23"/> +</g> +<!-- INT_BOT --> +<g id="node6" class="node"> +<title>INT_BOT</title> +<ellipse fill="lightblue" stroke="black" cx="220.51" cy="-104.75" rx="33.95" ry="18"/> +<text text-anchor="start" x="203.63" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text> +<text text-anchor="start" x="219.38" y="-100.7" font-family="Times New Roman,serif" font-size="14.00">:int</text> +</g> +<!-- INT_BOT->BOT --> +<g id="edge11" class="edge"> +<title>INT_BOT->BOT</title> +<path fill="none" stroke="black" d="M248.01,-93.9C290.83,-78.57 373.15,-49.1 417.83,-33.11"/> +<polygon fill="black" stroke="black" points="418.93,-36.43 427.17,-29.76 416.57,-29.84 418.93,-36.43"/> +</g> +<!-- INT_MINDOTS->INT_BOT --> +<g id="edge8" class="edge"> +<title>INT_MINDOTS->INT_BOT</title> +<path fill="none" stroke="black" d="M86.24,-202.47C112.22,-183.76 160.89,-148.7 191.95,-126.33"/> +<polygon fill="black" stroke="black" points="193.68,-129.39 199.75,-120.71 189.59,-123.71 193.68,-129.39"/> +</g> +<!-- INT_MINDOTS->INT_ZERO --> +<!-- INT_ZERO->INT_BOT --> +<g id="edge9" class="edge"> +<title>INT_ZERO->INT_BOT</title> +<path fill="none" stroke="black" d="M165.14,-200.48C175.34,-183.02 192.52,-153.64 205.04,-132.22"/> +<polygon fill="black" stroke="black" points="207.97,-134.13 210,-123.73 201.93,-130.6 207.97,-134.13"/> +</g> +<!-- INT_ZERO->INT_MAXDOTS --> +<!-- INT_MAXDOTS->INT_BOT --> +<g id="edge10" class="edge"> +<title>INT_MAXDOTS->INT_BOT</title> +<path fill="none" stroke="black" d="M240.76,-198.14C237.01,-181.04 231.18,-154.46 226.74,-134.19"/> +<polygon fill="black" stroke="black" points="230.2,-133.6 224.64,-124.58 223.36,-135.09 230.2,-133.6"/> +</g> +<!-- PTR0 --> +<g id="node11" class="node"> +<title>PTR0</title> +<polygon fill="none" stroke="none" points="387.51,-131.25 333.51,-131.25 333.51,-78.25 387.51,-78.25 387.51,-131.25"/> +<polygon fill="green" stroke="none" points="342.51,-104.75 342.51,-127.25 378.51,-127.25 378.51,-104.75 342.51,-104.75"/> +<polygon fill="none" stroke="black" points="342.51,-104.75 342.51,-127.25 378.51,-127.25 378.51,-104.75 342.51,-104.75"/> +<text text-anchor="start" x="346.63" y="-110.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">*ptr?</text> +<polygon fill="lightgreen" stroke="none" points="342.51,-82.25 342.51,-104.75 378.51,-104.75 378.51,-82.25 342.51,-82.25"/> +<polygon fill="none" stroke="black" points="342.51,-82.25 342.51,-104.75 378.51,-104.75 378.51,-82.25 342.51,-82.25"/> +<text text-anchor="start" x="345.51" y="-88.45" font-family="Times New Roman,serif" font-size="14.00">struct</text> +</g> +<!-- PTR->PTR0 --> +<g id="edge15" class="edge"> +<title>PTR->PTR0</title> +<path fill="none" stroke="black" d="M360.51,-301.29C360.51,-261.89 360.51,-187.62 360.51,-142.52"/> +<polygon fill="black" stroke="black" points="364.01,-142.68 360.51,-132.68 357.01,-142.68 364.01,-142.68"/> +</g> +<!-- PTR0->BOT --> +<g id="edge16" class="edge"> +<title>PTR0->BOT</title> +<path fill="none" stroke="black" d="M387.39,-78.81C399.39,-67.68 413.41,-54.68 424.99,-43.94"/> +<polygon fill="black" stroke="black" points="427.24,-46.63 432.19,-37.26 422.48,-41.5 427.24,-46.63"/> +</g> +<!-- STRUCT_S1 --> +<g id="node14" class="node"> +<title>STRUCT_S1</title> +<polygon fill="none" stroke="none" points="487.38,-234.25 401.63,-234.25 401.63,-198.25 487.38,-198.25 487.38,-234.25"/> +<polygon fill="lightgreen" stroke="none" points="409.63,-205 409.63,-227.5 440.38,-227.5 440.38,-205 409.63,-205"/> +<polygon fill="none" stroke="black" points="409.63,-205 409.63,-227.5 440.38,-227.5 440.38,-205 409.63,-205"/> +<text text-anchor="start" x="412.63" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">field</text> +<defs> +<linearGradient id="l_0" gradientUnits="userSpaceOnUse" x1="446.1" y1="-224.2" x2="473.67" y2="-208.29" > +<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/> +<stop offset="1" style="stop-color:green;stop-opacity:1.;"/> +</linearGradient> +</defs> +<polygon fill="url(#l_0)" stroke="none" points="440.38,-205 440.38,-227.5 479.38,-227.5 479.38,-205 440.38,-205"/> +<polygon fill="none" stroke="black" points="440.38,-205 440.38,-227.5 479.38,-227.5 479.38,-205 440.38,-205"/> +<text text-anchor="start" x="443.38" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text> +</g> +<!-- STRUCT_TOP->STRUCT_S1 --> +<g id="edge18" class="edge"> +<title>STRUCT_TOP->STRUCT_S1</title> +<path fill="none" stroke="black" d="M503.88,-310.12C492.57,-292.43 474.53,-264.21 461.3,-243.51"/> +<polygon fill="black" stroke="black" points="464.39,-241.85 456.06,-235.31 458.49,-245.62 464.39,-241.85"/> +</g> +<!-- STRUCT_S2 --> +<g id="node15" class="node"> +<title>STRUCT_S2</title> +<polygon fill="none" stroke="none" points="616.38,-242.75 530.63,-242.75 530.63,-189.75 616.38,-189.75 616.38,-242.75"/> +<polygon fill="lightgreen" stroke="none" points="538.63,-216.25 538.63,-238.75 569.38,-238.75 569.38,-216.25 538.63,-216.25"/> +<polygon fill="none" stroke="black" points="538.63,-216.25 538.63,-238.75 569.38,-238.75 569.38,-216.25 538.63,-216.25"/> +<text text-anchor="start" x="541.63" y="-222.45" font-family="Times New Roman,serif" font-size="14.00">field</text> +<defs> +<linearGradient id="l_1" gradientUnits="userSpaceOnUse" x1="575.1" y1="-235.45" x2="602.67" y2="-219.54" > +<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/> +<stop offset="1" style="stop-color:green;stop-opacity:1.;"/> +</linearGradient> +</defs> +<polygon fill="url(#l_1)" stroke="none" points="569.38,-216.25 569.38,-238.75 608.38,-238.75 608.38,-216.25 569.38,-216.25"/> +<polygon fill="none" stroke="black" points="569.38,-216.25 569.38,-238.75 608.38,-238.75 608.38,-216.25 569.38,-216.25"/> +<text text-anchor="start" x="572.38" y="-222.45" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text> +<polygon fill="lightgreen" stroke="none" points="538.63,-193.75 538.63,-216.25 569.38,-216.25 569.38,-193.75 538.63,-193.75"/> +<polygon fill="none" stroke="black" points="538.63,-193.75 538.63,-216.25 569.38,-216.25 569.38,-193.75 538.63,-193.75"/> +<text text-anchor="start" x="541.63" y="-199.95" font-family="Times New Roman,serif" font-size="14.00">field</text> +<defs> +<linearGradient id="l_2" gradientUnits="userSpaceOnUse" x1="575.1" y1="-212.95" x2="602.67" y2="-197.04" > +<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/> +<stop offset="1" style="stop-color:green;stop-opacity:1.;"/> +</linearGradient> +</defs> +<polygon fill="url(#l_2)" stroke="none" points="569.38,-193.75 569.38,-216.25 608.38,-216.25 608.38,-193.75 569.38,-193.75"/> +<polygon fill="none" stroke="black" points="569.38,-193.75 569.38,-216.25 608.38,-216.25 608.38,-193.75 569.38,-193.75"/> +<text text-anchor="start" x="572.38" y="-199.95" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text> +</g> +<!-- STRUCT_TOP->STRUCT_S2 --> +<g id="edge19" class="edge"> +<title>STRUCT_TOP->STRUCT_S2</title> +<path fill="none" stroke="black" d="M523.73,-309.64C531.97,-294.34 544.3,-271.45 554.63,-252.28"/> +<polygon fill="black" stroke="black" points="557.59,-254.17 559.26,-243.7 551.43,-250.85 557.59,-254.17"/> +</g> +<!-- STRUCT_SN --> +<g id="node16" class="node"> +<title>STRUCT_SN</title> +<polygon fill="none" stroke="none" points="745.38,-254 659.63,-254 659.63,-178.5 745.38,-178.5 745.38,-254"/> +<polygon fill="lightgreen" stroke="none" points="667.63,-227.5 667.63,-250 698.38,-250 698.38,-227.5 667.63,-227.5"/> +<polygon fill="none" stroke="black" points="667.63,-227.5 667.63,-250 698.38,-250 698.38,-227.5 667.63,-227.5"/> +<text text-anchor="start" x="670.63" y="-233.7" font-family="Times New Roman,serif" font-size="14.00">field</text> +<defs> +<linearGradient id="l_3" gradientUnits="userSpaceOnUse" x1="704.1" y1="-246.7" x2="731.67" y2="-230.79" > +<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/> +<stop offset="1" style="stop-color:green;stop-opacity:1.;"/> +</linearGradient> +</defs> +<polygon fill="url(#l_3)" stroke="none" points="698.38,-227.5 698.38,-250 737.38,-250 737.38,-227.5 698.38,-227.5"/> +<polygon fill="none" stroke="black" points="698.38,-227.5 698.38,-250 737.38,-250 737.38,-227.5 698.38,-227.5"/> +<text text-anchor="start" x="701.38" y="-233.7" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text> +<polygon fill="lightgreen" stroke="none" points="667.63,-205 667.63,-227.5 698.38,-227.5 698.38,-205 667.63,-205"/> +<polygon fill="none" stroke="black" points="667.63,-205 667.63,-227.5 698.38,-227.5 698.38,-205 667.63,-205"/> +<text text-anchor="start" x="673.63" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">...  </text> +<defs> +<linearGradient id="l_4" gradientUnits="userSpaceOnUse" x1="704.1" y1="-224.2" x2="731.67" y2="-208.29" > +<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/> +<stop offset="1" style="stop-color:green;stop-opacity:1.;"/> +</linearGradient> +</defs> +<polygon fill="url(#l_4)" stroke="none" points="698.38,-205 698.38,-227.5 737.38,-227.5 737.38,-205 698.38,-205"/> +<polygon fill="none" stroke="black" points="698.38,-205 698.38,-227.5 737.38,-227.5 737.38,-205 698.38,-205"/> +<text text-anchor="start" x="701.38" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text> +<polygon fill="lightgreen" stroke="none" points="667.63,-182.5 667.63,-205 698.38,-205 698.38,-182.5 667.63,-182.5"/> +<polygon fill="none" stroke="black" points="667.63,-182.5 667.63,-205 698.38,-205 698.38,-182.5 667.63,-182.5"/> +<text text-anchor="start" x="670.63" y="-188.7" font-family="Times New Roman,serif" font-size="14.00">field</text> +<defs> +<linearGradient id="l_5" gradientUnits="userSpaceOnUse" x1="704.1" y1="-201.7" x2="731.67" y2="-185.79" > +<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/> +<stop offset="1" style="stop-color:green;stop-opacity:1.;"/> +</linearGradient> +</defs> +<polygon fill="url(#l_5)" stroke="none" points="698.38,-182.5 698.38,-205 737.38,-205 737.38,-182.5 698.38,-182.5"/> +<polygon fill="none" stroke="black" points="698.38,-182.5 698.38,-205 737.38,-205 737.38,-182.5 698.38,-182.5"/> +<text text-anchor="start" x="701.38" y="-188.7" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text> +</g> +<!-- STRUCT_TOP->STRUCT_SN --> +<g id="edge20" class="edge"> +<title>STRUCT_TOP->STRUCT_SN</title> +<path fill="none" stroke="black" d="M539.09,-312.43C567.11,-296.11 613.72,-268.96 650.01,-247.82"/> +<polygon fill="black" stroke="black" points="651.76,-250.85 658.64,-242.8 648.24,-244.81 651.76,-250.85"/> +</g> +<!-- STRUCT_BOT --> +<g id="node13" class="node"> +<title>STRUCT_BOT</title> +<ellipse fill="lightgreen" stroke="black" cx="512.51" cy="-104.75" rx="44.7" ry="18"/> +<text text-anchor="start" x="487.76" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text> +<text text-anchor="start" x="503.51" y="-100.7" font-family="Times New Roman,serif" font-size="14.00">:struct</text> +</g> +<!-- STRUCT_BOT->BOT --> +<g id="edge24" class="edge"> +<title>STRUCT_BOT->BOT</title> +<path fill="none" stroke="black" d="M499.56,-87.23C490.56,-75.76 478.41,-60.26 468.22,-47.27"/> +<polygon fill="black" stroke="black" points="471.08,-45.24 462.16,-39.53 465.57,-49.56 471.08,-45.24"/> +</g> +<!-- STRUCT_S1->STRUCT_BOT --> +<g id="edge21" class="edge"> +<title>STRUCT_S1->STRUCT_BOT</title> +<path fill="none" stroke="black" d="M454.84,-198.62C465.77,-181.01 483.19,-152.96 496.02,-132.29"/> +<polygon fill="black" stroke="black" points="498.98,-134.16 501.29,-123.82 493.04,-130.47 498.98,-134.16"/> +</g> +<!-- STRUCT_S1->STRUCT_S2 --> +<!-- STRUCT_S2->STRUCT_BOT --> +<g id="edge22" class="edge"> +<title>STRUCT_S2->STRUCT_BOT</title> +<path fill="none" stroke="black" d="M559.36,-189.85C549.77,-172.63 537.12,-149.92 527.38,-132.44"/> +<polygon fill="black" stroke="black" points="530.68,-131.18 522.76,-124.15 524.57,-134.59 530.68,-131.18"/> +</g> +<!-- STRUCT_S2->STRUCT_SN --> +<!-- STRUCT_SN->STRUCT_BOT --> +<g id="edge23" class="edge"> +<title>STRUCT_SN->STRUCT_BOT</title> +<path fill="none" stroke="black" d="M659.87,-190.67C625.81,-171.04 578.69,-143.89 546.98,-125.62"/> +<polygon fill="black" stroke="black" points="548.99,-122.73 538.58,-120.77 545.49,-128.8 548.99,-122.73"/> +</g> +<!-- MEM_ALIAS1 --> +<g id="node19" class="node"> +<title>MEM_ALIAS1</title> +<ellipse fill="blue" stroke="black" cx="808.51" cy="-216.25" rx="20.13" ry="20.13"/> +<text text-anchor="middle" x="808.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">#2</text> +</g> +<!-- MEM_TOP->MEM_ALIAS1 --> +<g id="edge28" class="edge"> +<title>MEM_TOP->MEM_ALIAS1</title> +<path fill="none" stroke="black" d="M846.48,-309.64C839.47,-292.59 828.58,-266.09 820.26,-245.84"/> +<polygon fill="black" stroke="black" points="823.55,-244.65 816.52,-236.73 817.08,-247.31 823.55,-244.65"/> +</g> +<!-- MEM_ALIASDOTS --> +<g id="node20" class="node"> +<title>MEM_ALIASDOTS</title> +<ellipse fill="blue" stroke="black" cx="898.51" cy="-216.25" rx="27" ry="18"/> +<text text-anchor="middle" x="898.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">...</text> +</g> +<!-- MEM_TOP->MEM_ALIASDOTS --> +<g id="edge29" class="edge"> +<title>MEM_TOP->MEM_ALIASDOTS</title> +<path fill="none" stroke="black" d="M860.54,-309.64C867.71,-292.18 878.96,-264.82 887.35,-244.4"/> +<polygon fill="black" stroke="black" points="890.54,-245.86 891.1,-235.28 884.06,-243.2 890.54,-245.86"/> +</g> +<!-- MEM_ALIASN --> +<g id="node21" class="node"> +<title>MEM_ALIASN</title> +<ellipse fill="blue" stroke="black" cx="988.51" cy="-216.25" rx="20.13" ry="20.13"/> +<text text-anchor="middle" x="988.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">#n</text> +</g> +<!-- MEM_TOP->MEM_ALIASN --> +<g id="edge30" class="edge"> +<title>MEM_TOP->MEM_ALIASN</title> +<path fill="none" stroke="black" d="M872.56,-311.29C896.65,-291.76 938.11,-258.13 964.38,-236.82"/> +<polygon fill="black" stroke="black" points="966.57,-239.55 972.13,-230.53 962.16,-234.11 966.57,-239.55"/> +</g> +<!-- MEM_BOT --> +<g id="node18" class="node"> +<title>MEM_BOT</title> +<ellipse fill="blue" stroke="black" cx="853.51" cy="-104.75" rx="43.67" ry="18"/> +<text text-anchor="start" x="829.51" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊥</text> +<text text-anchor="start" x="845.26" y="-100.7" font-family="Times New Roman,serif" font-size="14.00" fill="white">:mem</text> +</g> +<!-- MEM_BOT->BOT --> +<g id="edge34" class="edge"> +<title>MEM_BOT->BOT</title> +<path fill="none" stroke="black" d="M815.04,-96C735.55,-79.97 554.45,-43.48 480.68,-28.61"/> +<polygon fill="black" stroke="black" points="481.37,-25.18 470.88,-26.63 479.99,-32.04 481.37,-25.18"/> +</g> +<!-- MEM_ALIAS1->MEM_BOT --> +<g id="edge31" class="edge"> +<title>MEM_ALIAS1->MEM_BOT</title> +<path fill="none" stroke="black" d="M815.94,-197.17C823.07,-179.82 833.93,-153.39 842.15,-133.4"/> +<polygon fill="black" stroke="black" points="845.37,-134.75 845.94,-124.17 838.9,-132.09 845.37,-134.75"/> +</g> +<!-- MEM_ALIAS1->MEM_ALIASDOTS --> +<!-- MEM_ALIASDOTS->MEM_BOT --> +<g id="edge32" class="edge"> +<title>MEM_ALIASDOTS->MEM_BOT</title> +<path fill="none" stroke="black" d="M891.67,-198.62C884.58,-181.35 873.36,-154.05 864.92,-133.51"/> +<polygon fill="black" stroke="black" points="868.17,-132.22 861.13,-124.3 861.7,-134.88 868.17,-132.22"/> +</g> +<!-- MEM_ALIASDOTS->MEM_ALIASN --> +<!-- MEM_ALIASN->MEM_BOT --> +<g id="edge33" class="edge"> +<title>MEM_ALIASN->MEM_BOT</title> +<path fill="none" stroke="black" d="M973.02,-202.69C950.75,-184.62 909.29,-151 881.55,-128.49"/> +<polygon fill="black" stroke="black" points="883.86,-125.86 873.89,-122.28 879.45,-131.3 883.86,-125.86"/> +</g> +<!-- TUPLE1 --> +<g id="node24" class="node"> +<title>TUPLE1</title> +<polygon fill="none" stroke="none" points="1105.51,-242.75 1051.51,-242.75 1051.51,-189.75 1105.51,-189.75 1105.51,-242.75"/> +<polygon fill="pink" stroke="none" points="1059.76,-216.25 1059.76,-238.75 1097.26,-238.75 1097.26,-216.25 1059.76,-216.25"/> +<polygon fill="none" stroke="black" points="1059.76,-216.25 1059.76,-238.75 1097.26,-238.75 1097.26,-216.25 1059.76,-216.25"/> +<text text-anchor="start" x="1062.76" y="-222.45" font-family="Times New Roman,serif" font-size="14.00">Tuple</text> +<polygon fill="black" stroke="none" points="1059.76,-193.75 1059.76,-216.25 1097.26,-216.25 1097.26,-193.75 1059.76,-193.75"/> +<polygon fill="none" stroke="black" points="1059.76,-193.75 1059.76,-216.25 1097.26,-216.25 1097.26,-193.75 1059.76,-193.75"/> +<text text-anchor="start" x="1066.88" y="-199.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text> +</g> +<!-- TUPLE_TOP->TUPLE1 --> +<g id="edge38" class="edge"> +<title>TUPLE_TOP->TUPLE1</title> +<path fill="none" stroke="black" d="M1119.01,-309.64C1112.37,-294.48 1102.45,-271.87 1094.1,-252.81"/> +<polygon fill="black" stroke="black" points="1097.35,-251.51 1090.13,-243.76 1090.94,-254.32 1097.35,-251.51"/> +</g> +<!-- TUPLE2 --> +<g id="node25" class="node"> +<title>TUPLE2</title> +<polygon fill="none" stroke="none" points="1202.51,-254 1148.51,-254 1148.51,-178.5 1202.51,-178.5 1202.51,-254"/> +<polygon fill="pink" stroke="none" points="1156.76,-227.5 1156.76,-250 1194.26,-250 1194.26,-227.5 1156.76,-227.5"/> +<polygon fill="none" stroke="black" points="1156.76,-227.5 1156.76,-250 1194.26,-250 1194.26,-227.5 1156.76,-227.5"/> +<text text-anchor="start" x="1159.76" y="-233.7" font-family="Times New Roman,serif" font-size="14.00">Tuple</text> +<polygon fill="black" stroke="none" points="1156.76,-205 1156.76,-227.5 1194.26,-227.5 1194.26,-205 1156.76,-205"/> +<polygon fill="none" stroke="black" points="1156.76,-205 1156.76,-227.5 1194.26,-227.5 1194.26,-205 1156.76,-205"/> +<text text-anchor="start" x="1163.88" y="-211.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text> +<polygon fill="black" stroke="none" points="1156.76,-182.5 1156.76,-205 1194.26,-205 1194.26,-182.5 1156.76,-182.5"/> +<polygon fill="none" stroke="black" points="1156.76,-182.5 1156.76,-205 1194.26,-205 1194.26,-182.5 1156.76,-182.5"/> +<text text-anchor="start" x="1163.88" y="-188.7" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text> +</g> +<!-- TUPLE_TOP->TUPLE2 --> +<g id="edge39" class="edge"> +<title>TUPLE_TOP->TUPLE2</title> +<path fill="none" stroke="black" d="M1134.17,-309.64C1139.64,-297.4 1147.29,-280.3 1154.53,-264.14"/> +<polygon fill="black" stroke="black" points="1157.68,-265.65 1158.57,-255.09 1151.3,-262.79 1157.68,-265.65"/> +</g> +<!-- TUPLEN --> +<g id="node26" class="node"> +<title>TUPLEN</title> +<polygon fill="none" stroke="none" points="1299.51,-265.25 1245.51,-265.25 1245.51,-167.25 1299.51,-167.25 1299.51,-265.25"/> +<polygon fill="pink" stroke="none" points="1253.76,-238.75 1253.76,-261.25 1291.26,-261.25 1291.26,-238.75 1253.76,-238.75"/> +<polygon fill="none" stroke="black" points="1253.76,-238.75 1253.76,-261.25 1291.26,-261.25 1291.26,-238.75 1253.76,-238.75"/> +<text text-anchor="start" x="1256.76" y="-244.95" font-family="Times New Roman,serif" font-size="14.00">Tuple</text> +<polygon fill="black" stroke="none" points="1253.76,-216.25 1253.76,-238.75 1291.26,-238.75 1291.26,-216.25 1253.76,-216.25"/> +<polygon fill="none" stroke="black" points="1253.76,-216.25 1253.76,-238.75 1291.26,-238.75 1291.26,-216.25 1253.76,-216.25"/> +<text text-anchor="start" x="1260.88" y="-222.45" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text> +<polygon fill="black" stroke="none" points="1253.76,-193.75 1253.76,-216.25 1291.26,-216.25 1291.26,-193.75 1253.76,-193.75"/> +<polygon fill="none" stroke="black" points="1253.76,-193.75 1253.76,-216.25 1291.26,-216.25 1291.26,-193.75 1253.76,-193.75"/> +<text text-anchor="start" x="1266.88" y="-199.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">...</text> +<polygon fill="black" stroke="none" points="1253.76,-171.25 1253.76,-193.75 1291.26,-193.75 1291.26,-171.25 1253.76,-171.25"/> +<polygon fill="none" stroke="black" points="1253.76,-171.25 1253.76,-193.75 1291.26,-193.75 1291.26,-171.25 1253.76,-171.25"/> +<text text-anchor="start" x="1260.88" y="-177.45" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text> +</g> +<!-- TUPLE_TOP->TUPLEN --> +<g id="edge40" class="edge"> +<title>TUPLE_TOP->TUPLEN</title> +<path fill="none" stroke="black" d="M1146.81,-311.52C1169.97,-294.15 1208.28,-265.42 1236.53,-244.23"/> +<polygon fill="black" stroke="black" points="1238.58,-247.07 1244.48,-238.27 1234.38,-241.47 1238.58,-247.07"/> +</g> +<!-- TUPLE_BOT --> +<g id="node23" class="node"> +<title>TUPLE_BOT</title> +<ellipse fill="pink" stroke="black" cx="1126.51" cy="-104.75" rx="42.65" ry="18"/> +<text text-anchor="start" x="1103.26" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text> +<text text-anchor="start" x="1119.01" y="-100.7" font-family="Times New Roman,serif" font-size="14.00">:tuple</text> +</g> +<!-- TUPLE_BOT->BOT --> +<g id="edge44" class="edge"> +<title>TUPLE_BOT->BOT</title> +<path fill="none" stroke="black" d="M1085.88,-98.86C962.25,-83.97 592.31,-39.44 480.72,-26"/> +<polygon fill="black" stroke="black" points="481.43,-22.56 471.08,-24.84 480.59,-29.51 481.43,-22.56"/> +</g> +<!-- TUPLE1->TUPLE_BOT --> +<g id="edge41" class="edge"> +<title>TUPLE1->TUPLE_BOT</title> +<path fill="none" stroke="black" d="M1089.64,-189.85C1097.12,-172.8 1106.96,-150.34 1114.59,-132.93"/> +<polygon fill="black" stroke="black" points="1117.61,-134.78 1118.41,-124.21 1111.19,-131.97 1117.61,-134.78"/> +</g> +<!-- TUPLE2->TUPLE_BOT --> +<g id="edge42" class="edge"> +<title>TUPLE2->TUPLE_BOT</title> +<path fill="none" stroke="black" d="M1159.19,-178.79C1152.51,-163.86 1144.92,-146.89 1138.73,-133.07"/> +<polygon fill="black" stroke="black" points="1142.02,-131.83 1134.74,-124.13 1135.63,-134.69 1142.02,-131.83"/> +</g> +<!-- TUPLEN->TUPLE_BOT --> +<g id="edge43" class="edge"> +<title>TUPLEN->TUPLE_BOT</title> +<path fill="none" stroke="black" d="M1245.73,-195.16C1220.22,-176.03 1181.9,-147.29 1155.64,-127.59"/> +<polygon fill="black" stroke="black" points="1157.86,-124.89 1147.76,-121.69 1153.66,-130.49 1157.86,-124.89"/> +</g> +</g> +</svg> |
