Final version
This commit is contained in:
parent
e888551e89
commit
201ee44277
25 changed files with 1058 additions and 285 deletions
24
figs/problem1-sliced.dot
Normal file
24
figs/problem1-sliced.dot
Normal file
|
@ -0,0 +1,24 @@
|
|||
digraph pdf {
|
||||
entry [label="enter f()",style=filled];
|
||||
entry -> {while; D};
|
||||
while [label="while (X)",style=filled];
|
||||
C [style="bold,filled"]
|
||||
"if (Y)" [style=filled]
|
||||
"if (Z)" [style=filled]
|
||||
while -> {"if (Y)"} -> while;
|
||||
break2 [style=filled]
|
||||
break1 [style=filled]
|
||||
"if (Y)" -> {"if (Z)" C};
|
||||
"if (Y)" -> break2 [constraint = false];
|
||||
|
||||
"if (Z)" -> {A break1 B break2};
|
||||
break1 -> B;
|
||||
break1 -> break2;
|
||||
break2 -> {C while};
|
||||
{rank=same; A break1 B break2}
|
||||
{rank=same; "if (Z)" C}
|
||||
{rank=same; while D}
|
||||
{edge [style=invis];
|
||||
A -> break1 -> B -> break2;
|
||||
}
|
||||
}
|
25
figs/problem1-solution-sliced.dot
Normal file
25
figs/problem1-solution-sliced.dot
Normal file
|
@ -0,0 +1,25 @@
|
|||
digraph pdf {
|
||||
entry [label="enter f()", style = filled];
|
||||
entry -> while [style = bold];
|
||||
entry -> D [color = grey];
|
||||
while [label="while (X)", style = filled];
|
||||
C [style="bold,filled"]
|
||||
"if (Y)" [style = filled];
|
||||
"if (Z)"
|
||||
while -> {"if (Y)"} -> while [style = bold];
|
||||
break2 [style = filled];
|
||||
break1
|
||||
"if (Y)" -> {"if (Z)"} [color = grey];
|
||||
"if (Y)" -> C [style = bold];
|
||||
"if (Y)" -> break2 [constraint = false, style = bold];
|
||||
"if (Z)" -> {A break1 B} [color = grey];
|
||||
{break1 "if (Z)"} -> break2 [color = lightgrey, style = dashed];
|
||||
break1 -> B [color = grey];
|
||||
break2 -> {C while} [style = bold];
|
||||
{rank=same; A break1 B break2}
|
||||
{rank=same; "if (Z)" C}
|
||||
{rank=same; while D}
|
||||
{edge [style=invis];
|
||||
A -> break1 -> B -> break2;
|
||||
}
|
||||
}
|
23
figs/problem1-solution.dot
Normal file
23
figs/problem1-solution.dot
Normal file
|
@ -0,0 +1,23 @@
|
|||
digraph pdf {
|
||||
entry [label="enter f()"];
|
||||
entry -> {while; D};
|
||||
while [label="while (X)"];
|
||||
C [style="bold"]
|
||||
"if (Y)"
|
||||
"if (Z)"
|
||||
while -> {"if (Y)"} -> while;
|
||||
break2
|
||||
break1
|
||||
"if (Y)" -> {"if (Z)" C};
|
||||
"if (Y)" -> break2 [constraint = false];
|
||||
"if (Z)" -> {A break1 B};
|
||||
{break1 "if (Z)"} -> break2 [color = lightgrey, style = dashed];
|
||||
break1 -> B;
|
||||
break2 -> {C while};
|
||||
{rank=same; A break1 B break2}
|
||||
{rank=same; "if (Z)" C}
|
||||
{rank=same; while D}
|
||||
{edge [style=invis];
|
||||
A -> break1 -> B -> break2;
|
||||
}
|
||||
}
|
|
@ -1,15 +1,16 @@
|
|||
digraph pdf {
|
||||
entry [label="enter f()",style=filled];
|
||||
entry [label="enter f()"];
|
||||
entry -> {while; D};
|
||||
while [label="while (X)",style=filled];
|
||||
C [style="bold,filled"]
|
||||
"if (Y)" [style=filled]
|
||||
"if (Z)" [style=filled]
|
||||
while -> {"if (Y)" C};
|
||||
break2 [style=filled]
|
||||
break1 [style=filled]
|
||||
"if (Y)" -> {"if (Z)"};
|
||||
"if (Z)" -> {A break1};
|
||||
while [label="while (X)"];
|
||||
C [style="bold"]
|
||||
"if (Y)"
|
||||
"if (Z)"
|
||||
while -> "if (Y)" -> while;
|
||||
break2
|
||||
break1
|
||||
"if (Y)" -> {"if (Z)" C};
|
||||
"if (Y)" -> break2 [constraint = false];
|
||||
"if (Z)" -> {A break1 B break2};
|
||||
break1 -> B;
|
||||
break1 -> break2;
|
||||
break2 -> {C while};
|
||||
|
|
30
figs/problem2-sol1.dot
Normal file
30
figs/problem2-sol1.dot
Normal file
|
@ -0,0 +1,30 @@
|
|||
digraph g {
|
||||
"f()" [shape=box, rank=min]; // , style = filled];
|
||||
// Rank adjustment
|
||||
{ node []; // [style=filled]
|
||||
{ rank = same; "int a = 1"; "while (a > 0)"; }
|
||||
"if (a > 10)"; break;
|
||||
}
|
||||
{ rank = same; "log(a)"; "a++"; }
|
||||
{ rank = max; "a++"; "log(a)"; }
|
||||
"a++" [style="bold"];
|
||||
// Control flow
|
||||
"f()" -> "while (a > 0)";
|
||||
"f()" -> "int a = 1";
|
||||
"while (a > 0)" -> "if (a > 10)";
|
||||
"if (a > 10)" -> "break";
|
||||
"break" -> "log(a)";
|
||||
"break" -> "a++";
|
||||
"break" -> "while (a > 0)";
|
||||
// Data flow
|
||||
{ edge [color = red];
|
||||
"int a = 1" -> "while (a > 0)";
|
||||
"int a = 1" -> "if (a > 10)";
|
||||
"int a = 1" -> "log(a)";
|
||||
"int a = 1" -> "a++";
|
||||
"a++" -> "a++";
|
||||
"a++" -> "while (a > 0)";
|
||||
"a++" -> "if (a > 10)";
|
||||
"a++" -> "log(a)" [constraint = true];
|
||||
}
|
||||
}
|
29
figs/problem2-sol2.dot
Normal file
29
figs/problem2-sol2.dot
Normal file
|
@ -0,0 +1,29 @@
|
|||
digraph g {
|
||||
"f()" [shape=box, rank=min]; // , style = filled];
|
||||
// Rank adjustment
|
||||
{ node []; // [style=filled]
|
||||
{ rank = same; "int a = 1"; "while (a > 0)"; }
|
||||
"if (a > 10)";
|
||||
break [style = invis];
|
||||
}
|
||||
{ rank = same; "log(a)"; "a++"; }
|
||||
{ rank = max; "a++"; "log(a)"; }
|
||||
"a++" [style="bold"];
|
||||
// Control flow
|
||||
"f()" -> "while (a > 0)";
|
||||
"f()" -> "int a = 1";
|
||||
"while (a > 0)" -> "if (a > 10)";
|
||||
"if (a > 10)" -> "break";
|
||||
break -> {"log(a)" "a++" "while (a > 0)"} [color = grey]
|
||||
// Data flow
|
||||
{ edge [color = red];
|
||||
"int a = 1" -> "while (a > 0)";
|
||||
"int a = 1" -> "if (a > 10)";
|
||||
"int a = 1" -> "log(a)";
|
||||
"int a = 1" -> "a++";
|
||||
"a++" -> "a++";
|
||||
"a++" -> "while (a > 0)";
|
||||
"a++" -> "if (a > 10)";
|
||||
"a++" -> "log(a)" [constraint = true];
|
||||
}
|
||||
}
|
29
figs/problem2-sol3.dot
Normal file
29
figs/problem2-sol3.dot
Normal file
|
@ -0,0 +1,29 @@
|
|||
digraph g {
|
||||
"f()" [shape=box, rank=min, style = filled];
|
||||
// Rank adjustment
|
||||
{ node []; // [style=filled]
|
||||
{ rank = same; "int a = 1" [style = filled]; "while (a > 0)"; }
|
||||
"if (a > 10)";
|
||||
break [style = invis];
|
||||
}
|
||||
{ rank = same; "log(a)"; "a++"; }
|
||||
{ rank = max; "a++"; "log(a)"; }
|
||||
"a++" [style="bold,filled"];
|
||||
// Control flow
|
||||
"f()" -> "while (a > 0)";
|
||||
"f()" -> "int a = 1";
|
||||
"while (a > 0)" -> "if (a > 10)";
|
||||
"if (a > 10)" -> "break";
|
||||
break -> {"log(a)" "a++" "while (a > 0)"} [color = grey]
|
||||
// Data flow
|
||||
{ edge [color = red];
|
||||
"int a = 1" -> "while (a > 0)";
|
||||
"int a = 1" -> "if (a > 10)";
|
||||
"int a = 1" -> "log(a)";
|
||||
"int a = 1" -> "a++";
|
||||
"a++" -> "a++";
|
||||
"a++" -> "while (a > 0)";
|
||||
"a++" -> "if (a > 10)";
|
||||
"a++" -> "log(a)" [constraint = true];
|
||||
}
|
||||
}
|
29
figs/problem2-sol4.dot
Normal file
29
figs/problem2-sol4.dot
Normal file
|
@ -0,0 +1,29 @@
|
|||
digraph g {
|
||||
"f()" [shape=box, rank=min, style = filled];
|
||||
// Rank adjustment
|
||||
{ node []; // [style=filled]
|
||||
{ rank = same; "int a = 1" [style = filled]; "while (a > 0)"; }
|
||||
"if (a > 10)";
|
||||
break;
|
||||
}
|
||||
{ rank = same; "log(a)"; "a++"; }
|
||||
{ rank = max; "a++"; "log(a)"; }
|
||||
"a++" [style="bold,filled"];
|
||||
// Control flow
|
||||
"f()" -> "while (a > 0)";
|
||||
"f()" -> "int a = 1";
|
||||
"while (a > 0)" -> "if (a > 10)";
|
||||
"if (a > 10)" -> "break";
|
||||
break -> {"log(a)" "a++" "while (a > 0)"}
|
||||
// Data flow
|
||||
{ edge [color = red];
|
||||
"int a = 1" -> "while (a > 0)";
|
||||
"int a = 1" -> "if (a > 10)";
|
||||
"int a = 1" -> "log(a)";
|
||||
"int a = 1" -> "a++";
|
||||
"a++" -> "a++";
|
||||
"a++" -> "while (a > 0)";
|
||||
"a++" -> "if (a > 10)";
|
||||
"a++" -> "log(a)" [constraint = true];
|
||||
}
|
||||
}
|
|
@ -5,25 +5,26 @@ digraph g {
|
|||
{ rank = same; "int a = 1"; "while (a > 0)"; }
|
||||
"if (a > 10)"; break;
|
||||
}
|
||||
{ rank = same; "print(a)"; "a++"; }
|
||||
{ rank = max; "a++"; "print(a)"; }
|
||||
{ rank = same; "log(a)"; "a++"; }
|
||||
{ rank = max; "a++"; "log(a)"; }
|
||||
"a++" [style="filled,bold"];
|
||||
// Control flow
|
||||
"f()" -> "while (a > 0)";
|
||||
"f()" -> "int a = 1";
|
||||
"while (a > 0)" -> "if (a > 10)";
|
||||
"if (a > 10)" -> "break";
|
||||
"break" -> "print(a)";
|
||||
"break" -> "log(a)";
|
||||
"break" -> "a++";
|
||||
"break" -> "while (a > 0)";
|
||||
// Data flow
|
||||
{ edge [color = red];
|
||||
"int a = 1" -> "while (a > 0)";
|
||||
"int a = 1" -> "if (a > 10)";
|
||||
"int a = 1" -> "print(a)";
|
||||
"int a = 1" -> "log(a)";
|
||||
"int a = 1" -> "a++";
|
||||
"a++" -> "a++";
|
||||
"a++" -> "while (a > 0)";
|
||||
"a++" -> "if (a > 10)";
|
||||
"a++" -> "print(a)" [constraint = true];
|
||||
"a++" -> "log(a)" [constraint = true];
|
||||
}
|
||||
}
|
40
figs/problem3-color-x0.dot
Normal file
40
figs/problem3-color-x0.dot
Normal file
|
@ -0,0 +1,40 @@
|
|||
digraph g {
|
||||
enter [];
|
||||
mxin [label = "x = x_in", ];
|
||||
try [];
|
||||
x_in [label = "x_in = x", ];
|
||||
f [label = "f()", ];
|
||||
nr [label = "normal return"];
|
||||
x_out_nr [label = "x = x_out"];
|
||||
er [label = "error return"];
|
||||
catch [label = "catch (Exception e)"];
|
||||
x_out_catch [label = "x = x_out"];
|
||||
log [label = "log(\"error\")"];
|
||||
x_0 [label = "x = 0", style = filled, fillcolor = lightgreen];
|
||||
x_in2 [label = "x_in = x", ];
|
||||
f2 [label = "f()", ];
|
||||
nr2 [label = "normal return"];
|
||||
er2 [label = "error return"];
|
||||
ee [label = "error exit"];
|
||||
x_out_nr2 [label = "x = x_out"];
|
||||
x_out_ee [label = "x = x_out"];
|
||||
|
||||
enter -> {mxin try};
|
||||
try -> f -> {x_in nr er}
|
||||
nr -> x_out_nr
|
||||
er -> catch -> {x_out_catch log}
|
||||
enter -> {x_0 f2}
|
||||
f2 -> {x_in2 nr2 er2}
|
||||
nr2 -> x_out_nr2
|
||||
er2 -> ee -> x_out_ee;
|
||||
|
||||
{edge [color = red, constraint = false];
|
||||
mxin -> x_in;
|
||||
x_0 -> x_in2;
|
||||
}
|
||||
|
||||
{edge [color = blue, constraint = false];
|
||||
x_in -> {x_out_nr x_out_catch}
|
||||
x_in2 -> {x_out_nr2 x_out_ee}
|
||||
}
|
||||
}
|
40
figs/problem3-color.dot
Normal file
40
figs/problem3-color.dot
Normal file
|
@ -0,0 +1,40 @@
|
|||
digraph g {
|
||||
enter [];
|
||||
mxin [label = "x = x_in", ];
|
||||
try [];
|
||||
x_in [label = "x_in = x", ];
|
||||
f [label = "f()", ];
|
||||
nr [label = "normal return"];
|
||||
x_out_nr [label = "x = x_out"];
|
||||
er [label = "error return"];
|
||||
catch [label = "catch (Exception e)"];
|
||||
x_out_catch [label = "x = x_out"];
|
||||
log [label = "log(\"error\")"];
|
||||
x_0 [label = "x = 0", fillcolor = lightgreen, style = filled];
|
||||
x_in2 [label = "x_in = x", fillcolor = lightgreen, style = filled];
|
||||
f2 [label = "f()", fillcolor = lightgreen, style = filled];
|
||||
nr2 [label = "normal return", fillcolor = lightgreen, style = filled];
|
||||
er2 [label = "error return", fillcolor = lightgreen, style = filled];
|
||||
ee [label = "error exit", fillcolor = lightgreen, style = filled];
|
||||
x_out_nr2 [label = "x = x_out", fillcolor = lightgreen, style = filled];
|
||||
x_out_ee [label = "x = x_out", fillcolor = lightgreen, style = filled];
|
||||
|
||||
enter -> {mxin try};
|
||||
try -> f -> {x_in nr er}
|
||||
nr -> x_out_nr
|
||||
er -> catch -> {x_out_catch log}
|
||||
enter -> {x_0 f2}
|
||||
f2 -> {x_in2 nr2 er2}
|
||||
nr2 -> x_out_nr2
|
||||
er2 -> ee -> x_out_ee;
|
||||
|
||||
{edge [color = red, constraint = false];
|
||||
mxin -> x_in;
|
||||
x_0 -> x_in2;
|
||||
}
|
||||
|
||||
{edge [color = blue, constraint = false];
|
||||
x_in -> {x_out_nr x_out_catch}
|
||||
x_in2 -> {x_out_nr2 x_out_ee}
|
||||
}
|
||||
}
|
42
figs/problem3-data-edge-color-f1-error.dot
Normal file
42
figs/problem3-data-edge-color-f1-error.dot
Normal file
|
@ -0,0 +1,42 @@
|
|||
digraph g {
|
||||
enter [];
|
||||
mxin [label = "x = x_in", ];
|
||||
try [];
|
||||
x_in [label = "x_in = x", style = filled, fillcolor = lightgreen];
|
||||
f [label = "f()", style = filled, fillcolor = lightgreen];
|
||||
nr [label = "normal return", style = filled, fillcolor = lightgreen];
|
||||
x_out_nr [label = "x = x_out", style = filled, fillcolor = lightgreen];
|
||||
er [label = "error return", style = filled, fillcolor = lightgreen];
|
||||
catch [label = "catch (Exception e)", style = filled, fillcolor = pink];
|
||||
x_out_catch [label = "x = x_out", style = filled, fillcolor = lightgreen];
|
||||
log [label = "log(\"error\")", style = filled, fillcolor = pink];
|
||||
x_0 [label = "x = 0", style = invis];
|
||||
x_in2 [label = "x_in = x", ];
|
||||
f2 [label = "f()", ];
|
||||
nr2 [label = "normal return"];
|
||||
er2 [label = "error return"];
|
||||
ee [label = "error exit"];
|
||||
x_out_nr2 [label = "x = x_out"];
|
||||
x_out_ee [label = "x = x_out"];
|
||||
|
||||
enter -> {mxin try};
|
||||
enter -> x_0 [style = invis];
|
||||
try -> f -> {x_in nr er}
|
||||
nr -> x_out_nr
|
||||
er -> catch -> {x_out_catch log}
|
||||
enter -> {f2}
|
||||
f2 -> {x_in2 nr2 er2}
|
||||
nr2 -> x_out_nr2
|
||||
er2 -> ee -> x_out_ee;
|
||||
|
||||
{edge [color = red, constraint = false];
|
||||
mxin -> x_in;
|
||||
{x_out_catch x_out_nr} -> x_in2;
|
||||
x_0 -> x_in2 [style = invis];
|
||||
}
|
||||
|
||||
{edge [color = blue, constraint = false];
|
||||
x_in -> {x_out_nr x_out_catch}
|
||||
x_in2 -> {x_out_nr2 x_out_ee}
|
||||
}
|
||||
}
|
42
figs/problem3-data-edge-color-f1.dot
Normal file
42
figs/problem3-data-edge-color-f1.dot
Normal file
|
@ -0,0 +1,42 @@
|
|||
digraph g {
|
||||
enter [];
|
||||
mxin [label = "x = x_in", ];
|
||||
try [];
|
||||
x_in [label = "x_in = x", style = filled, fillcolor = lightgreen];
|
||||
f [label = "f()", style = filled, fillcolor = lightgreen];
|
||||
nr [label = "normal return", style = filled, fillcolor = lightgreen];
|
||||
x_out_nr [label = "x = x_out", style = filled, fillcolor = lightgreen];
|
||||
er [label = "error return", style = filled, fillcolor = lightgreen];
|
||||
catch [label = "catch (Exception e)"];
|
||||
x_out_catch [label = "x = x_out", style = filled, fillcolor = lightgreen];
|
||||
log [label = "log(\"error\")"];
|
||||
x_0 [label = "x = 0", style = invis];
|
||||
x_in2 [label = "x_in = x", ];
|
||||
f2 [label = "f()", ];
|
||||
nr2 [label = "normal return"];
|
||||
er2 [label = "error return"];
|
||||
ee [label = "error exit"];
|
||||
x_out_nr2 [label = "x = x_out"];
|
||||
x_out_ee [label = "x = x_out"];
|
||||
|
||||
enter -> {mxin try};
|
||||
enter -> x_0 [style = invis];
|
||||
try -> f -> {x_in nr er}
|
||||
nr -> x_out_nr
|
||||
er -> catch -> {x_out_catch log}
|
||||
enter -> {f2}
|
||||
f2 -> {x_in2 nr2 er2}
|
||||
nr2 -> x_out_nr2
|
||||
er2 -> ee -> x_out_ee;
|
||||
|
||||
{edge [color = red, constraint = false];
|
||||
mxin -> x_in;
|
||||
{x_out_catch x_out_nr} -> x_in2;
|
||||
x_0 -> x_in2 [style = invis];
|
||||
}
|
||||
|
||||
{edge [color = blue, constraint = false];
|
||||
x_in -> {x_out_nr x_out_catch}
|
||||
x_in2 -> {x_out_nr2 x_out_ee}
|
||||
}
|
||||
}
|
42
figs/problem3-data-edge-color-f2-error.dot
Normal file
42
figs/problem3-data-edge-color-f2-error.dot
Normal file
|
@ -0,0 +1,42 @@
|
|||
digraph g {
|
||||
enter [];
|
||||
mxin [label = "x = x_in", ];
|
||||
try [];
|
||||
x_in [label = "x_in = x", ];
|
||||
f [label = "f()", ];
|
||||
nr [label = "normal return"];
|
||||
x_out_nr [label = "x = x_out"];
|
||||
er [label = "error return"];
|
||||
catch [label = "catch (Exception e)"];
|
||||
x_out_catch [label = "x = x_out"];
|
||||
log [label = "log(\"error\")"];
|
||||
x_0 [label = "x = 0", style = invis];
|
||||
x_in2 [label = "x_in = x", style = filled, fillcolor = lightgreen];
|
||||
f2 [label = "f()", style = filled, fillcolor = lightgreen];
|
||||
nr2 [label = "normal return", style = filled, fillcolor = lightgreen];
|
||||
er2 [label = "error return", style = filled, fillcolor = lightgreen];
|
||||
ee [label = "error exit", style = filled, fillcolor = pink];
|
||||
x_out_nr2 [label = "x = x_out", style = filled, fillcolor = lightgreen];
|
||||
x_out_ee [label = "x = x_out", style = filled, fillcolor = lightgreen];
|
||||
|
||||
enter -> {mxin try};
|
||||
enter -> x_0 [style = invis];
|
||||
try -> f -> {x_in nr er}
|
||||
nr -> x_out_nr
|
||||
er -> catch -> {x_out_catch log}
|
||||
enter -> {f2}
|
||||
f2 -> {x_in2 nr2 er2}
|
||||
nr2 -> x_out_nr2
|
||||
er2 -> ee -> x_out_ee;
|
||||
|
||||
{edge [color = red, constraint = false];
|
||||
mxin -> x_in;
|
||||
{x_out_catch x_out_nr} -> x_in2;
|
||||
x_0 -> x_in2 [style = invis];
|
||||
}
|
||||
|
||||
{edge [color = blue, constraint = false];
|
||||
x_in -> {x_out_nr x_out_catch}
|
||||
x_in2 -> {x_out_nr2 x_out_ee}
|
||||
}
|
||||
}
|
42
figs/problem3-data-edge-color-f2.dot
Normal file
42
figs/problem3-data-edge-color-f2.dot
Normal file
|
@ -0,0 +1,42 @@
|
|||
digraph g {
|
||||
enter [];
|
||||
mxin [label = "x = x_in", ];
|
||||
try [];
|
||||
x_in [label = "x_in = x", ];
|
||||
f [label = "f()", ];
|
||||
nr [label = "normal return"];
|
||||
x_out_nr [label = "x = x_out"];
|
||||
er [label = "error return"];
|
||||
catch [label = "catch (Exception e)"];
|
||||
x_out_catch [label = "x = x_out"];
|
||||
log [label = "log(\"error\")"];
|
||||
x_0 [label = "x = 0", style = invis];
|
||||
x_in2 [label = "x_in = x", style = filled, fillcolor = lightgreen];
|
||||
f2 [label = "f()", style = filled, fillcolor = lightgreen];
|
||||
nr2 [label = "normal return", style = filled, fillcolor = lightgreen];
|
||||
er2 [label = "error return", style = filled, fillcolor = lightgreen];
|
||||
ee [label = "error exit"];
|
||||
x_out_nr2 [label = "x = x_out", style = filled, fillcolor = lightgreen];
|
||||
x_out_ee [label = "x = x_out", style = filled, fillcolor = lightgreen];
|
||||
|
||||
enter -> {mxin try};
|
||||
enter -> x_0 [style = invis];
|
||||
try -> f -> {x_in nr er}
|
||||
nr -> x_out_nr
|
||||
er -> catch -> {x_out_catch log}
|
||||
enter -> {f2}
|
||||
f2 -> {x_in2 nr2 er2}
|
||||
nr2 -> x_out_nr2
|
||||
er2 -> ee -> x_out_ee;
|
||||
|
||||
{edge [color = red, constraint = false];
|
||||
mxin -> x_in;
|
||||
{x_out_catch x_out_nr} -> x_in2;
|
||||
x_0 -> x_in2 [style = invis];
|
||||
}
|
||||
|
||||
{edge [color = blue, constraint = false];
|
||||
x_in -> {x_out_nr x_out_catch}
|
||||
x_in2 -> {x_out_nr2 x_out_ee}
|
||||
}
|
||||
}
|
42
figs/problem3-data-edge-sliced.dot
Normal file
42
figs/problem3-data-edge-sliced.dot
Normal file
|
@ -0,0 +1,42 @@
|
|||
digraph g {
|
||||
enter [style = filled];
|
||||
mxin [label = "x = x_in", style = filled];
|
||||
try [style = filled];
|
||||
x_in [label = "x_in = x", style = filled];
|
||||
f [label = "f()", style = filled];
|
||||
nr [label = "normal return", style = filled];
|
||||
x_out_nr [label = "x = x_out", style = filled];
|
||||
er [label = "error return", style = filled];
|
||||
catch [label = "catch (Exception e)", style = filled];
|
||||
x_out_catch [label = "x = x_out", style = filled];
|
||||
log [label = "log(\"error\")"];
|
||||
x_0 [label = "x = 0", style = invis];
|
||||
x_in2 [label = "x_in = x", style = filled];
|
||||
f2 [label = "f()", style = filled];
|
||||
nr2 [label = "normal return"];
|
||||
er2 [label = "error return"];
|
||||
ee [label = "error exit"];
|
||||
x_out_nr2 [label = "x = x_out"];
|
||||
x_out_ee [label = "x = x_out"];
|
||||
|
||||
enter -> {mxin try};
|
||||
enter -> x_0 [style = invis];
|
||||
try -> f -> {x_in nr er}
|
||||
nr -> x_out_nr
|
||||
er -> catch -> {x_out_catch log}
|
||||
enter -> {f2}
|
||||
f2 -> {x_in2 nr2 er2}
|
||||
nr2 -> x_out_nr2
|
||||
er2 -> ee -> x_out_ee;
|
||||
|
||||
{edge [color = red, constraint = false];
|
||||
mxin -> x_in;
|
||||
{x_out_catch x_out_nr} -> x_in2;
|
||||
x_0 -> x_in2 [style = invis]
|
||||
}
|
||||
|
||||
{edge [color = blue, constraint = false];
|
||||
x_in -> {x_out_nr x_out_catch}
|
||||
x_in2 -> {x_out_nr2 x_out_ee}
|
||||
}
|
||||
}
|
42
figs/problem3-data-edge.dot
Normal file
42
figs/problem3-data-edge.dot
Normal file
|
@ -0,0 +1,42 @@
|
|||
digraph g {
|
||||
enter [];
|
||||
mxin [label = "x = x_in", ];
|
||||
try [];
|
||||
x_in [label = "x_in = x", ];
|
||||
f [label = "f()", ];
|
||||
nr [label = "normal return"];
|
||||
x_out_nr [label = "x = x_out"];
|
||||
er [label = "error return"];
|
||||
catch [label = "catch (Exception e)"];
|
||||
x_out_catch [label = "x = x_out"];
|
||||
log [label = "log(\"error\")"];
|
||||
x_0 [label = "x = 0", style = invis];
|
||||
x_in2 [label = "x_in = x", ];
|
||||
f2 [label = "f()", ];
|
||||
nr2 [label = "normal return"];
|
||||
er2 [label = "error return"];
|
||||
ee [label = "error exit"];
|
||||
x_out_nr2 [label = "x = x_out"];
|
||||
x_out_ee [label = "x = x_out"];
|
||||
|
||||
enter -> {mxin try};
|
||||
enter -> x_0 [style = invis];
|
||||
try -> f -> {x_in nr er}
|
||||
nr -> x_out_nr
|
||||
er -> catch -> {x_out_catch log}
|
||||
enter -> {f2}
|
||||
f2 -> {x_in2 nr2 er2}
|
||||
nr2 -> x_out_nr2
|
||||
er2 -> ee -> x_out_ee;
|
||||
|
||||
{edge [color = red, constraint = false];
|
||||
mxin -> x_in;
|
||||
{x_out_catch x_out_nr} -> x_in2;
|
||||
x_0 -> x_in2 [style = invis];
|
||||
}
|
||||
|
||||
{edge [color = blue, constraint = false];
|
||||
x_in -> {x_out_nr x_out_catch}
|
||||
x_in2 -> {x_out_nr2 x_out_ee}
|
||||
}
|
||||
}
|
40
figs/problem3-sliced.dot
Normal file
40
figs/problem3-sliced.dot
Normal file
|
@ -0,0 +1,40 @@
|
|||
digraph g {
|
||||
enter [style = filled];
|
||||
mxin [label = "x = x_in", style = filled];
|
||||
try [style = filled];
|
||||
x_in [label = "x_in = x", style = filled];
|
||||
f [label = "f()", style = filled];
|
||||
nr [label = "normal return"];
|
||||
x_out_nr [label = "x = x_out"];
|
||||
er [label = "error return"];
|
||||
catch [label = "catch (Exception e)"];
|
||||
x_out_catch [label = "x = x_out"];
|
||||
log [label = "log(\"error\")"];
|
||||
x_0 [label = "x = 0", style = filled];
|
||||
x_in2 [label = "x_in = x", style = filled];
|
||||
f2 [label = "f()", style = filled];
|
||||
nr2 [label = "normal return"];
|
||||
er2 [label = "error return"];
|
||||
ee [label = "error exit"];
|
||||
x_out_nr2 [label = "x = x_out"];
|
||||
x_out_ee [label = "x = x_out"];
|
||||
|
||||
enter -> {mxin try};
|
||||
try -> f -> {x_in nr er}
|
||||
nr -> x_out_nr
|
||||
er -> catch -> {x_out_catch log}
|
||||
enter -> {x_0 f2}
|
||||
f2 -> {x_in2 nr2 er2}
|
||||
nr2 -> x_out_nr2
|
||||
er2 -> ee -> x_out_ee;
|
||||
|
||||
{edge [color = red, constraint = false];
|
||||
mxin -> x_in;
|
||||
x_0 -> x_in2;
|
||||
}
|
||||
|
||||
{edge [color = blue, constraint = false];
|
||||
x_in -> {x_out_nr x_out_catch}
|
||||
x_in2 -> {x_out_nr2 x_out_ee}
|
||||
}
|
||||
}
|
40
figs/problem3-sol-color.dot
Normal file
40
figs/problem3-sol-color.dot
Normal file
|
@ -0,0 +1,40 @@
|
|||
digraph g {
|
||||
enter [];
|
||||
mxin [label = "x = x_in", ];
|
||||
try [];
|
||||
x_in [label = "x_in = x", ];
|
||||
f [label = "f()", ];
|
||||
nr [label = "normal return"];
|
||||
x_out_nr [label = "x = x_out"];
|
||||
er [label = "error return"];
|
||||
catch [label = "catch (Exception e)"];
|
||||
x_out_catch [label = "x = x_out"];
|
||||
log [label = "log(\"error\")"];
|
||||
x_0 [label = "x = 0", fillcolor = lightgreen, style = filled];
|
||||
x_in2 [label = "x_in = x", fillcolor = lightgreen, style = filled];
|
||||
f2 [label = "f()", fillcolor = lightgreen, style = filled];
|
||||
nr2 [label = "normal return", fillcolor = lightgreen, style = filled];
|
||||
er2 [label = "error return", fillcolor = lightgreen, style = filled];
|
||||
ee [label = "error exit", fillcolor = lightgreen, style = filled];
|
||||
x_out_nr2 [label = "x = x_out", fillcolor = lightgreen, style = filled];
|
||||
x_out_ee [label = "x = x_out", fillcolor = lightgreen, style = filled];
|
||||
|
||||
enter -> {mxin try};
|
||||
try -> f -> {x_in nr er}
|
||||
nr -> x_out_nr
|
||||
er -> catch -> {x_out_catch log}
|
||||
{catch} -> {x_0 f2}
|
||||
f2 -> {x_in2 nr2 er2}
|
||||
nr2 -> x_out_nr2
|
||||
er2 -> ee -> x_out_ee;
|
||||
|
||||
{edge [color = red, constraint = false];
|
||||
mxin -> x_in;
|
||||
x_0 -> x_in2;
|
||||
}
|
||||
|
||||
{edge [color = blue, constraint = false];
|
||||
x_in -> {x_out_nr x_out_catch}
|
||||
x_in2 -> {x_out_nr2 x_out_ee}
|
||||
}
|
||||
}
|
40
figs/problem3-sol-sliced.dot
Normal file
40
figs/problem3-sol-sliced.dot
Normal file
|
@ -0,0 +1,40 @@
|
|||
digraph g {
|
||||
enter [style = filled];
|
||||
mxin [label = "x = x_in", style = filled];
|
||||
try [style = filled];
|
||||
x_in [label = "x_in = x", style = filled];
|
||||
f [label = "f()", style = filled];
|
||||
nr [label = "normal return"];
|
||||
x_out_nr [label = "x = x_out"];
|
||||
er [label = "error return", style = filled];
|
||||
catch [label = "catch (Exception e)", style = filled];
|
||||
x_out_catch [label = "x = x_out"];
|
||||
log [label = "log(\"error\")"];
|
||||
x_0 [label = "x = 0", style = filled];
|
||||
x_in2 [label = "x_in = x", style = filled];
|
||||
f2 [label = "f()", style = filled];
|
||||
nr2 [label = "normal return"];
|
||||
er2 [label = "error return"];
|
||||
ee [label = "error exit"];
|
||||
x_out_nr2 [label = "x = x_out"];
|
||||
x_out_ee [label = "x = x_out"];
|
||||
|
||||
enter -> {mxin try};
|
||||
try -> f -> {x_in nr er}
|
||||
nr -> x_out_nr
|
||||
er -> catch -> {x_out_catch log}
|
||||
{catch} -> {x_0 f2}
|
||||
f2 -> {x_in2 nr2 er2}
|
||||
nr2 -> x_out_nr2
|
||||
er2 -> ee -> x_out_ee;
|
||||
|
||||
{edge [color = red, constraint = false];
|
||||
mxin -> x_in;
|
||||
x_0 -> x_in2;
|
||||
}
|
||||
|
||||
{edge [color = blue, constraint = false];
|
||||
x_in -> {x_out_nr x_out_catch}
|
||||
x_in2 -> {x_out_nr2 x_out_ee}
|
||||
}
|
||||
}
|
40
figs/problem3-sol.dot
Normal file
40
figs/problem3-sol.dot
Normal file
|
@ -0,0 +1,40 @@
|
|||
digraph g {
|
||||
enter [];
|
||||
mxin [label = "x = x_in", ];
|
||||
try [];
|
||||
x_in [label = "x_in = x", ];
|
||||
f [label = "f()", ];
|
||||
nr [label = "normal return"];
|
||||
x_out_nr [label = "x = x_out"];
|
||||
er [label = "error return"];
|
||||
catch [label = "catch (Exception e)"];
|
||||
x_out_catch [label = "x = x_out"];
|
||||
log [label = "log(\"error\")"];
|
||||
x_0 [label = "x = 0"];
|
||||
x_in2 [label = "x_in = x"];
|
||||
f2 [label = "f()"];
|
||||
nr2 [label = "normal return"];
|
||||
er2 [label = "error return"];
|
||||
ee [label = "error exit"];
|
||||
x_out_nr2 [label = "x = x_out"];
|
||||
x_out_ee [label = "x = x_out"];
|
||||
|
||||
enter -> {mxin try};
|
||||
try -> f -> {x_in nr er}
|
||||
nr -> x_out_nr
|
||||
er -> catch -> {x_out_catch log}
|
||||
{catch} -> {x_0 f2}
|
||||
f2 -> {x_in2 nr2 er2}
|
||||
nr2 -> x_out_nr2
|
||||
er2 -> ee -> x_out_ee;
|
||||
|
||||
{edge [color = red, constraint = false];
|
||||
mxin -> x_in;
|
||||
x_0 -> x_in2;
|
||||
}
|
||||
|
||||
{edge [color = blue, constraint = false];
|
||||
x_in -> {x_out_nr x_out_catch}
|
||||
x_in2 -> {x_out_nr2 x_out_ee}
|
||||
}
|
||||
}
|
|
@ -1,18 +1,18 @@
|
|||
digraph g {
|
||||
enter [style = filled];
|
||||
mxin [label = "x = x_in", style = filled];
|
||||
try [style = filled];
|
||||
x_in [label = "x_in = x", style = filled];
|
||||
f [label = "f()", style = filled];
|
||||
enter [];
|
||||
mxin [label = "x = x_in", ];
|
||||
try [];
|
||||
x_in [label = "x_in = x", ];
|
||||
f [label = "f()", ];
|
||||
nr [label = "normal return"];
|
||||
x_out_nr [label = "x = x_out"];
|
||||
er [label = "error return"];
|
||||
catch [label = "catch (Exception e)"];
|
||||
x_out_catch [label = "x = x_out"];
|
||||
log [label = "log(\"error\")"];
|
||||
x_0 [label = "x = 0", style = filled];
|
||||
x_in2 [label = "x_in = x", style = filled];
|
||||
f2 [label = "f()", style = filled];
|
||||
x_0 [label = "x = 0", ];
|
||||
x_in2 [label = "x_in = x", ];
|
||||
f2 [label = "f()", ];
|
||||
nr2 [label = "normal return"];
|
||||
er2 [label = "error return"];
|
||||
ee [label = "error exit"];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue