First acceptable solution

This commit is contained in:
Jan-Niclas Loosen
2026-01-23 11:32:20 +01:00
parent 51028555de
commit 188cba7fa6
79 changed files with 163 additions and 3860 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 63 KiB

View File

@@ -1,92 +1,60 @@
from typing import Any from typing import Any, Callable, Set
from .CFG_Node import * from .CFG_Node import *
class CFG: class CFG:
def __init__(self, in_node: CFG_Node, out_node: CFG_Node, ast=None): def __init__(self, ast):
self.in_node = in_node start = CFG_START()
self.out_node = out_node start.dot_style = 'style=filled, color=gray'
end = CFG_END()
end.dot_style = 'style=filled, color=gray'
last = ast.cfa(start, end)
if last is not None:
last.add_child(end)
self.START = start
self.END = end
self.ast = ast self.ast = ast
# If AST is provided, filter the graph by removing empty nodes # Remove empty nodes and rewire edges
if ast is not None: all_nodes = self.nodes()
self._filter_graph() nodes_to_remove = [node for node in all_nodes if node.is_empty()]
def _filter_graph(self):
"""
Filter the CFG by removing empty nodes and rewiring edges.
This should be done once during construction, not during to_dot().
"""
# Collect all nodes in the graph
all_nodes = set()
self._collect_nodes(self.in_node, all_nodes)
# Identify nodes to remove
nodes_to_remove = [node for node in all_nodes if self._should_remove_node(node)]
# Remove nodes and rewrite edges
for node in nodes_to_remove: for node in nodes_to_remove:
self._remove_node_and_rewire(node) self.__remove_and_rewire(node)
def _collect_nodes(self, node, node_set): def nodes(self):
"""Recursively collect all nodes in the graph""" all_nodes = set()
self.__collect_nodes(self.START, all_nodes)
return all_nodes
def __collect_nodes(self, node, node_set):
if node in node_set: if node in node_set:
return return
node_set.add(node) node_set.add(node)
for child in node.children: for child in node.children:
self._collect_nodes(child, node_set) self.__collect_nodes(child, node_set)
def _should_remove_node(self, node): def __remove_and_rewire(self, node):
"""Determine if a node should be removed from the graph"""
# Remove empty nodes (nodes with no meaningful content)
# Check for both None and "None" string
if hasattr(node, 'label') and ((node.label is None) or (node.label == "None")):
# Nodes with AST nodes should NOT be removed - they will get labels from AST
if node.ast_node is not None:
return False
# Also keep global START nodes (they have label=None but should be shown)
if hasattr(node, 'dot_label') and node.dot_label() == "START":
return False
# Remove nodes that have no AST and no meaningful label
return True
# Remove global END nodes (those without function names)
if hasattr(node, 'dot_label'):
if node.dot_label() in ["END"]:
# Keep function-specific END nodes, skip global ones
if hasattr(node, 'label') and node.label and '(' in node.label and ')' in node.label:
return False
else:
return True
return False
def _remove_node_and_rewire(self, node):
"""Remove a node from the graph and rewire edges to bypass it"""
# Store original children before modification
original_children = list(node.children) original_children = list(node.children)
# For each parent, rewire edges to bypass this node
for parent in list(node.parents): for parent in list(node.parents):
if node in parent.children: if node in parent.children:
# Find appropriate targets based on node type # For diamond nodes, preserve the true and false bodies
if hasattr(node, 'dot_shape') and node.dot_shape() == "diamond": if isinstance(node, CFG_DIAMOND):
# For diamond nodes, preserve T/F branches
targets = [] targets = []
if len(original_children) >= 1: if len(original_children) >= 1:
true_target = self._find_first_non_empty_child(original_children[0]) true_target = self.__first_filled_child(original_children[0])
if true_target: if true_target:
targets.append(true_target) targets.append(true_target)
if len(original_children) >= 2: if len(original_children) >= 2:
false_target = self._find_first_non_empty_child(original_children[1]) false_target = self.__first_filled_child(original_children[1])
if false_target: if false_target:
targets.append(false_target) targets.append(false_target)
# For regular nodes, find all non-empty targets
else: else:
# For regular nodes, find all non-empty targets
targets = [] targets = []
for child in original_children: for child in original_children:
target = self._find_first_non_empty_child(child) target = self.__first_filled_child(child)
if target and target not in targets: if target and target not in targets:
targets.append(target) targets.append(target)
@@ -101,97 +69,49 @@ class CFG:
node.parents.clear() node.parents.clear()
node.children.clear() node.children.clear()
def _find_first_non_empty_child(self, node): def __first_filled_child(self, node):
"""Find the first non-empty descendant of a node""" if not node.is_empty():
if not self._should_remove_node(node):
return node return node
# Recursively check children # Recursively check children
for child in sorted(node.children, key=lambda n: n.id): for child in sorted(node.children, key=lambda n: n.id):
result = self._find_first_non_empty_child(child) result = self.__first_filled_child(child)
if result is not None: if result is not None:
return result return result
return None return None
def to_dot(self) -> str: def to_dot(self) -> str:
""" lines = ["digraph CFG {", ' node [fontname="Helvetica"];']
Convert the CFG to DOT format.
This method should ONLY handle formatting, not graph modifications.
All graph filtering and modifications should be done in the constructor.
"""
visited = set()
lines = ["digraph CFG {"]
lines.append(' node [fontname="Helvetica"];')
def node_label(node: CFG_Node) -> str | None | Any:
# Use custom label if available
if hasattr(node, 'label') and node.label:
# Remove node ID from label for certain node types
if isinstance(node, (CFG_START, CFG_END, CFG_CALL, CFG_RETURN)):
return node.label
else:
return node.label
# Base label from the node
base = node.dot_label() if hasattr(node, "dot_label") else ""
# Semantic label from AST
if node.ast_node is not None:
semantic = str(node.ast_node)
label_content = f"{base}\n{semantic}" if base else semantic
return label_content
return base if base else None
def node_shape(node: CFG_Node) -> str:
return node.dot_shape() if hasattr(node, "dot_shape") else "box"
def node_style(node: CFG_Node) -> str:
# Add styling for special node types
styles = []
if hasattr(node, 'label') and node.label:
if node.label.startswith('CALL') or node.label.startswith('RET'):
styles.append('style=filled')
styles.append('color=orange')
elif node.label.startswith('START') or node.label.startswith('END'):
styles.append('style=filled')
styles.append('color=green')
return ', '.join(styles) if styles else ''
def visit(node: CFG_Node):
if node.id in visited:
return
visited.add(node.id)
label = node_label(node)
if label is None:
# This shouldn't happen if the constructor did its job properly
return
shape = node_shape(node)
style = node_style(node)
def emit(node: CFG_Node):
label = node.dot_label()
shape = node.dot_shape
style = node.dot_style
style_str = f", {style}" if style else "" style_str = f", {style}" if style else ""
lines.append( lines.append(f' n{node.id} [label="{label}", shape={shape}{style_str}];')
f' n{node.id} [label="{label}", shape={shape}{style_str}];'
)
# Add edges to children
for i, child in enumerate(sorted(node.children, key=lambda n: n.id)): for i, child in enumerate(sorted(node.children, key=lambda n: n.id)):
# Add edge labels for diamond nodes (conditional branches)
edge_label = "" edge_label = ""
if hasattr(node, 'dot_shape') and node.dot_shape() == "diamond": if isinstance(node, CFG_DIAMOND):
if i == 0: if i == 0:
edge_label = ' [label="T"]' edge_label = ' [label="T"]'
elif i == 1: elif i == 1:
edge_label = ' [label="F"]' edge_label = ' [label="F"]'
lines.append(f" n{node.id} -> n{child.id}{edge_label};") lines.append(f" n{node.id} -> n{child.id}{edge_label};")
visit(child)
# Start the CFG traversal from the entry node self.traverse(emit, start=self.START)
visit(self.in_node)
lines.append("}") lines.append("}")
return "\n".join(lines) return "\n".join(lines)
# Reusable traversal function
def traverse(self, fn: Callable[[CFG_Node], Any], start: CFG_Node | None = None) -> None:
start = start or self.START
visited: Set[int] = set()
def visit(node: CFG_Node):
if node.id in visited:
return
visited.add(node.id)
fn(node)
for child in sorted(node.children, key=lambda n: n.id):
visit(child)
visit(start)

View File

@@ -5,7 +5,10 @@ class CFG_Node:
self.ast_node = ast_node self.ast_node = ast_node
self.children = set() self.children = set()
self.parents = set() self.parents = set()
self.label = None # Optional label for the node
self.label = None
self.dot_shape = 'box'
self.dot_style = ''
self.id = CFG_Node.__counter self.id = CFG_Node.__counter
CFG_Node.__counter += 1 CFG_Node.__counter += 1
@@ -36,44 +39,58 @@ class CFG_Node:
parent.children.remove(self) parent.children.remove(self)
self.parents.remove(parent) self.parents.remove(parent)
def __str__(self): def dot_label(self):
if self.label: # Prioritize custom label
return f"CFG_Node({self.id}, label='{self.label}')" if self.label is not None:
elif self.ast_node: return self.label
return f"CFG_Node({self.id}, ast={type(self.ast_node).__name__})"
else:
return f"CFG_Node({self.id})"
def __repr__(self): # Build label from AST node
return self.__str__() if self.ast_node is not None:
return str(self.ast_node)
return None
def is_filled(self):
return not self.is_empty()
def is_empty(self):
# Node is empty if it has no label and no related AST node
if self.label is None or self.label == "None":
if self.ast_node is not None:
# Node belongs to a ast node
return False
return True
# Node is required for the control flow
return False
class CFG_START(CFG_Node): class CFG_START(CFG_Node):
def dot_shape(self): def __init__(self, ast_node=None):
return "box" super().__init__(ast_node)
self.dot_shape = "ellipse"
def dot_label(self): self.dot_style = 'style=filled, color=green'
return "START" self.label = "START"
class CFG_END(CFG_Node): class CFG_END(CFG_Node):
def dot_shape(self): def __init__(self, ast_node=None):
return "box" super().__init__(ast_node)
self.dot_shape = "ellipse"
def dot_label(self): self.dot_style = 'style=filled, color=green'
return "END" self.label = "END"
class CFG_DIAMOND(CFG_Node): class CFG_DIAMOND(CFG_Node):
def dot_shape(self): def __init__(self, ast_node=None):
return "diamond" super().__init__(ast_node)
self.dot_shape = "diamond"
self.label = "<?>"
class CFG_CALL(CFG_Node): class CFG_CALL(CFG_Node):
def dot_shape(self): def __init__(self, ast_node=None):
return "box" super().__init__(ast_node)
self.dot_style = 'style=filled, color=orange'
self.dot_shape = "box"
class CFG_RETURN(CFG_Node): class CFG_RETURN(CFG_Node):
def dot_shape(self): def __init__(self, ast_node=None):
return "box" super().__init__(ast_node)
self.dot_style = 'style=filled, color=orange'
self.dot_shape = "box"

View File

@@ -125,7 +125,6 @@ class IF(compiler.IF):
# Attach junction node # Attach junction node
diamond = CFG_DIAMOND(self.cond) diamond = CFG_DIAMOND(self.cond)
diamond.label = "<?>"
cond_node.add_child(diamond) cond_node.add_child(diamond)
# Define start and end entry and unwraps expressions # Define start and end entry and unwraps expressions
@@ -164,7 +163,6 @@ class WHILE(compiler.WHILE):
# Attach junction node # Attach junction node
diamond = CFG_DIAMOND(self.cond) diamond = CFG_DIAMOND(self.cond)
diamond.label = "<?>"
comp_node.add_child(diamond) comp_node.add_child(diamond)
# Unwrap the loop body # Unwrap the loop body

View File

@@ -1,91 +0,0 @@
#!/usr/bin/env python3
import sys
import os
from pathlib import Path
# Add the current directory to Python path so we can import our modules
sys.path.insert(0, '/home/janniclas/Projekte/Construction-of-Compilers/Project-02-03-04')
import triplayacc as yacc
import cfg_build
import syntax
from cfg.CFG import CFG
from cfg.CFG_Node import (CFG_START, CFG_END)
def make_cfg(ast):
start = CFG_START()
end = CFG_END()
last = ast.cfa(start, end)
if last is not None:
last.add_child(end)
return CFG(start, end, ast)
def generate_dot_files():
base = Path("triplaprograms")
programs = sorted([f for f in base.glob("*.tripla")])
output_dir = Path("mistraltests/after")
output_dir.mkdir(exist_ok=True, parents=True)
for path in programs:
try:
print(f"Processing {path.name}...")
# Reset the global FUNCTIONS registry
cfg_build.FUNCTIONS.clear()
source = path.read_text()
ast = yacc.parser.parse(source)
# Create CFG
cfg = make_cfg(ast)
# Generate dot file
dot_str = cfg.to_dot()
# Save to file
output_path = output_dir / f"{path.stem}_cfg_after.dot"
with open(output_path, "w") as f:
f.write(dot_str)
print(f"Saved: {output_path}")
except Exception as e:
print(f"Error processing {path.name}: {e}")
continue
def compare_dot_files():
"""Compare before and after dot files to ensure they're the same"""
before_dir = Path("mistraltests/before")
after_dir = Path("mistraltests/after")
before_files = sorted(before_dir.glob("*_cfg_before.dot"))
after_files = sorted(after_dir.glob("*_cfg_after.dot"))
print("\nComparing dot files...")
mismatches = []
for before_file, after_file in zip(before_files, after_files):
before_content = before_file.read_text()
after_content = after_file.read_text()
if before_content == after_content:
print(f"{before_file.stem} - MATCH")
else:
print(f"{before_file.stem} - MISMATCH")
mismatches.append((before_file, after_file))
if mismatches:
print(f"\n{mismatches} files have mismatches!")
for before_file, after_file in mismatches:
print(f" {before_file.name} vs {after_file.name}")
else:
print("\nAll dot files match! The refactoring was successful.")
if __name__ == "__main__":
generate_dot_files()
compare_dot_files()

View File

@@ -1,62 +0,0 @@
#!/usr/bin/env python3
import sys
import os
from pathlib import Path
# Add the current directory to Python path so we can import our modules
sys.path.insert(0, '/home/janniclas/Projekte/Construction-of-Compilers/Project-02-03-04')
import triplayacc as yacc
import cfg_build
import syntax
from cfg.CFG import CFG
from cfg.CFG_Node import (CFG_START, CFG_END)
def make_cfg(ast):
start = CFG_START()
end = CFG_END()
last = ast.cfa(start, end)
if last is not None:
last.add_child(end)
return CFG(start, end)
def generate_dot_files():
base = Path("triplaprograms")
programs = sorted([f for f in base.glob("*.tripla")])
output_dir = Path("mistraltests/before")
output_dir.mkdir(exist_ok=True, parents=True)
for path in programs:
try:
print(f"Processing {path.name}...")
# Reset the global FUNCTIONS registry
cfg_build.FUNCTIONS.clear()
source = path.read_text()
ast = yacc.parser.parse(source)
# Create CFG
cfg = make_cfg(ast)
# Generate dot file
dot_str = cfg.to_dot()
# Save to file
output_path = output_dir / f"{path.stem}_cfg_before.dot"
with open(output_path, "w") as f:
f.write(dot_str)
print(f"Saved: {output_path}")
except Exception as e:
print(f"Error processing {path.name}: {e}")
continue
if __name__ == "__main__":
generate_dot_files()
print("Done generating 'before' dot files.")

View File

@@ -1,23 +1,19 @@
import triplayacc as yacc
import cfg_build
import syntax
from pathlib import Path
from graphviz import Source
from vistram.tram import *
import tkinter as tk
from vistram.vistram import MachineUI
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import lib.console as cnsl
import os import os
import tkinter as tk
from cfg.CFG import CFG from pathlib import Path
from cfg.CFG_Node import (CFG_START, CFG_END)
import matplotlib import matplotlib
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
from graphviz import Source
import lib.console as cnsl
import syntax
import triplayacc as yacc
from cfg.CFG import CFG
from vistram.tram import *
from vistram.vistram import MachineUI
matplotlib.use("TkAgg") matplotlib.use("TkAgg")
# Assembles the AST into TRAM code # Assembles the AST into TRAM code
@@ -26,14 +22,7 @@ def assemble(ast):
return code + [halt()] return code + [halt()]
def make_cfg(ast): def make_cfg(ast):
start = CFG_START() return CFG(ast)
end = CFG_END()
last = ast.cfa(start, end)
if last is not None:
last.add_child(end)
return CFG(start, end, ast)
# Renders a diagram of the AST # Renders a diagram of the AST
def render_diagram(dot_string: str): def render_diagram(dot_string: str):

View File

@@ -1,21 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n1 [label="START", shape=box];
n1 -> n7;
n7 [label="1", shape=box];
n7 -> n8;
n8 [label="2", shape=box];
n8 -> n9;
n9 [label="3", shape=box];
n9 -> n10;
n10 [label="CALL a", shape=box, style=filled, color=orange];
n10 -> n3;
n3 [label="START a(x, y, z)", shape=box, style=filled, color=green];
n3 -> n6;
n6 [label="x", shape=box];
n6 -> n4;
n4 [label="END a(x, y, z)", shape=box, style=filled, color=green];
n4 -> n12;
n12 [label="RET a", shape=box, style=filled, color=orange];
n10 -> n12;
}

View File

@@ -1,125 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n14 [label="START", shape=box];
n14 -> n65;
n65 [label="10", shape=box];
n65 -> n66;
n66 [label="CALL f1", shape=box, style=filled, color=orange];
n66 -> n16;
n16 [label="START f1(b)", shape=box, style=filled, color=green];
n16 -> n21;
n21 [label="b", shape=box];
n21 -> n22;
n22 [label="0", shape=box];
n22 -> n23;
n23 [label="b == 0", shape=box];
n23 -> n24;
n24 [label="<?>", shape=diamond];
n24 -> n28 [label="T"];
n28 [label="0", shape=box];
n28 -> n17;
n17 [label="END f1(b)", shape=box, style=filled, color=green];
n17 -> n34;
n34 [label="RET f1", shape=box, style=filled, color=orange];
n34 -> n17;
n17 -> n45;
n45 [label="RET f1", shape=box, style=filled, color=orange];
n45 -> n58;
n58 [label="a", shape=box];
n58 -> n59;
n59 [label="b", shape=box];
n59 -> n60;
n60 [label="a * b", shape=box];
n60 -> n61;
n61 [label="CALL g", shape=box, style=filled, color=orange];
n61 -> n50;
n50 [label="START g(c)", shape=box, style=filled, color=green];
n50 -> n53;
n53 [label="a", shape=box];
n53 -> n54;
n54 [label="b", shape=box];
n54 -> n55;
n55 [label="a * b", shape=box];
n55 -> n56;
n56 [label="c", shape=box];
n56 -> n57;
n57 [label="(a * b) * c", shape=box];
n57 -> n51;
n51 [label="END g(c)", shape=box, style=filled, color=green];
n51 -> n63;
n63 [label="RET g", shape=box, style=filled, color=orange];
n63 -> n19;
n19 [label="END f2(a, b)", shape=box, style=filled, color=green];
n19 -> n91;
n91 [label="RET f2", shape=box, style=filled, color=orange];
n61 -> n63;
n17 -> n49;
n49 [label="RET f1", shape=box, style=filled, color=orange];
n49 -> n58;
n17 -> n68;
n68 [label="RET f1", shape=box, style=filled, color=orange];
n68 -> n70;
n70 [label="10", shape=box];
n70 -> n83;
n83 [label="20", shape=box];
n83 -> n84;
n84 [label="30", shape=box];
n84 -> n85;
n85 [label="CALL max", shape=box, style=filled, color=orange];
n85 -> n71;
n71 [label="START max(a, b)", shape=box, style=filled, color=green];
n71 -> n74;
n74 [label="a", shape=box];
n74 -> n75;
n75 [label="b", shape=box];
n75 -> n76;
n76 [label="a > b", shape=box];
n76 -> n77;
n77 [label="<?>", shape=diamond];
n77 -> n81 [label="T"];
n81 [label="a", shape=box];
n81 -> n72;
n72 [label="END max(a, b)", shape=box, style=filled, color=green];
n72 -> n87;
n87 [label="RET max", shape=box, style=filled, color=orange];
n87 -> n89;
n89 [label="CALL f2", shape=box, style=filled, color=orange];
n89 -> n18;
n18 [label="START f2(a, b)", shape=box, style=filled, color=green];
n18 -> n35;
n35 [label="a", shape=box];
n35 -> n36;
n36 [label="b", shape=box];
n36 -> n37;
n37 [label="a > b", shape=box];
n37 -> n38;
n38 [label="<?>", shape=diamond];
n38 -> n42 [label="T"];
n42 [label="a", shape=box];
n42 -> n43;
n43 [label="CALL f1", shape=box, style=filled, color=orange];
n43 -> n16;
n43 -> n45;
n38 -> n46 [label="F"];
n46 [label="b", shape=box];
n46 -> n47;
n47 [label="CALL f1", shape=box, style=filled, color=orange];
n47 -> n16;
n47 -> n49;
n89 -> n91;
n77 -> n82 [label="F"];
n82 [label="b", shape=box];
n82 -> n72;
n85 -> n87;
n24 -> n29 [label="F"];
n29 [label="b", shape=box];
n29 -> n30;
n30 [label="1", shape=box];
n30 -> n31;
n31 [label="b - 1", shape=box];
n31 -> n32;
n32 [label="CALL f1", shape=box, style=filled, color=orange];
n32 -> n16;
n32 -> n34;
n66 -> n68;
}

View File

@@ -1,24 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n92 [label="START", shape=box];
n92 -> n94;
n94 [label="2", shape=box];
n94 -> n95;
n95 [label="x", shape=box];
n95 -> n96;
n96 [label="2 < x", shape=box];
n96 -> n97;
n97 [label="x", shape=box];
n97 -> n98;
n98 [label="9", shape=box];
n98 -> n99;
n99 [label="x > 9", shape=box];
n99 -> n100;
n100 [label="(2 < x) && (x > 9)", shape=box];
n100 -> n101;
n101 [label="<?>", shape=diamond];
n101 -> n105 [label="T"];
n105 [label="1", shape=box];
n101 -> n106 [label="F"];
n106 [label="0", shape=box];
}

View File

@@ -1,43 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n107 [label="START", shape=box];
n107 -> n119;
n119 [label="1", shape=box];
n119 -> n120;
n120 [label="CALL a", shape=box, style=filled, color=orange];
n120 -> n109;
n109 [label="START a(x)", shape=box, style=filled, color=green];
n109 -> n116;
n116 [label="x", shape=box];
n116 -> n110;
n110 [label="END a(x)", shape=box, style=filled, color=green];
n110 -> n122;
n122 [label="RET a", shape=box, style=filled, color=orange];
n122 -> n124;
n124 [label="2", shape=box];
n124 -> n125;
n125 [label="CALL b", shape=box, style=filled, color=orange];
n125 -> n111;
n111 [label="START b(y)", shape=box, style=filled, color=green];
n111 -> n117;
n117 [label="y", shape=box];
n117 -> n112;
n112 [label="END b(y)", shape=box, style=filled, color=green];
n112 -> n127;
n127 [label="RET b", shape=box, style=filled, color=orange];
n127 -> n128;
n128 [label="3", shape=box];
n128 -> n129;
n129 [label="CALL c", shape=box, style=filled, color=orange];
n129 -> n113;
n113 [label="START c(z)", shape=box, style=filled, color=green];
n113 -> n118;
n118 [label="z", shape=box];
n118 -> n114;
n114 [label="END c(z)", shape=box, style=filled, color=green];
n114 -> n131;
n131 [label="RET c", shape=box, style=filled, color=orange];
n129 -> n131;
n125 -> n127;
n120 -> n122;
}

View File

@@ -1,67 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n132 [label="START", shape=box];
n132 -> n167;
n167 [label="2", shape=box];
n167 -> n168;
n168 [label="3", shape=box];
n168 -> n169;
n169 [label="CALL f", shape=box, style=filled, color=orange];
n169 -> n134;
n134 [label="START f(x, y, z)", shape=box, style=filled, color=green];
n134 -> n137;
n137 [label="2", shape=box];
n137 -> n138;
n138 [label="y = 2", shape=box];
n138 -> n139;
n139 [label="3", shape=box];
n139 -> n140;
n140 [label="z = 3", shape=box];
n140 -> n160;
n160 [label="x", shape=box];
n160 -> n161;
n161 [label="CALL g", shape=box, style=filled, color=orange];
n161 -> n141;
n141 [label="START g(x)", shape=box, style=filled, color=green];
n141 -> n144;
n144 [label="7", shape=box];
n144 -> n145;
n145 [label="x = 7", shape=box];
n145 -> n146;
n146 [label="y", shape=box];
n146 -> n147;
n147 [label="0", shape=box];
n147 -> n148;
n148 [label="y > 0", shape=box];
n148 -> n149;
n149 [label="<?>", shape=diamond];
n149 -> n153 [label="T"];
n153 [label="y", shape=box];
n153 -> n154;
n154 [label="CALL g", shape=box, style=filled, color=orange];
n154 -> n141;
n154 -> n156;
n156 [label="RET g", shape=box, style=filled, color=orange];
n156 -> n159;
n159 [label="x", shape=box];
n159 -> n142;
n142 [label="END g(x)", shape=box, style=filled, color=green];
n142 -> n156;
n142 -> n163;
n163 [label="RET g", shape=box, style=filled, color=orange];
n163 -> n164;
n164 [label="x", shape=box];
n164 -> n165;
n165 [label="g(x) + x", shape=box];
n165 -> n135;
n135 [label="END f(x, y, z)", shape=box, style=filled, color=green];
n135 -> n171;
n171 [label="RET f", shape=box, style=filled, color=orange];
n149 -> n157 [label="F"];
n157 [label="8", shape=box];
n157 -> n158;
n158 [label="x = 8", shape=box];
n158 -> n159;
n161 -> n163;
n169 -> n171;
}

View File

@@ -1,266 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n173 [label="START", shape=box];
n173 -> n338;
n338 [label="3", shape=box];
n338 -> n339;
n339 [label="CALL fac", shape=box, style=filled, color=orange];
n339 -> n191;
n191 [label="START fac(x)", shape=box, style=filled, color=green];
n191 -> n194;
n194 [label="x", shape=box];
n194 -> n195;
n195 [label="1", shape=box];
n195 -> n196;
n196 [label="x == 1", shape=box];
n196 -> n197;
n197 [label="<?>", shape=diamond];
n197 -> n201 [label="T"];
n201 [label="1", shape=box];
n201 -> n192;
n192 [label="END fac(x)", shape=box, style=filled, color=green];
n192 -> n207;
n207 [label="RET fac", shape=box, style=filled, color=orange];
n207 -> n208;
n208 [label="x", shape=box];
n208 -> n209;
n209 [label="fac((x - 1)) * x", shape=box];
n209 -> n192;
n192 -> n223;
n223 [label="RET fac", shape=box, style=filled, color=orange];
n223 -> n224;
n224 [label="x", shape=box];
n224 -> n225;
n225 [label="fac((x - 1)) * x", shape=box];
n225 -> n192;
n192 -> n239;
n239 [label="RET fac", shape=box, style=filled, color=orange];
n239 -> n240;
n240 [label="x", shape=box];
n240 -> n241;
n241 [label="fac((x - 1)) * x", shape=box];
n241 -> n192;
n192 -> n255;
n255 [label="RET fac", shape=box, style=filled, color=orange];
n255 -> n256;
n256 [label="x", shape=box];
n256 -> n257;
n257 [label="fac((x - 1)) * x", shape=box];
n257 -> n192;
n192 -> n271;
n271 [label="RET fac", shape=box, style=filled, color=orange];
n271 -> n272;
n272 [label="x", shape=box];
n272 -> n273;
n273 [label="fac((x - 1)) * x", shape=box];
n273 -> n192;
n192 -> n287;
n287 [label="RET fac", shape=box, style=filled, color=orange];
n287 -> n288;
n288 [label="x", shape=box];
n288 -> n289;
n289 [label="fac((x - 1)) * x", shape=box];
n289 -> n192;
n192 -> n303;
n303 [label="RET fac", shape=box, style=filled, color=orange];
n303 -> n304;
n304 [label="x", shape=box];
n304 -> n305;
n305 [label="fac((x - 1)) * x", shape=box];
n305 -> n192;
n192 -> n319;
n319 [label="RET fac", shape=box, style=filled, color=orange];
n319 -> n320;
n320 [label="x", shape=box];
n320 -> n321;
n321 [label="fac((x - 1)) * x", shape=box];
n321 -> n192;
n192 -> n335;
n335 [label="RET fac", shape=box, style=filled, color=orange];
n335 -> n336;
n336 [label="x", shape=box];
n336 -> n337;
n337 [label="fac((x - 1)) * x", shape=box];
n337 -> n192;
n192 -> n341;
n341 [label="RET fac", shape=box, style=filled, color=orange];
n197 -> n202 [label="F"];
n202 [label="x", shape=box];
n202 -> n203;
n203 [label="1", shape=box];
n203 -> n204;
n204 [label="x - 1", shape=box];
n204 -> n205;
n205 [label="CALL fac", shape=box, style=filled, color=orange];
n205 -> n191;
n205 -> n207;
n191 -> n210;
n210 [label="x", shape=box];
n210 -> n211;
n211 [label="1", shape=box];
n211 -> n212;
n212 [label="x == 1", shape=box];
n212 -> n213;
n213 [label="<?>", shape=diamond];
n213 -> n217 [label="T"];
n217 [label="1", shape=box];
n217 -> n192;
n213 -> n218 [label="F"];
n218 [label="x", shape=box];
n218 -> n219;
n219 [label="1", shape=box];
n219 -> n220;
n220 [label="x - 1", shape=box];
n220 -> n221;
n221 [label="CALL fac", shape=box, style=filled, color=orange];
n221 -> n191;
n221 -> n223;
n191 -> n226;
n226 [label="x", shape=box];
n226 -> n227;
n227 [label="1", shape=box];
n227 -> n228;
n228 [label="x == 1", shape=box];
n228 -> n229;
n229 [label="<?>", shape=diamond];
n229 -> n233 [label="T"];
n233 [label="1", shape=box];
n233 -> n192;
n229 -> n234 [label="F"];
n234 [label="x", shape=box];
n234 -> n235;
n235 [label="1", shape=box];
n235 -> n236;
n236 [label="x - 1", shape=box];
n236 -> n237;
n237 [label="CALL fac", shape=box, style=filled, color=orange];
n237 -> n191;
n237 -> n239;
n191 -> n242;
n242 [label="x", shape=box];
n242 -> n243;
n243 [label="1", shape=box];
n243 -> n244;
n244 [label="x == 1", shape=box];
n244 -> n245;
n245 [label="<?>", shape=diamond];
n245 -> n249 [label="T"];
n249 [label="1", shape=box];
n249 -> n192;
n245 -> n250 [label="F"];
n250 [label="x", shape=box];
n250 -> n251;
n251 [label="1", shape=box];
n251 -> n252;
n252 [label="x - 1", shape=box];
n252 -> n253;
n253 [label="CALL fac", shape=box, style=filled, color=orange];
n253 -> n191;
n253 -> n255;
n191 -> n258;
n258 [label="x", shape=box];
n258 -> n259;
n259 [label="1", shape=box];
n259 -> n260;
n260 [label="x == 1", shape=box];
n260 -> n261;
n261 [label="<?>", shape=diamond];
n261 -> n265 [label="T"];
n265 [label="1", shape=box];
n265 -> n192;
n261 -> n266 [label="F"];
n266 [label="x", shape=box];
n266 -> n267;
n267 [label="1", shape=box];
n267 -> n268;
n268 [label="x - 1", shape=box];
n268 -> n269;
n269 [label="CALL fac", shape=box, style=filled, color=orange];
n269 -> n191;
n269 -> n271;
n191 -> n274;
n274 [label="x", shape=box];
n274 -> n275;
n275 [label="1", shape=box];
n275 -> n276;
n276 [label="x == 1", shape=box];
n276 -> n277;
n277 [label="<?>", shape=diamond];
n277 -> n281 [label="T"];
n281 [label="1", shape=box];
n281 -> n192;
n277 -> n282 [label="F"];
n282 [label="x", shape=box];
n282 -> n283;
n283 [label="1", shape=box];
n283 -> n284;
n284 [label="x - 1", shape=box];
n284 -> n285;
n285 [label="CALL fac", shape=box, style=filled, color=orange];
n285 -> n191;
n285 -> n287;
n191 -> n290;
n290 [label="x", shape=box];
n290 -> n291;
n291 [label="1", shape=box];
n291 -> n292;
n292 [label="x == 1", shape=box];
n292 -> n293;
n293 [label="<?>", shape=diamond];
n293 -> n297 [label="T"];
n297 [label="1", shape=box];
n297 -> n192;
n293 -> n298 [label="F"];
n298 [label="x", shape=box];
n298 -> n299;
n299 [label="1", shape=box];
n299 -> n300;
n300 [label="x - 1", shape=box];
n300 -> n301;
n301 [label="CALL fac", shape=box, style=filled, color=orange];
n301 -> n191;
n301 -> n303;
n191 -> n306;
n306 [label="x", shape=box];
n306 -> n307;
n307 [label="1", shape=box];
n307 -> n308;
n308 [label="x == 1", shape=box];
n308 -> n309;
n309 [label="<?>", shape=diamond];
n309 -> n313 [label="T"];
n313 [label="1", shape=box];
n313 -> n192;
n309 -> n314 [label="F"];
n314 [label="x", shape=box];
n314 -> n315;
n315 [label="1", shape=box];
n315 -> n316;
n316 [label="x - 1", shape=box];
n316 -> n317;
n317 [label="CALL fac", shape=box, style=filled, color=orange];
n317 -> n191;
n317 -> n319;
n191 -> n322;
n322 [label="x", shape=box];
n322 -> n323;
n323 [label="1", shape=box];
n323 -> n324;
n324 [label="x == 1", shape=box];
n324 -> n325;
n325 [label="<?>", shape=diamond];
n325 -> n329 [label="T"];
n329 [label="1", shape=box];
n329 -> n192;
n325 -> n330 [label="F"];
n330 [label="x", shape=box];
n330 -> n331;
n331 [label="1", shape=box];
n331 -> n332;
n332 [label="x - 1", shape=box];
n332 -> n333;
n333 [label="CALL fac", shape=box, style=filled, color=orange];
n333 -> n191;
n333 -> n335;
n339 -> n341;
}

View File

@@ -1,6 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n356 [label="START", shape=box];
n356 -> n358;
n358 [label="0", shape=box];
}

View File

@@ -1,50 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n359 [label="START", shape=box];
n359 -> n382;
n382 [label="10", shape=box];
n382 -> n383;
n383 [label="8", shape=box];
n383 -> n384;
n384 [label="CALL func", shape=box, style=filled, color=orange];
n384 -> n361;
n361 [label="START func(a, b)", shape=box, style=filled, color=green];
n361 -> n364;
n364 [label="a", shape=box];
n364 -> n365;
n365 [label="0", shape=box];
n365 -> n366;
n366 [label="a > 0", shape=box];
n366 -> n367;
n367 [label="b", shape=box];
n367 -> n368;
n368 [label="a", shape=box];
n368 -> n369;
n369 [label="b != a", shape=box];
n369 -> n370;
n370 [label="(a > 0) && (b != a)", shape=box];
n370 -> n371;
n371 [label="<?>", shape=diamond];
n371 -> n362 [label="T"];
n362 [label="END func(a, b)", shape=box, style=filled, color=green];
n362 -> n386;
n386 [label="RET func", shape=box, style=filled, color=orange];
n371 -> n373 [label="F"];
n373 [label="b", shape=box];
n373 -> n374;
n374 [label="1", shape=box];
n374 -> n375;
n375 [label="b + 1", shape=box];
n375 -> n376;
n376 [label="b = (b + 1)", shape=box];
n376 -> n377;
n377 [label="a", shape=box];
n377 -> n378;
n378 [label="1", shape=box];
n378 -> n379;
n379 [label="a - 1", shape=box];
n379 -> n380;
n380 [label="a = (a - 1)", shape=box];
n380 -> n366;
n384 -> n386;
}

View File

@@ -1,16 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n388 [label="START", shape=box];
n388 -> n390;
n390 [label="1", shape=box];
n390 -> n391;
n391 [label="0", shape=box];
n391 -> n392;
n392 [label="1 >= 0", shape=box];
n392 -> n393;
n393 [label="<?>", shape=diamond];
n393 -> n397 [label="T"];
n397 [label="1", shape=box];
n393 -> n398 [label="F"];
n398 [label="0", shape=box];
}

View File

@@ -1,65 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n405 [label="START", shape=box];
n405 -> n439;
n439 [label="3528", shape=box];
n439 -> n440;
n440 [label="3780", shape=box];
n440 -> n441;
n441 [label="CALL ggT", shape=box, style=filled, color=orange];
n441 -> n407;
n407 [label="START ggT(a, b)", shape=box, style=filled, color=green];
n407 -> n410;
n410 [label="a", shape=box];
n410 -> n411;
n411 [label="b", shape=box];
n411 -> n412;
n412 [label="a == b", shape=box];
n412 -> n413;
n413 [label="<?>", shape=diamond];
n413 -> n417 [label="T"];
n417 [label="a", shape=box];
n417 -> n408;
n408 [label="END ggT(a, b)", shape=box, style=filled, color=green];
n408 -> n431;
n431 [label="RET ggT", shape=box, style=filled, color=orange];
n431 -> n408;
n408 -> n438;
n438 [label="RET ggT", shape=box, style=filled, color=orange];
n438 -> n408;
n408 -> n443;
n443 [label="RET ggT", shape=box, style=filled, color=orange];
n413 -> n418 [label="F"];
n418 [label="a", shape=box];
n418 -> n419;
n419 [label="b", shape=box];
n419 -> n420;
n420 [label="a > b", shape=box];
n420 -> n421;
n421 [label="<?>", shape=diamond];
n421 -> n425 [label="T"];
n425 [label="a", shape=box];
n425 -> n426;
n426 [label="b", shape=box];
n426 -> n427;
n427 [label="a - b", shape=box];
n427 -> n428;
n428 [label="b", shape=box];
n428 -> n429;
n429 [label="CALL ggT", shape=box, style=filled, color=orange];
n429 -> n407;
n429 -> n431;
n421 -> n432 [label="F"];
n432 [label="b", shape=box];
n432 -> n433;
n433 [label="a", shape=box];
n433 -> n434;
n434 [label="b - a", shape=box];
n434 -> n435;
n435 [label="a", shape=box];
n435 -> n436;
n436 [label="CALL ggT", shape=box, style=filled, color=orange];
n436 -> n407;
n436 -> n438;
n441 -> n443;
}

View File

@@ -1,109 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n445 [label="START", shape=box];
n445 -> n499;
n499 [label="1", shape=box];
n499 -> n500;
n500 [label="2", shape=box];
n500 -> n501;
n501 [label="CALL f", shape=box, style=filled, color=orange];
n501 -> n447;
n447 [label="START f(x, y)", shape=box, style=filled, color=green];
n447 -> n452;
n452 [label="x", shape=box];
n452 -> n453;
n453 [label="0", shape=box];
n453 -> n454;
n454 [label="x == 0", shape=box];
n454 -> n455;
n455 [label="<?>", shape=diamond];
n455 -> n467 [label="T"];
n467 [label="2", shape=box];
n467 -> n468;
n468 [label="y", shape=box];
n468 -> n469;
n469 [label="2 * y", shape=box];
n469 -> n470;
n470 [label="x", shape=box];
n470 -> n471;
n471 [label="CALL g", shape=box, style=filled, color=orange];
n471 -> n459;
n459 [label="START g(x, z)", shape=box, style=filled, color=green];
n459 -> n462;
n462 [label="x", shape=box];
n462 -> n463;
n463 [label="y", shape=box];
n463 -> n464;
n464 [label="x * y", shape=box];
n464 -> n465;
n465 [label="z", shape=box];
n465 -> n466;
n466 [label="(x * y) + z", shape=box];
n466 -> n460;
n460 [label="END g(x, z)", shape=box, style=filled, color=green];
n460 -> n473;
n473 [label="RET g", shape=box, style=filled, color=orange];
n473 -> n448;
n448 [label="END f(x, y)", shape=box, style=filled, color=green];
n448 -> n488;
n488 [label="RET f", shape=box, style=filled, color=orange];
n488 -> n489;
n489 [label="a * f(a,i)", shape=box];
n489 -> n490;
n490 [label="a = (a * f(a,i))", shape=box];
n490 -> n491;
n491 [label="i", shape=box];
n491 -> n492;
n492 [label="1", shape=box];
n492 -> n493;
n493 [label="i - 1", shape=box];
n493 -> n494;
n494 [label="i = (i - 1)", shape=box];
n494 -> n478;
n478 [label="i", shape=box];
n478 -> n479;
n479 [label="0", shape=box];
n479 -> n480;
n480 [label="i > 0", shape=box];
n480 -> n481;
n481 [label="<?>", shape=diamond];
n481 -> n483 [label="T"];
n483 [label="a", shape=box];
n483 -> n484;
n484 [label="a", shape=box];
n484 -> n485;
n485 [label="i", shape=box];
n485 -> n486;
n486 [label="CALL f", shape=box, style=filled, color=orange];
n486 -> n447;
n486 -> n488;
n481 -> n496 [label="F"];
n496 [label="a", shape=box];
n496 -> n497;
n497 [label="42", shape=box];
n497 -> n498;
n498 [label="a + 42", shape=box];
n498 -> n460;
n448 -> n503;
n503 [label="RET f", shape=box, style=filled, color=orange];
n503 -> n505;
n505 [label="3", shape=box];
n505 -> n506;
n506 [label="3", shape=box];
n506 -> n507;
n507 [label="CALL g", shape=box, style=filled, color=orange];
n507 -> n459;
n507 -> n509;
n509 [label="RET g", shape=box, style=filled, color=orange];
n460 -> n509;
n459 -> n478;
n471 -> n473;
n455 -> n475 [label="F"];
n475 [label="x", shape=box];
n475 -> n476;
n476 [label="1", shape=box];
n476 -> n477;
n477 [label="x + 1", shape=box];
n477 -> n448;
n501 -> n503;
}

View File

@@ -1,34 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n512 [label="START", shape=box];
n512 -> n518;
n518 [label="5", shape=box];
n518 -> n519;
n519 [label="CALL m", shape=box, style=filled, color=orange];
n519 -> n514;
n514 [label="START m(a)", shape=box, style=filled, color=green];
n514 -> n517;
n517 [label="a", shape=box];
n517 -> n515;
n515 [label="END m(a)", shape=box, style=filled, color=green];
n515 -> n521;
n521 [label="RET m", shape=box, style=filled, color=orange];
n521 -> n529;
n529 [label="5", shape=box];
n529 -> n530;
n530 [label="CALL m", shape=box, style=filled, color=orange];
n530 -> n523;
n523 [label="START m(b)", shape=box, style=filled, color=green];
n523 -> n526;
n526 [label="b", shape=box];
n526 -> n527;
n527 [label="1", shape=box];
n527 -> n528;
n528 [label="b + 1", shape=box];
n528 -> n524;
n524 [label="END m(b)", shape=box, style=filled, color=green];
n524 -> n532;
n532 [label="RET m", shape=box, style=filled, color=orange];
n530 -> n532;
n519 -> n521;
}

View File

@@ -1,44 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n534 [label="START", shape=box];
n534 -> n540;
n540 [label="5", shape=box];
n540 -> n541;
n541 [label="CALL n", shape=box, style=filled, color=orange];
n541 -> n536;
n536 [label="START n(a)", shape=box, style=filled, color=green];
n536 -> n539;
n539 [label="a", shape=box];
n539 -> n537;
n537 [label="END n(a)", shape=box, style=filled, color=green];
n537 -> n543;
n543 [label="RET n", shape=box, style=filled, color=orange];
n543 -> n551;
n551 [label="5", shape=box];
n551 -> n552;
n552 [label="CALL n", shape=box, style=filled, color=orange];
n552 -> n536;
n552 -> n554;
n554 [label="RET n", shape=box, style=filled, color=orange];
n554 -> n555;
n555 [label="5", shape=box];
n555 -> n556;
n556 [label="CALL m", shape=box, style=filled, color=orange];
n556 -> n545;
n545 [label="START m(a)", shape=box, style=filled, color=green];
n545 -> n548;
n548 [label="a", shape=box];
n548 -> n549;
n549 [label="1", shape=box];
n549 -> n550;
n550 [label="a + 1", shape=box];
n550 -> n546;
n546 [label="END m(a)", shape=box, style=filled, color=green];
n546 -> n558;
n558 [label="RET m", shape=box, style=filled, color=orange];
n558 -> n559;
n559 [label="n(5) + m(5)", shape=box];
n556 -> n558;
n537 -> n554;
n541 -> n543;
}

View File

@@ -1,20 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n561 [label="START", shape=box];
n561 -> n563;
n563 [label="True", shape=box];
n563 -> n564;
n564 [label="True", shape=box];
n564 -> n565;
n565 [label="True", shape=box];
n565 -> n566;
n566 [label="True == True", shape=box];
n566 -> n567;
n567 [label="True || (True == True)", shape=box];
n567 -> n568;
n568 [label="<?>", shape=diamond];
n568 -> n572 [label="T"];
n572 [label="1", shape=box];
n568 -> n573 [label="F"];
n573 [label="0", shape=box];
}

View File

@@ -1,21 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n574 [label="START", shape=box];
n574 -> n582;
n582 [label="5", shape=box];
n582 -> n583;
n583 [label="CALL g", shape=box, style=filled, color=orange];
n583 -> n576;
n576 [label="START g(a)", shape=box, style=filled, color=green];
n576 -> n579;
n579 [label="a", shape=box];
n579 -> n580;
n580 [label="a", shape=box];
n580 -> n581;
n581 [label="a * a", shape=box];
n581 -> n577;
n577 [label="END g(a)", shape=box, style=filled, color=green];
n577 -> n585;
n585 [label="RET g", shape=box, style=filled, color=orange];
n583 -> n585;
}

View File

@@ -1,38 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n587 [label="START", shape=box];
n587 -> n606;
n606 [label="10", shape=box];
n606 -> n607;
n607 [label="CALL f1", shape=box, style=filled, color=orange];
n607 -> n589;
n589 [label="START f1(b)", shape=box, style=filled, color=green];
n589 -> n592;
n592 [label="b", shape=box];
n592 -> n593;
n593 [label="0", shape=box];
n593 -> n594;
n594 [label="b == 0", shape=box];
n594 -> n595;
n595 [label="<?>", shape=diamond];
n595 -> n599 [label="T"];
n599 [label="0", shape=box];
n599 -> n590;
n590 [label="END f1(b)", shape=box, style=filled, color=green];
n590 -> n605;
n605 [label="RET f1", shape=box, style=filled, color=orange];
n605 -> n590;
n590 -> n609;
n609 [label="RET f1", shape=box, style=filled, color=orange];
n595 -> n600 [label="F"];
n600 [label="b", shape=box];
n600 -> n601;
n601 [label="1", shape=box];
n601 -> n602;
n602 [label="b - 1", shape=box];
n602 -> n603;
n603 [label="CALL f1", shape=box, style=filled, color=orange];
n603 -> n589;
n603 -> n605;
n607 -> n609;
}

View File

@@ -1,125 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n611 [label="START", shape=box];
n611 -> n662;
n662 [label="10", shape=box];
n662 -> n663;
n663 [label="CALL f1", shape=box, style=filled, color=orange];
n663 -> n613;
n613 [label="START f1(b)", shape=box, style=filled, color=green];
n613 -> n618;
n618 [label="b", shape=box];
n618 -> n619;
n619 [label="0", shape=box];
n619 -> n620;
n620 [label="b == 0", shape=box];
n620 -> n621;
n621 [label="<?>", shape=diamond];
n621 -> n625 [label="T"];
n625 [label="0", shape=box];
n625 -> n614;
n614 [label="END f1(b)", shape=box, style=filled, color=green];
n614 -> n631;
n631 [label="RET f1", shape=box, style=filled, color=orange];
n631 -> n614;
n614 -> n642;
n642 [label="RET f1", shape=box, style=filled, color=orange];
n642 -> n655;
n655 [label="a", shape=box];
n655 -> n656;
n656 [label="b", shape=box];
n656 -> n657;
n657 [label="a * b", shape=box];
n657 -> n658;
n658 [label="CALL g", shape=box, style=filled, color=orange];
n658 -> n647;
n647 [label="START g(c)", shape=box, style=filled, color=green];
n647 -> n650;
n650 [label="a", shape=box];
n650 -> n651;
n651 [label="b", shape=box];
n651 -> n652;
n652 [label="a * b", shape=box];
n652 -> n653;
n653 [label="c", shape=box];
n653 -> n654;
n654 [label="(a * b) * c", shape=box];
n654 -> n648;
n648 [label="END g(c)", shape=box, style=filled, color=green];
n648 -> n660;
n660 [label="RET g", shape=box, style=filled, color=orange];
n660 -> n616;
n616 [label="END f2(a, b)", shape=box, style=filled, color=green];
n616 -> n688;
n688 [label="RET f2", shape=box, style=filled, color=orange];
n658 -> n660;
n614 -> n646;
n646 [label="RET f1", shape=box, style=filled, color=orange];
n646 -> n655;
n614 -> n665;
n665 [label="RET f1", shape=box, style=filled, color=orange];
n665 -> n667;
n667 [label="10", shape=box];
n667 -> n680;
n680 [label="20", shape=box];
n680 -> n681;
n681 [label="30", shape=box];
n681 -> n682;
n682 [label="CALL max", shape=box, style=filled, color=orange];
n682 -> n668;
n668 [label="START max(a, b)", shape=box, style=filled, color=green];
n668 -> n671;
n671 [label="a", shape=box];
n671 -> n672;
n672 [label="b", shape=box];
n672 -> n673;
n673 [label="a > b", shape=box];
n673 -> n674;
n674 [label="<?>", shape=diamond];
n674 -> n678 [label="T"];
n678 [label="a", shape=box];
n678 -> n669;
n669 [label="END max(a, b)", shape=box, style=filled, color=green];
n669 -> n684;
n684 [label="RET max", shape=box, style=filled, color=orange];
n684 -> n686;
n686 [label="CALL f2", shape=box, style=filled, color=orange];
n686 -> n615;
n615 [label="START f2(a, b)", shape=box, style=filled, color=green];
n615 -> n632;
n632 [label="a", shape=box];
n632 -> n633;
n633 [label="b", shape=box];
n633 -> n634;
n634 [label="a > b", shape=box];
n634 -> n635;
n635 [label="<?>", shape=diamond];
n635 -> n639 [label="T"];
n639 [label="a", shape=box];
n639 -> n640;
n640 [label="CALL f1", shape=box, style=filled, color=orange];
n640 -> n613;
n640 -> n642;
n635 -> n643 [label="F"];
n643 [label="b", shape=box];
n643 -> n644;
n644 [label="CALL f1", shape=box, style=filled, color=orange];
n644 -> n613;
n644 -> n646;
n686 -> n688;
n674 -> n679 [label="F"];
n679 [label="b", shape=box];
n679 -> n669;
n682 -> n684;
n621 -> n626 [label="F"];
n626 [label="b", shape=box];
n626 -> n627;
n627 [label="1", shape=box];
n627 -> n628;
n628 [label="b - 1", shape=box];
n628 -> n629;
n629 [label="CALL f1", shape=box, style=filled, color=orange];
n629 -> n613;
n629 -> n631;
n663 -> n665;
}

View File

@@ -1,25 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n689 [label="START", shape=box];
n689 -> n698;
n698 [label="10", shape=box];
n698 -> n699;
n699 [label="8", shape=box];
n699 -> n700;
n700 [label="CALL func", shape=box, style=filled, color=orange];
n700 -> n691;
n691 [label="START func(a, b)", shape=box, style=filled, color=green];
n691 -> n694;
n694 [label="b", shape=box];
n694 -> n695;
n695 [label="1", shape=box];
n695 -> n696;
n696 [label="b + 1", shape=box];
n696 -> n697;
n697 [label="a = (b + 1)", shape=box];
n697 -> n692;
n692 [label="END func(a, b)", shape=box, style=filled, color=green];
n692 -> n702;
n702 [label="RET func", shape=box, style=filled, color=orange];
n700 -> n702;
}

View File

@@ -1,103 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n710 [label="START", shape=box];
n710 -> n762;
n762 [label="2", shape=box];
n762 -> n763;
n763 [label="3", shape=box];
n763 -> n764;
n764 [label="CALL f", shape=box, style=filled, color=orange];
n764 -> n712;
n712 [label="START f(a, b)", shape=box, style=filled, color=green];
n712 -> n717;
n717 [label="a", shape=box];
n717 -> n718;
n718 [label="0", shape=box];
n718 -> n719;
n719 [label="a == 0", shape=box];
n719 -> n720;
n720 [label="<?>", shape=diamond];
n720 -> n724 [label="T"];
n724 [label="2", shape=box];
n724 -> n725;
n725 [label="b", shape=box];
n725 -> n726;
n726 [label="2 + b", shape=box];
n726 -> n713;
n713 [label="END f(a, b)", shape=box, style=filled, color=green];
n713 -> n760;
n760 [label="RET f", shape=box, style=filled, color=orange];
n760 -> n761;
n761 [label="c * f((c - 1),d)", shape=box];
n761 -> n728;
n728 [label="END g(a, c)", shape=box, style=filled, color=green];
n728 -> n740;
n740 [label="RET g", shape=box, style=filled, color=orange];
n740 -> n741;
n741 [label="2 + g(a,b)", shape=box];
n741 -> n713;
n728 -> n772;
n772 [label="RET g", shape=box, style=filled, color=orange];
n713 -> n766;
n766 [label="RET f", shape=box, style=filled, color=orange];
n766 -> n768;
n768 [label="3", shape=box];
n768 -> n769;
n769 [label="2", shape=box];
n769 -> n770;
n770 [label="CALL g", shape=box, style=filled, color=orange];
n770 -> n727;
n727 [label="START g(a, c)", shape=box, style=filled, color=green];
n727 -> n730;
n730 [label="a", shape=box];
n730 -> n731;
n731 [label="c", shape=box];
n731 -> n732;
n732 [label="a + c", shape=box];
n732 -> n733;
n733 [label="b", shape=box];
n733 -> n734;
n734 [label="(a + c) + b", shape=box];
n734 -> n728;
n727 -> n743;
n743 [label="c", shape=box];
n743 -> n744;
n744 [label="0", shape=box];
n744 -> n745;
n745 [label="c == 0", shape=box];
n745 -> n746;
n746 [label="<?>", shape=diamond];
n746 -> n750 [label="T"];
n750 [label="1", shape=box];
n750 -> n751;
n751 [label="d", shape=box];
n751 -> n752;
n752 [label="1 + d", shape=box];
n752 -> n728;
n746 -> n753 [label="F"];
n753 [label="c", shape=box];
n753 -> n754;
n754 [label="c", shape=box];
n754 -> n755;
n755 [label="1", shape=box];
n755 -> n756;
n756 [label="c - 1", shape=box];
n756 -> n757;
n757 [label="d", shape=box];
n757 -> n758;
n758 [label="CALL f", shape=box, style=filled, color=orange];
n758 -> n712;
n758 -> n760;
n770 -> n772;
n720 -> n735 [label="F"];
n735 [label="2", shape=box];
n735 -> n736;
n736 [label="a", shape=box];
n736 -> n737;
n737 [label="b", shape=box];
n737 -> n738;
n738 [label="CALL g", shape=box, style=filled, color=orange];
n738 -> n727;
n738 -> n740;
n764 -> n766;
}

View File

@@ -1,40 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n773 [label="START", shape=box];
n773 -> n792;
n792 [label="1", shape=box];
n792 -> n793;
n793 [label="2", shape=box];
n793 -> n794;
n794 [label="CALL f", shape=box, style=filled, color=orange];
n794 -> n775;
n775 [label="START f(x, y)", shape=box, style=filled, color=green];
n775 -> n785;
n785 [label="5", shape=box];
n785 -> n786;
n786 [label="CALL g", shape=box, style=filled, color=orange];
n786 -> n778;
n778 [label="START g(x)", shape=box, style=filled, color=green];
n778 -> n781;
n781 [label="x", shape=box];
n781 -> n782;
n782 [label="7", shape=box];
n782 -> n783;
n783 [label="x + 7", shape=box];
n783 -> n784;
n784 [label="y = (x + 7)", shape=box];
n784 -> n779;
n779 [label="END g(x)", shape=box, style=filled, color=green];
n779 -> n788;
n788 [label="RET g", shape=box, style=filled, color=orange];
n788 -> n789;
n789 [label="x = g(5)", shape=box];
n789 -> n791;
n791 [label="y", shape=box];
n791 -> n776;
n776 [label="END f(x, y)", shape=box, style=filled, color=green];
n776 -> n796;
n796 [label="RET f", shape=box, style=filled, color=orange];
n786 -> n788;
n794 -> n796;
}

View File

@@ -1,59 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n798 [label="START", shape=box];
n798 -> n829;
n829 [label="3", shape=box];
n829 -> n830;
n830 [label="CALL f", shape=box, style=filled, color=orange];
n830 -> n800;
n800 [label="START f(x)", shape=box, style=filled, color=green];
n800 -> n803;
n803 [label="2", shape=box];
n803 -> n804;
n804 [label="x", shape=box];
n804 -> n805;
n805 [label="2 * x", shape=box];
n805 -> n806;
n806 [label="x = (2 * x)", shape=box];
n806 -> n807;
n807 [label="x", shape=box];
n807 -> n808;
n808 [label="0", shape=box];
n808 -> n809;
n809 [label="x > 0", shape=box];
n809 -> n810;
n810 [label="<?>", shape=diamond];
n810 -> n814 [label="T"];
n814 [label="x", shape=box];
n814 -> n815;
n815 [label="1", shape=box];
n815 -> n816;
n816 [label="x - 1", shape=box];
n816 -> n817;
n817 [label="x = (x - 1)", shape=box];
n817 -> n819;
n819 [label="x", shape=box];
n819 -> n820;
n820 [label="0", shape=box];
n820 -> n821;
n821 [label="x > 0", shape=box];
n821 -> n822;
n822 [label="<?>", shape=diamond];
n822 -> n801 [label="T"];
n801 [label="END f(x)", shape=box, style=filled, color=green];
n801 -> n832;
n832 [label="RET f", shape=box, style=filled, color=orange];
n822 -> n824 [label="F"];
n824 [label="x", shape=box];
n824 -> n825;
n825 [label="1", shape=box];
n825 -> n826;
n826 [label="x - 1", shape=box];
n826 -> n827;
n827 [label="x = (x - 1)", shape=box];
n827 -> n819;
n810 -> n818 [label="F"];
n818 [label="x", shape=box];
n818 -> n819;
n830 -> n832;
}

View File

@@ -1,21 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n834 [label="START", shape=box];
n834 -> n842;
n842 [label="2", shape=box];
n842 -> n843;
n843 [label="CALL g", shape=box, style=filled, color=orange];
n843 -> n836;
n836 [label="START g(x, y)", shape=box, style=filled, color=green];
n836 -> n839;
n839 [label="3", shape=box];
n839 -> n840;
n840 [label="y = 3", shape=box];
n840 -> n841;
n841 [label="x", shape=box];
n841 -> n837;
n837 [label="END g(x, y)", shape=box, style=filled, color=green];
n837 -> n845;
n845 [label="RET g", shape=box, style=filled, color=orange];
n843 -> n845;
}

View File

@@ -1,16 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n856 [label="START", shape=box];
n856 -> n858;
n858 [label="True", shape=box];
n858 -> n859;
n859 [label="False", shape=box];
n859 -> n860;
n860 [label="True && False", shape=box];
n860 -> n861;
n861 [label="<?>", shape=diamond];
n861 -> n865 [label="T"];
n865 [label="1", shape=box];
n861 -> n866 [label="F"];
n866 [label="0", shape=box];
}

View File

@@ -1,16 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n867 [label="START", shape=box];
n867 -> n869;
n869 [label="True", shape=box];
n869 -> n870;
n870 [label="False", shape=box];
n870 -> n871;
n871 [label="True || False", shape=box];
n871 -> n872;
n872 [label="<?>", shape=diamond];
n872 -> n876 [label="T"];
n876 [label="1", shape=box];
n872 -> n877 [label="F"];
n877 [label="0", shape=box];
}

View File

@@ -1,16 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n878 [label="START", shape=box];
n878 -> n880;
n880 [label="1", shape=box];
n880 -> n881;
n881 [label="2", shape=box];
n881 -> n882;
n882 [label="1 > 2", shape=box];
n882 -> n883;
n883 [label="<?>", shape=diamond];
n883 -> n887 [label="T"];
n887 [label="1", shape=box];
n883 -> n888 [label="F"];
n888 [label="0", shape=box];
}

View File

@@ -1,20 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n889 [label="START", shape=box];
n889 -> n891;
n891 [label="2", shape=box];
n891 -> n892;
n892 [label="3", shape=box];
n892 -> n893;
n893 [label="5", shape=box];
n893 -> n894;
n894 [label="3 + 5", shape=box];
n894 -> n895;
n895 [label="2 > (3 + 5)", shape=box];
n895 -> n896;
n896 [label="<?>", shape=diamond];
n896 -> n900 [label="T"];
n900 [label="1", shape=box];
n896 -> n901 [label="F"];
n901 [label="0", shape=box];
}

View File

@@ -1,24 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n902 [label="START", shape=box];
n902 -> n904;
n904 [label="1", shape=box];
n904 -> n905;
n905 [label="2", shape=box];
n905 -> n906;
n906 [label="1 > 2", shape=box];
n906 -> n907;
n907 [label="3", shape=box];
n907 -> n908;
n908 [label="5", shape=box];
n908 -> n909;
n909 [label="3 < 5", shape=box];
n909 -> n910;
n910 [label="(1 > 2) || (3 < 5)", shape=box];
n910 -> n911;
n911 [label="<?>", shape=diamond];
n911 -> n915 [label="T"];
n915 [label="1", shape=box];
n911 -> n916 [label="F"];
n916 [label="0", shape=box];
}

View File

@@ -1,20 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n917 [label="START", shape=box];
n917 -> n919;
n919 [label="2", shape=box];
n919 -> n920;
n920 [label="0", shape=box];
n920 -> n921;
n921 [label="2 == 0", shape=box];
n921 -> n922;
n922 [label="False", shape=box];
n922 -> n923;
n923 [label="(2 == 0) == False", shape=box];
n923 -> n924;
n924 [label="<?>", shape=diamond];
n924 -> n928 [label="T"];
n928 [label="1", shape=box];
n924 -> n929 [label="F"];
n929 [label="0", shape=box];
}

View File

@@ -1,12 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n847 [label="START", shape=box];
n847 -> n849;
n849 [label="True", shape=box];
n849 -> n850;
n850 [label="<?>", shape=diamond];
n850 -> n854 [label="T"];
n854 [label="1", shape=box];
n850 -> n855 [label="F"];
n855 [label="0", shape=box];
}

View File

@@ -1,21 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n930 [label="START", shape=box];
n930 -> n938;
n938 [label="10", shape=box];
n938 -> n939;
n939 [label="CALL square", shape=box, style=filled, color=orange];
n939 -> n932;
n932 [label="START square(x)", shape=box, style=filled, color=green];
n932 -> n935;
n935 [label="x", shape=box];
n935 -> n936;
n936 [label="x", shape=box];
n936 -> n937;
n937 [label="x * x", shape=box];
n937 -> n933;
n933 [label="END square(x)", shape=box, style=filled, color=green];
n933 -> n941;
n941 [label="RET square", shape=box, style=filled, color=orange];
n939 -> n941;
}

View File

@@ -1,92 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n943 [label="START", shape=box];
n943 -> n983;
n983 [label="2", shape=box];
n983 -> n984;
n984 [label="3", shape=box];
n984 -> n985;
n985 [label="CALL mult", shape=box, style=filled, color=orange];
n985 -> n945;
n945 [label="START mult(a, b)", shape=box, style=filled, color=green];
n945 -> n950;
n950 [label="a", shape=box];
n950 -> n951;
n951 [label="b", shape=box];
n951 -> n952;
n952 [label="a * b", shape=box];
n952 -> n946;
n946 [label="END mult(a, b)", shape=box, style=filled, color=green];
n946 -> n977;
n977 [label="RET mult", shape=box, style=filled, color=orange];
n977 -> n954;
n954 [label="END inc(a)", shape=box, style=filled, color=green];
n954 -> n972;
n972 [label="RET inc", shape=box, style=filled, color=orange];
n972 -> n954;
n954 -> n981;
n981 [label="RET inc", shape=box, style=filled, color=orange];
n981 -> n948;
n948 [label="END add(a, b)", shape=box, style=filled, color=green];
n948 -> n992;
n992 [label="RET add", shape=box, style=filled, color=orange];
n992 -> n993;
n993 [label="CALL add", shape=box, style=filled, color=orange];
n993 -> n947;
n947 [label="START add(a, b)", shape=box, style=filled, color=green];
n947 -> n978;
n978 [label="a", shape=box];
n978 -> n979;
n979 [label="CALL inc", shape=box, style=filled, color=orange];
n979 -> n953;
n953 [label="START inc(a)", shape=box, style=filled, color=green];
n953 -> n956;
n956 [label="b", shape=box];
n956 -> n957;
n957 [label="0", shape=box];
n957 -> n958;
n958 [label="b != 0", shape=box];
n958 -> n959;
n959 [label="<?>", shape=diamond];
n959 -> n963 [label="T"];
n963 [label="b", shape=box];
n963 -> n964;
n964 [label="1", shape=box];
n964 -> n965;
n965 [label="b - 1", shape=box];
n965 -> n966;
n966 [label="b = (b - 1)", shape=box];
n966 -> n967;
n967 [label="a", shape=box];
n967 -> n968;
n968 [label="1", shape=box];
n968 -> n969;
n969 [label="a + 1", shape=box];
n969 -> n970;
n970 [label="CALL inc", shape=box, style=filled, color=orange];
n970 -> n953;
n970 -> n972;
n959 -> n973 [label="F"];
n973 [label="a", shape=box];
n973 -> n974;
n974 [label="1", shape=box];
n974 -> n975;
n975 [label="CALL mult", shape=box, style=filled, color=orange];
n975 -> n945;
n975 -> n977;
n979 -> n981;
n993 -> n995;
n995 [label="RET add", shape=box, style=filled, color=orange];
n948 -> n995;
n946 -> n987;
n987 [label="RET mult", shape=box, style=filled, color=orange];
n987 -> n988;
n988 [label="4", shape=box];
n988 -> n989;
n989 [label="5", shape=box];
n989 -> n990;
n990 [label="CALL add", shape=box, style=filled, color=orange];
n990 -> n947;
n990 -> n992;
n985 -> n987;
}

View File

@@ -1,11 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n1026 [label="START", shape=box];
n1026 -> n1028;
n1028 [label="True", shape=box];
n1028 -> n1029;
n1029 [label="<?>", shape=diamond];
n1029 -> n1031 [label="T"];
n1031 [label="3", shape=box];
n1031 -> n1026;
}

View File

@@ -1,50 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n997 [label="START", shape=box];
n997 -> n1020;
n1020 [label="10", shape=box];
n1020 -> n1021;
n1021 [label="8", shape=box];
n1021 -> n1022;
n1022 [label="CALL func", shape=box, style=filled, color=orange];
n1022 -> n999;
n999 [label="START func(a, b)", shape=box, style=filled, color=green];
n999 -> n1002;
n1002 [label="a", shape=box];
n1002 -> n1003;
n1003 [label="0", shape=box];
n1003 -> n1004;
n1004 [label="a > 0", shape=box];
n1004 -> n1005;
n1005 [label="b", shape=box];
n1005 -> n1006;
n1006 [label="a", shape=box];
n1006 -> n1007;
n1007 [label="b != a", shape=box];
n1007 -> n1008;
n1008 [label="(a > 0) && (b != a)", shape=box];
n1008 -> n1009;
n1009 [label="<?>", shape=diamond];
n1009 -> n1000 [label="T"];
n1000 [label="END func(a, b)", shape=box, style=filled, color=green];
n1000 -> n1024;
n1024 [label="RET func", shape=box, style=filled, color=orange];
n1009 -> n1011 [label="F"];
n1011 [label="b", shape=box];
n1011 -> n1012;
n1012 [label="1", shape=box];
n1012 -> n1013;
n1013 [label="b + 1", shape=box];
n1013 -> n1014;
n1014 [label="b = (b + 1)", shape=box];
n1014 -> n1015;
n1015 [label="a", shape=box];
n1015 -> n1016;
n1016 [label="1", shape=box];
n1016 -> n1017;
n1017 [label="a - 1", shape=box];
n1017 -> n1018;
n1018 [label="a = (a - 1)", shape=box];
n1018 -> n1004;
n1022 -> n1024;
}

View File

@@ -1,76 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n1033 [label="START", shape=box];
n1033 -> n1075;
n1075 [label="21", shape=box];
n1075 -> n1076;
n1076 [label="49", shape=box];
n1076 -> n1077;
n1077 [label="CALL wrapper", shape=box, style=filled, color=orange];
n1077 -> n1035;
n1035 [label="START wrapper(a, b)", shape=box, style=filled, color=green];
n1035 -> n1070;
n1070 [label="0", shape=box];
n1070 -> n1071;
n1071 [label="CALL ggt", shape=box, style=filled, color=orange];
n1071 -> n1038;
n1038 [label="START ggt(noneSense)", shape=box, style=filled, color=green];
n1038 -> n1041;
n1041 [label="a", shape=box];
n1041 -> n1042;
n1042 [label="b", shape=box];
n1042 -> n1043;
n1043 [label="a == b", shape=box];
n1043 -> n1044;
n1044 [label="<?>", shape=diamond];
n1044 -> n1048 [label="T"];
n1048 [label="a", shape=box];
n1048 -> n1039;
n1039 [label="END ggt(noneSense)", shape=box, style=filled, color=green];
n1039 -> n1073;
n1073 [label="RET ggt", shape=box, style=filled, color=orange];
n1073 -> n1036;
n1036 [label="END wrapper(a, b)", shape=box, style=filled, color=green];
n1036 -> n1062;
n1062 [label="RET wrapper", shape=box, style=filled, color=orange];
n1062 -> n1039;
n1036 -> n1069;
n1069 [label="RET wrapper", shape=box, style=filled, color=orange];
n1069 -> n1039;
n1036 -> n1079;
n1079 [label="RET wrapper", shape=box, style=filled, color=orange];
n1044 -> n1049 [label="F"];
n1049 [label="a", shape=box];
n1049 -> n1050;
n1050 [label="b", shape=box];
n1050 -> n1051;
n1051 [label="a > b", shape=box];
n1051 -> n1052;
n1052 [label="<?>", shape=diamond];
n1052 -> n1056 [label="T"];
n1056 [label="a", shape=box];
n1056 -> n1057;
n1057 [label="b", shape=box];
n1057 -> n1058;
n1058 [label="a - b", shape=box];
n1058 -> n1059;
n1059 [label="b", shape=box];
n1059 -> n1060;
n1060 [label="CALL wrapper", shape=box, style=filled, color=orange];
n1060 -> n1035;
n1060 -> n1062;
n1052 -> n1063 [label="F"];
n1063 [label="b", shape=box];
n1063 -> n1064;
n1064 [label="a", shape=box];
n1064 -> n1065;
n1065 [label="b - a", shape=box];
n1065 -> n1066;
n1066 [label="a", shape=box];
n1066 -> n1067;
n1067 [label="CALL wrapper", shape=box, style=filled, color=orange];
n1067 -> n1035;
n1067 -> n1069;
n1071 -> n1073;
n1077 -> n1079;
}

View File

@@ -1,49 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n1081 [label="START", shape=box];
n1081 -> n1107;
n1107 [label="4", shape=box];
n1107 -> n1108;
n1108 [label="10", shape=box];
n1108 -> n1109;
n1109 [label="CALL wrapper", shape=box, style=filled, color=orange];
n1109 -> n1083;
n1083 [label="START wrapper(number, threshold)", shape=box, style=filled, color=green];
n1083 -> n1102;
n1102 [label="number", shape=box];
n1102 -> n1103;
n1103 [label="CALL square", shape=box, style=filled, color=orange];
n1103 -> n1086;
n1086 [label="START square(x)", shape=box, style=filled, color=green];
n1086 -> n1089;
n1089 [label="x", shape=box];
n1089 -> n1090;
n1090 [label="x", shape=box];
n1090 -> n1091;
n1091 [label="x * x", shape=box];
n1091 -> n1092;
n1092 [label="threshold", shape=box];
n1092 -> n1093;
n1093 [label="(x * x) > threshold", shape=box];
n1093 -> n1094;
n1094 [label="<?>", shape=diamond];
n1094 -> n1098 [label="T"];
n1098 [label="x", shape=box];
n1098 -> n1087;
n1087 [label="END square(x)", shape=box, style=filled, color=green];
n1087 -> n1105;
n1105 [label="RET square", shape=box, style=filled, color=orange];
n1105 -> n1084;
n1084 [label="END wrapper(number, threshold)", shape=box, style=filled, color=green];
n1084 -> n1111;
n1111 [label="RET wrapper", shape=box, style=filled, color=orange];
n1094 -> n1099 [label="F"];
n1099 [label="x", shape=box];
n1099 -> n1100;
n1100 [label="x", shape=box];
n1100 -> n1101;
n1101 [label="x * x", shape=box];
n1101 -> n1087;
n1103 -> n1105;
n1109 -> n1111;
}

View File

@@ -1,19 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n7 [label="1", shape=box];
n7 -> n8;
n8 [label="2", shape=box];
n8 -> n9;
n9 [label="3", shape=box];
n9 -> n10;
n10 [label="CALL a", shape=box, style=filled, color=orange];
n10 -> n3;
n3 [label="START a(x, y, z)", shape=box, style=filled, color=green];
n3 -> n6;
n6 [label="x", shape=box];
n6 -> n4;
n4 [label="END a(x, y, z)", shape=box, style=filled, color=green];
n4 -> n12;
n12 [label="RET a", shape=box, style=filled, color=orange];
n10 -> n12;
}

View File

@@ -1,123 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n65 [label="10", shape=box];
n65 -> n66;
n66 [label="CALL f1", shape=box, style=filled, color=orange];
n66 -> n16;
n16 [label="START f1(b)", shape=box, style=filled, color=green];
n16 -> n21;
n21 [label="b", shape=box];
n21 -> n22;
n22 [label="0", shape=box];
n22 -> n23;
n23 [label="b == 0", shape=box];
n23 -> n24;
n24 [label="<?>", shape=diamond];
n24 -> n28 [label="T"];
n28 [label="0", shape=box];
n28 -> n17;
n17 [label="END f1(b)", shape=box, style=filled, color=green];
n17 -> n34;
n34 [label="RET f1", shape=box, style=filled, color=orange];
n34 -> n17;
n17 -> n45;
n45 [label="RET f1", shape=box, style=filled, color=orange];
n45 -> n58;
n58 [label="a", shape=box];
n58 -> n59;
n59 [label="b", shape=box];
n59 -> n60;
n60 [label="a * b", shape=box];
n60 -> n61;
n61 [label="CALL g", shape=box, style=filled, color=orange];
n61 -> n50;
n50 [label="START g(c)", shape=box, style=filled, color=green];
n50 -> n53;
n53 [label="a", shape=box];
n53 -> n54;
n54 [label="b", shape=box];
n54 -> n55;
n55 [label="a * b", shape=box];
n55 -> n56;
n56 [label="c", shape=box];
n56 -> n57;
n57 [label="(a * b) * c", shape=box];
n57 -> n51;
n51 [label="END g(c)", shape=box, style=filled, color=green];
n51 -> n63;
n63 [label="RET g", shape=box, style=filled, color=orange];
n63 -> n19;
n19 [label="END f2(a, b)", shape=box, style=filled, color=green];
n19 -> n91;
n91 [label="RET f2", shape=box, style=filled, color=orange];
n61 -> n63;
n17 -> n49;
n49 [label="RET f1", shape=box, style=filled, color=orange];
n49 -> n58;
n17 -> n68;
n68 [label="RET f1", shape=box, style=filled, color=orange];
n68 -> n70;
n70 [label="10", shape=box];
n70 -> n83;
n83 [label="20", shape=box];
n83 -> n84;
n84 [label="30", shape=box];
n84 -> n85;
n85 [label="CALL max", shape=box, style=filled, color=orange];
n85 -> n71;
n71 [label="START max(a, b)", shape=box, style=filled, color=green];
n71 -> n74;
n74 [label="a", shape=box];
n74 -> n75;
n75 [label="b", shape=box];
n75 -> n76;
n76 [label="a > b", shape=box];
n76 -> n77;
n77 [label="<?>", shape=diamond];
n77 -> n81 [label="T"];
n81 [label="a", shape=box];
n81 -> n72;
n72 [label="END max(a, b)", shape=box, style=filled, color=green];
n72 -> n87;
n87 [label="RET max", shape=box, style=filled, color=orange];
n87 -> n89;
n89 [label="CALL f2", shape=box, style=filled, color=orange];
n89 -> n18;
n18 [label="START f2(a, b)", shape=box, style=filled, color=green];
n18 -> n35;
n35 [label="a", shape=box];
n35 -> n36;
n36 [label="b", shape=box];
n36 -> n37;
n37 [label="a > b", shape=box];
n37 -> n38;
n38 [label="<?>", shape=diamond];
n38 -> n42 [label="T"];
n42 [label="a", shape=box];
n42 -> n43;
n43 [label="CALL f1", shape=box, style=filled, color=orange];
n43 -> n16;
n43 -> n45;
n38 -> n46 [label="F"];
n46 [label="b", shape=box];
n46 -> n47;
n47 [label="CALL f1", shape=box, style=filled, color=orange];
n47 -> n16;
n47 -> n49;
n89 -> n91;
n77 -> n82 [label="F"];
n82 [label="b", shape=box];
n82 -> n72;
n85 -> n87;
n24 -> n29 [label="F"];
n29 [label="b", shape=box];
n29 -> n30;
n30 [label="1", shape=box];
n30 -> n31;
n31 [label="b - 1", shape=box];
n31 -> n32;
n32 [label="CALL f1", shape=box, style=filled, color=orange];
n32 -> n16;
n32 -> n34;
n66 -> n68;
}

View File

@@ -1,22 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n94 [label="2", shape=box];
n94 -> n95;
n95 [label="x", shape=box];
n95 -> n96;
n96 [label="2 < x", shape=box];
n96 -> n97;
n97 [label="x", shape=box];
n97 -> n98;
n98 [label="9", shape=box];
n98 -> n99;
n99 [label="x > 9", shape=box];
n99 -> n100;
n100 [label="(2 < x) && (x > 9)", shape=box];
n100 -> n101;
n101 [label="<?>", shape=diamond];
n101 -> n105 [label="T"];
n105 [label="1", shape=box];
n101 -> n106 [label="F"];
n106 [label="0", shape=box];
}

View File

@@ -1,41 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n119 [label="1", shape=box];
n119 -> n120;
n120 [label="CALL a", shape=box, style=filled, color=orange];
n120 -> n109;
n109 [label="START a(x)", shape=box, style=filled, color=green];
n109 -> n116;
n116 [label="x", shape=box];
n116 -> n110;
n110 [label="END a(x)", shape=box, style=filled, color=green];
n110 -> n122;
n122 [label="RET a", shape=box, style=filled, color=orange];
n122 -> n124;
n124 [label="2", shape=box];
n124 -> n125;
n125 [label="CALL b", shape=box, style=filled, color=orange];
n125 -> n111;
n111 [label="START b(y)", shape=box, style=filled, color=green];
n111 -> n117;
n117 [label="y", shape=box];
n117 -> n112;
n112 [label="END b(y)", shape=box, style=filled, color=green];
n112 -> n127;
n127 [label="RET b", shape=box, style=filled, color=orange];
n127 -> n128;
n128 [label="3", shape=box];
n128 -> n129;
n129 [label="CALL c", shape=box, style=filled, color=orange];
n129 -> n113;
n113 [label="START c(z)", shape=box, style=filled, color=green];
n113 -> n118;
n118 [label="z", shape=box];
n118 -> n114;
n114 [label="END c(z)", shape=box, style=filled, color=green];
n114 -> n131;
n131 [label="RET c", shape=box, style=filled, color=orange];
n129 -> n131;
n125 -> n127;
n120 -> n122;
}

View File

@@ -1,66 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n167 [label="2", shape=box];
n167 -> n168;
n168 [label="3", shape=box];
n168 -> n169;
n169 [label="CALL f", shape=box, style=filled, color=orange];
n169 -> n134;
n134 [label="START f(x, y, z)", shape=box, style=filled, color=green];
n134 -> n137;
n137 [label="2", shape=box];
n137 -> n138;
n138 [label="y = 2", shape=box];
n138 -> n139;
n139 [label="3", shape=box];
n139 -> n140;
n140 [label="z = 3", shape=box];
n140 -> n160;
n160 [label="x", shape=box];
n160 -> n161;
n161 [label="CALL g", shape=box, style=filled, color=orange];
n161 -> n141;
n141 [label="START g(x)", shape=box, style=filled, color=green];
n141 -> n144;
n144 [label="7", shape=box];
n144 -> n145;
n145 [label="x = 7", shape=box];
n145 -> n146;
n146 [label="y", shape=box];
n146 -> n147;
n147 [label="0", shape=box];
n147 -> n148;
n148 [label="y > 0", shape=box];
n148 -> n149;
n149 [label="<?>", shape=diamond];
n149 -> n153 [label="T"];
n153 [label="y", shape=box];
n153 -> n154;
n154 [label="CALL g", shape=box, style=filled, color=orange];
n154 -> n141;
n154 -> n156;
n156 [label="RET g", shape=box, style=filled, color=orange];
n156 -> n159;
n159 [label="x", shape=box];
n159 -> n142;
n142 [label="END g(x)", shape=box, style=filled, color=green];
n142 -> n156;
n142 -> n163;
n163 [label="RET g", shape=box, style=filled, color=orange];
n163 -> n164;
n164 [label="x", shape=box];
n164 -> n165;
n165 [label="g(x) + x", shape=box];
n165 -> n135;
n135 [label="END f(x, y, z)", shape=box, style=filled, color=green];
n135 -> n171;
n171 [label="RET f", shape=box, style=filled, color=orange];
n165 -> n135;
n149 -> n157 [label="F"];
n157 [label="8", shape=box];
n157 -> n158;
n158 [label="x = 8", shape=box];
n158 -> n159;
n161 -> n163;
n169 -> n171;
}

View File

@@ -1,264 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n338 [label="3", shape=box];
n338 -> n339;
n339 [label="CALL fac", shape=box, style=filled, color=orange];
n339 -> n191;
n191 [label="START fac(x)", shape=box, style=filled, color=green];
n191 -> n194;
n194 [label="x", shape=box];
n194 -> n195;
n195 [label="1", shape=box];
n195 -> n196;
n196 [label="x == 1", shape=box];
n196 -> n197;
n197 [label="<?>", shape=diamond];
n197 -> n201 [label="T"];
n201 [label="1", shape=box];
n201 -> n192;
n192 [label="END fac(x)", shape=box, style=filled, color=green];
n192 -> n207;
n207 [label="RET fac", shape=box, style=filled, color=orange];
n207 -> n208;
n208 [label="x", shape=box];
n208 -> n209;
n209 [label="fac((x - 1)) * x", shape=box];
n209 -> n192;
n192 -> n223;
n223 [label="RET fac", shape=box, style=filled, color=orange];
n223 -> n224;
n224 [label="x", shape=box];
n224 -> n225;
n225 [label="fac((x - 1)) * x", shape=box];
n225 -> n192;
n192 -> n239;
n239 [label="RET fac", shape=box, style=filled, color=orange];
n239 -> n240;
n240 [label="x", shape=box];
n240 -> n241;
n241 [label="fac((x - 1)) * x", shape=box];
n241 -> n192;
n192 -> n255;
n255 [label="RET fac", shape=box, style=filled, color=orange];
n255 -> n256;
n256 [label="x", shape=box];
n256 -> n257;
n257 [label="fac((x - 1)) * x", shape=box];
n257 -> n192;
n192 -> n271;
n271 [label="RET fac", shape=box, style=filled, color=orange];
n271 -> n272;
n272 [label="x", shape=box];
n272 -> n273;
n273 [label="fac((x - 1)) * x", shape=box];
n273 -> n192;
n192 -> n287;
n287 [label="RET fac", shape=box, style=filled, color=orange];
n287 -> n288;
n288 [label="x", shape=box];
n288 -> n289;
n289 [label="fac((x - 1)) * x", shape=box];
n289 -> n192;
n192 -> n303;
n303 [label="RET fac", shape=box, style=filled, color=orange];
n303 -> n304;
n304 [label="x", shape=box];
n304 -> n305;
n305 [label="fac((x - 1)) * x", shape=box];
n305 -> n192;
n192 -> n319;
n319 [label="RET fac", shape=box, style=filled, color=orange];
n319 -> n320;
n320 [label="x", shape=box];
n320 -> n321;
n321 [label="fac((x - 1)) * x", shape=box];
n321 -> n192;
n192 -> n335;
n335 [label="RET fac", shape=box, style=filled, color=orange];
n335 -> n336;
n336 [label="x", shape=box];
n336 -> n337;
n337 [label="fac((x - 1)) * x", shape=box];
n337 -> n192;
n192 -> n341;
n341 [label="RET fac", shape=box, style=filled, color=orange];
n197 -> n202 [label="F"];
n202 [label="x", shape=box];
n202 -> n203;
n203 [label="1", shape=box];
n203 -> n204;
n204 [label="x - 1", shape=box];
n204 -> n205;
n205 [label="CALL fac", shape=box, style=filled, color=orange];
n205 -> n191;
n205 -> n207;
n191 -> n210;
n210 [label="x", shape=box];
n210 -> n211;
n211 [label="1", shape=box];
n211 -> n212;
n212 [label="x == 1", shape=box];
n212 -> n213;
n213 [label="<?>", shape=diamond];
n213 -> n217 [label="T"];
n217 [label="1", shape=box];
n217 -> n192;
n213 -> n218 [label="F"];
n218 [label="x", shape=box];
n218 -> n219;
n219 [label="1", shape=box];
n219 -> n220;
n220 [label="x - 1", shape=box];
n220 -> n221;
n221 [label="CALL fac", shape=box, style=filled, color=orange];
n221 -> n191;
n221 -> n223;
n191 -> n226;
n226 [label="x", shape=box];
n226 -> n227;
n227 [label="1", shape=box];
n227 -> n228;
n228 [label="x == 1", shape=box];
n228 -> n229;
n229 [label="<?>", shape=diamond];
n229 -> n233 [label="T"];
n233 [label="1", shape=box];
n233 -> n192;
n229 -> n234 [label="F"];
n234 [label="x", shape=box];
n234 -> n235;
n235 [label="1", shape=box];
n235 -> n236;
n236 [label="x - 1", shape=box];
n236 -> n237;
n237 [label="CALL fac", shape=box, style=filled, color=orange];
n237 -> n191;
n237 -> n239;
n191 -> n242;
n242 [label="x", shape=box];
n242 -> n243;
n243 [label="1", shape=box];
n243 -> n244;
n244 [label="x == 1", shape=box];
n244 -> n245;
n245 [label="<?>", shape=diamond];
n245 -> n249 [label="T"];
n249 [label="1", shape=box];
n249 -> n192;
n245 -> n250 [label="F"];
n250 [label="x", shape=box];
n250 -> n251;
n251 [label="1", shape=box];
n251 -> n252;
n252 [label="x - 1", shape=box];
n252 -> n253;
n253 [label="CALL fac", shape=box, style=filled, color=orange];
n253 -> n191;
n253 -> n255;
n191 -> n258;
n258 [label="x", shape=box];
n258 -> n259;
n259 [label="1", shape=box];
n259 -> n260;
n260 [label="x == 1", shape=box];
n260 -> n261;
n261 [label="<?>", shape=diamond];
n261 -> n265 [label="T"];
n265 [label="1", shape=box];
n265 -> n192;
n261 -> n266 [label="F"];
n266 [label="x", shape=box];
n266 -> n267;
n267 [label="1", shape=box];
n267 -> n268;
n268 [label="x - 1", shape=box];
n268 -> n269;
n269 [label="CALL fac", shape=box, style=filled, color=orange];
n269 -> n191;
n269 -> n271;
n191 -> n274;
n274 [label="x", shape=box];
n274 -> n275;
n275 [label="1", shape=box];
n275 -> n276;
n276 [label="x == 1", shape=box];
n276 -> n277;
n277 [label="<?>", shape=diamond];
n277 -> n281 [label="T"];
n281 [label="1", shape=box];
n281 -> n192;
n277 -> n282 [label="F"];
n282 [label="x", shape=box];
n282 -> n283;
n283 [label="1", shape=box];
n283 -> n284;
n284 [label="x - 1", shape=box];
n284 -> n285;
n285 [label="CALL fac", shape=box, style=filled, color=orange];
n285 -> n191;
n285 -> n287;
n191 -> n290;
n290 [label="x", shape=box];
n290 -> n291;
n291 [label="1", shape=box];
n291 -> n292;
n292 [label="x == 1", shape=box];
n292 -> n293;
n293 [label="<?>", shape=diamond];
n293 -> n297 [label="T"];
n297 [label="1", shape=box];
n297 -> n192;
n293 -> n298 [label="F"];
n298 [label="x", shape=box];
n298 -> n299;
n299 [label="1", shape=box];
n299 -> n300;
n300 [label="x - 1", shape=box];
n300 -> n301;
n301 [label="CALL fac", shape=box, style=filled, color=orange];
n301 -> n191;
n301 -> n303;
n191 -> n306;
n306 [label="x", shape=box];
n306 -> n307;
n307 [label="1", shape=box];
n307 -> n308;
n308 [label="x == 1", shape=box];
n308 -> n309;
n309 [label="<?>", shape=diamond];
n309 -> n313 [label="T"];
n313 [label="1", shape=box];
n313 -> n192;
n309 -> n314 [label="F"];
n314 [label="x", shape=box];
n314 -> n315;
n315 [label="1", shape=box];
n315 -> n316;
n316 [label="x - 1", shape=box];
n316 -> n317;
n317 [label="CALL fac", shape=box, style=filled, color=orange];
n317 -> n191;
n317 -> n319;
n191 -> n322;
n322 [label="x", shape=box];
n322 -> n323;
n323 [label="1", shape=box];
n323 -> n324;
n324 [label="x == 1", shape=box];
n324 -> n325;
n325 [label="<?>", shape=diamond];
n325 -> n329 [label="T"];
n329 [label="1", shape=box];
n329 -> n192;
n325 -> n330 [label="F"];
n330 [label="x", shape=box];
n330 -> n331;
n331 [label="1", shape=box];
n331 -> n332;
n332 [label="x - 1", shape=box];
n332 -> n333;
n333 [label="CALL fac", shape=box, style=filled, color=orange];
n333 -> n191;
n333 -> n335;
n339 -> n341;
}

View File

@@ -1,4 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n358 [label="0", shape=box];
}

View File

@@ -1,48 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n382 [label="10", shape=box];
n382 -> n383;
n383 [label="8", shape=box];
n383 -> n384;
n384 [label="CALL func", shape=box, style=filled, color=orange];
n384 -> n361;
n361 [label="START func(a, b)", shape=box, style=filled, color=green];
n361 -> n364;
n364 [label="a", shape=box];
n364 -> n365;
n365 [label="0", shape=box];
n365 -> n366;
n366 [label="a > 0", shape=box];
n366 -> n367;
n367 [label="b", shape=box];
n367 -> n368;
n368 [label="a", shape=box];
n368 -> n369;
n369 [label="b != a", shape=box];
n369 -> n370;
n370 [label="(a > 0) && (b != a)", shape=box];
n370 -> n371;
n371 [label="<?>", shape=diamond];
n371 -> n373 [label="T"];
n373 [label="b", shape=box];
n373 -> n374;
n374 [label="1", shape=box];
n374 -> n375;
n375 [label="b + 1", shape=box];
n375 -> n376;
n376 [label="b = (b + 1)", shape=box];
n376 -> n377;
n377 [label="a", shape=box];
n377 -> n378;
n378 [label="1", shape=box];
n378 -> n379;
n379 [label="a - 1", shape=box];
n379 -> n380;
n380 [label="a = (a - 1)", shape=box];
n380 -> n366;
n371 -> n362 [label="F"];
n362 [label="END func(a, b)", shape=box, style=filled, color=green];
n362 -> n386;
n386 [label="RET func", shape=box, style=filled, color=orange];
n384 -> n386;
}

View File

@@ -1,14 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n390 [label="1", shape=box];
n390 -> n391;
n391 [label="0", shape=box];
n391 -> n392;
n392 [label="1 >= 0", shape=box];
n392 -> n393;
n393 [label="<?>", shape=diamond];
n393 -> n397 [label="T"];
n397 [label="1", shape=box];
n393 -> n398 [label="F"];
n398 [label="0", shape=box];
}

View File

@@ -1,63 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n439 [label="3528", shape=box];
n439 -> n440;
n440 [label="3780", shape=box];
n440 -> n441;
n441 [label="CALL ggT", shape=box, style=filled, color=orange];
n441 -> n407;
n407 [label="START ggT(a, b)", shape=box, style=filled, color=green];
n407 -> n410;
n410 [label="a", shape=box];
n410 -> n411;
n411 [label="b", shape=box];
n411 -> n412;
n412 [label="a == b", shape=box];
n412 -> n413;
n413 [label="<?>", shape=diamond];
n413 -> n417 [label="T"];
n417 [label="a", shape=box];
n417 -> n408;
n408 [label="END ggT(a, b)", shape=box, style=filled, color=green];
n408 -> n431;
n431 [label="RET ggT", shape=box, style=filled, color=orange];
n431 -> n408;
n408 -> n438;
n438 [label="RET ggT", shape=box, style=filled, color=orange];
n438 -> n408;
n408 -> n443;
n443 [label="RET ggT", shape=box, style=filled, color=orange];
n413 -> n418 [label="F"];
n418 [label="a", shape=box];
n418 -> n419;
n419 [label="b", shape=box];
n419 -> n420;
n420 [label="a > b", shape=box];
n420 -> n421;
n421 [label="<?>", shape=diamond];
n421 -> n425 [label="T"];
n425 [label="a", shape=box];
n425 -> n426;
n426 [label="b", shape=box];
n426 -> n427;
n427 [label="a - b", shape=box];
n427 -> n428;
n428 [label="b", shape=box];
n428 -> n429;
n429 [label="CALL ggT", shape=box, style=filled, color=orange];
n429 -> n407;
n429 -> n431;
n421 -> n432 [label="F"];
n432 [label="b", shape=box];
n432 -> n433;
n433 [label="a", shape=box];
n433 -> n434;
n434 [label="b - a", shape=box];
n434 -> n435;
n435 [label="a", shape=box];
n435 -> n436;
n436 [label="CALL ggT", shape=box, style=filled, color=orange];
n436 -> n407;
n436 -> n438;
n441 -> n443;
}

View File

@@ -1,108 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n499 [label="1", shape=box];
n499 -> n500;
n500 [label="2", shape=box];
n500 -> n501;
n501 [label="CALL f", shape=box, style=filled, color=orange];
n501 -> n447;
n447 [label="START f(x, y)", shape=box, style=filled, color=green];
n447 -> n452;
n452 [label="x", shape=box];
n452 -> n453;
n453 [label="0", shape=box];
n453 -> n454;
n454 [label="x == 0", shape=box];
n454 -> n455;
n455 [label="<?>", shape=diamond];
n455 -> n467 [label="T"];
n467 [label="2", shape=box];
n467 -> n468;
n468 [label="y", shape=box];
n468 -> n469;
n469 [label="2 * y", shape=box];
n469 -> n470;
n470 [label="x", shape=box];
n470 -> n471;
n471 [label="CALL g", shape=box, style=filled, color=orange];
n471 -> n459;
n459 [label="START g(x, z)", shape=box, style=filled, color=green];
n459 -> n462;
n462 [label="x", shape=box];
n462 -> n463;
n463 [label="y", shape=box];
n463 -> n464;
n464 [label="x * y", shape=box];
n464 -> n465;
n465 [label="z", shape=box];
n465 -> n466;
n466 [label="(x * y) + z", shape=box];
n466 -> n460;
n460 [label="END g(x, z)", shape=box, style=filled, color=green];
n460 -> n473;
n473 [label="RET g", shape=box, style=filled, color=orange];
n473 -> n448;
n448 [label="END f(x, y)", shape=box, style=filled, color=green];
n448 -> n488;
n488 [label="RET f", shape=box, style=filled, color=orange];
n488 -> n489;
n489 [label="a * f(a,i)", shape=box];
n489 -> n490;
n490 [label="a = (a * f(a,i))", shape=box];
n490 -> n491;
n491 [label="i", shape=box];
n491 -> n492;
n492 [label="1", shape=box];
n492 -> n493;
n493 [label="i - 1", shape=box];
n493 -> n494;
n494 [label="i = (i - 1)", shape=box];
n494 -> n478;
n478 [label="i", shape=box];
n478 -> n479;
n479 [label="0", shape=box];
n479 -> n480;
n480 [label="i > 0", shape=box];
n480 -> n481;
n481 [label="<?>", shape=diamond];
n481 -> n483 [label="T"];
n483 [label="a", shape=box];
n483 -> n484;
n484 [label="a", shape=box];
n484 -> n485;
n485 [label="i", shape=box];
n485 -> n486;
n486 [label="CALL f", shape=box, style=filled, color=orange];
n486 -> n447;
n486 -> n488;
n481 -> n496 [label="F"];
n496 [label="a", shape=box];
n496 -> n497;
n497 [label="42", shape=box];
n497 -> n498;
n498 [label="a + 42", shape=box];
n498 -> n460;
n448 -> n503;
n503 [label="RET f", shape=box, style=filled, color=orange];
n503 -> n505;
n505 [label="3", shape=box];
n505 -> n506;
n506 [label="3", shape=box];
n506 -> n507;
n507 [label="CALL g", shape=box, style=filled, color=orange];
n507 -> n459;
n507 -> n509;
n509 [label="RET g", shape=box, style=filled, color=orange];
n473 -> n448;
n460 -> n509;
n459 -> n478;
n471 -> n473;
n455 -> n475 [label="F"];
n475 [label="x", shape=box];
n475 -> n476;
n476 [label="1", shape=box];
n476 -> n477;
n477 [label="x + 1", shape=box];
n477 -> n448;
n501 -> n503;
}

View File

@@ -1,32 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n518 [label="5", shape=box];
n518 -> n519;
n519 [label="CALL m", shape=box, style=filled, color=orange];
n519 -> n514;
n514 [label="START m(a)", shape=box, style=filled, color=green];
n514 -> n517;
n517 [label="a", shape=box];
n517 -> n515;
n515 [label="END m(a)", shape=box, style=filled, color=green];
n515 -> n521;
n521 [label="RET m", shape=box, style=filled, color=orange];
n521 -> n529;
n529 [label="5", shape=box];
n529 -> n530;
n530 [label="CALL m", shape=box, style=filled, color=orange];
n530 -> n523;
n523 [label="START m(b)", shape=box, style=filled, color=green];
n523 -> n526;
n526 [label="b", shape=box];
n526 -> n527;
n527 [label="1", shape=box];
n527 -> n528;
n528 [label="b + 1", shape=box];
n528 -> n524;
n524 [label="END m(b)", shape=box, style=filled, color=green];
n524 -> n532;
n532 [label="RET m", shape=box, style=filled, color=orange];
n530 -> n532;
n519 -> n521;
}

View File

@@ -1,42 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n540 [label="5", shape=box];
n540 -> n541;
n541 [label="CALL n", shape=box, style=filled, color=orange];
n541 -> n536;
n536 [label="START n(a)", shape=box, style=filled, color=green];
n536 -> n539;
n539 [label="a", shape=box];
n539 -> n537;
n537 [label="END n(a)", shape=box, style=filled, color=green];
n537 -> n543;
n543 [label="RET n", shape=box, style=filled, color=orange];
n543 -> n551;
n551 [label="5", shape=box];
n551 -> n552;
n552 [label="CALL n", shape=box, style=filled, color=orange];
n552 -> n536;
n552 -> n554;
n554 [label="RET n", shape=box, style=filled, color=orange];
n554 -> n555;
n555 [label="5", shape=box];
n555 -> n556;
n556 [label="CALL m", shape=box, style=filled, color=orange];
n556 -> n545;
n545 [label="START m(a)", shape=box, style=filled, color=green];
n545 -> n548;
n548 [label="a", shape=box];
n548 -> n549;
n549 [label="1", shape=box];
n549 -> n550;
n550 [label="a + 1", shape=box];
n550 -> n546;
n546 [label="END m(a)", shape=box, style=filled, color=green];
n546 -> n558;
n558 [label="RET m", shape=box, style=filled, color=orange];
n558 -> n559;
n559 [label="n(5) + m(5)", shape=box];
n556 -> n558;
n537 -> n554;
n541 -> n543;
}

View File

@@ -1,18 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n563 [label="True", shape=box];
n563 -> n564;
n564 [label="True", shape=box];
n564 -> n565;
n565 [label="True", shape=box];
n565 -> n566;
n566 [label="True == True", shape=box];
n566 -> n567;
n567 [label="True || (True == True)", shape=box];
n567 -> n568;
n568 [label="<?>", shape=diamond];
n568 -> n572 [label="T"];
n572 [label="1", shape=box];
n568 -> n573 [label="F"];
n573 [label="0", shape=box];
}

View File

@@ -1,19 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n582 [label="5", shape=box];
n582 -> n583;
n583 [label="CALL g", shape=box, style=filled, color=orange];
n583 -> n576;
n576 [label="START g(a)", shape=box, style=filled, color=green];
n576 -> n579;
n579 [label="a", shape=box];
n579 -> n580;
n580 [label="a", shape=box];
n580 -> n581;
n581 [label="a * a", shape=box];
n581 -> n577;
n577 [label="END g(a)", shape=box, style=filled, color=green];
n577 -> n585;
n585 [label="RET g", shape=box, style=filled, color=orange];
n583 -> n585;
}

View File

@@ -1,36 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n606 [label="10", shape=box];
n606 -> n607;
n607 [label="CALL f1", shape=box, style=filled, color=orange];
n607 -> n589;
n589 [label="START f1(b)", shape=box, style=filled, color=green];
n589 -> n592;
n592 [label="b", shape=box];
n592 -> n593;
n593 [label="0", shape=box];
n593 -> n594;
n594 [label="b == 0", shape=box];
n594 -> n595;
n595 [label="<?>", shape=diamond];
n595 -> n599 [label="T"];
n599 [label="0", shape=box];
n599 -> n590;
n590 [label="END f1(b)", shape=box, style=filled, color=green];
n590 -> n605;
n605 [label="RET f1", shape=box, style=filled, color=orange];
n605 -> n590;
n590 -> n609;
n609 [label="RET f1", shape=box, style=filled, color=orange];
n595 -> n600 [label="F"];
n600 [label="b", shape=box];
n600 -> n601;
n601 [label="1", shape=box];
n601 -> n602;
n602 [label="b - 1", shape=box];
n602 -> n603;
n603 [label="CALL f1", shape=box, style=filled, color=orange];
n603 -> n589;
n603 -> n605;
n607 -> n609;
}

View File

@@ -1,123 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n662 [label="10", shape=box];
n662 -> n663;
n663 [label="CALL f1", shape=box, style=filled, color=orange];
n663 -> n613;
n613 [label="START f1(b)", shape=box, style=filled, color=green];
n613 -> n618;
n618 [label="b", shape=box];
n618 -> n619;
n619 [label="0", shape=box];
n619 -> n620;
n620 [label="b == 0", shape=box];
n620 -> n621;
n621 [label="<?>", shape=diamond];
n621 -> n625 [label="T"];
n625 [label="0", shape=box];
n625 -> n614;
n614 [label="END f1(b)", shape=box, style=filled, color=green];
n614 -> n631;
n631 [label="RET f1", shape=box, style=filled, color=orange];
n631 -> n614;
n614 -> n642;
n642 [label="RET f1", shape=box, style=filled, color=orange];
n642 -> n655;
n655 [label="a", shape=box];
n655 -> n656;
n656 [label="b", shape=box];
n656 -> n657;
n657 [label="a * b", shape=box];
n657 -> n658;
n658 [label="CALL g", shape=box, style=filled, color=orange];
n658 -> n647;
n647 [label="START g(c)", shape=box, style=filled, color=green];
n647 -> n650;
n650 [label="a", shape=box];
n650 -> n651;
n651 [label="b", shape=box];
n651 -> n652;
n652 [label="a * b", shape=box];
n652 -> n653;
n653 [label="c", shape=box];
n653 -> n654;
n654 [label="(a * b) * c", shape=box];
n654 -> n648;
n648 [label="END g(c)", shape=box, style=filled, color=green];
n648 -> n660;
n660 [label="RET g", shape=box, style=filled, color=orange];
n660 -> n616;
n616 [label="END f2(a, b)", shape=box, style=filled, color=green];
n616 -> n688;
n688 [label="RET f2", shape=box, style=filled, color=orange];
n658 -> n660;
n614 -> n646;
n646 [label="RET f1", shape=box, style=filled, color=orange];
n646 -> n655;
n614 -> n665;
n665 [label="RET f1", shape=box, style=filled, color=orange];
n665 -> n667;
n667 [label="10", shape=box];
n667 -> n680;
n680 [label="20", shape=box];
n680 -> n681;
n681 [label="30", shape=box];
n681 -> n682;
n682 [label="CALL max", shape=box, style=filled, color=orange];
n682 -> n668;
n668 [label="START max(a, b)", shape=box, style=filled, color=green];
n668 -> n671;
n671 [label="a", shape=box];
n671 -> n672;
n672 [label="b", shape=box];
n672 -> n673;
n673 [label="a > b", shape=box];
n673 -> n674;
n674 [label="<?>", shape=diamond];
n674 -> n678 [label="T"];
n678 [label="a", shape=box];
n678 -> n669;
n669 [label="END max(a, b)", shape=box, style=filled, color=green];
n669 -> n684;
n684 [label="RET max", shape=box, style=filled, color=orange];
n684 -> n686;
n686 [label="CALL f2", shape=box, style=filled, color=orange];
n686 -> n615;
n615 [label="START f2(a, b)", shape=box, style=filled, color=green];
n615 -> n632;
n632 [label="a", shape=box];
n632 -> n633;
n633 [label="b", shape=box];
n633 -> n634;
n634 [label="a > b", shape=box];
n634 -> n635;
n635 [label="<?>", shape=diamond];
n635 -> n639 [label="T"];
n639 [label="a", shape=box];
n639 -> n640;
n640 [label="CALL f1", shape=box, style=filled, color=orange];
n640 -> n613;
n640 -> n642;
n635 -> n643 [label="F"];
n643 [label="b", shape=box];
n643 -> n644;
n644 [label="CALL f1", shape=box, style=filled, color=orange];
n644 -> n613;
n644 -> n646;
n686 -> n688;
n674 -> n679 [label="F"];
n679 [label="b", shape=box];
n679 -> n669;
n682 -> n684;
n621 -> n626 [label="F"];
n626 [label="b", shape=box];
n626 -> n627;
n627 [label="1", shape=box];
n627 -> n628;
n628 [label="b - 1", shape=box];
n628 -> n629;
n629 [label="CALL f1", shape=box, style=filled, color=orange];
n629 -> n613;
n629 -> n631;
n663 -> n665;
}

View File

@@ -1,23 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n698 [label="10", shape=box];
n698 -> n699;
n699 [label="8", shape=box];
n699 -> n700;
n700 [label="CALL func", shape=box, style=filled, color=orange];
n700 -> n691;
n691 [label="START func(a, b)", shape=box, style=filled, color=green];
n691 -> n694;
n694 [label="b", shape=box];
n694 -> n695;
n695 [label="1", shape=box];
n695 -> n696;
n696 [label="b + 1", shape=box];
n696 -> n697;
n697 [label="a = (b + 1)", shape=box];
n697 -> n692;
n692 [label="END func(a, b)", shape=box, style=filled, color=green];
n692 -> n702;
n702 [label="RET func", shape=box, style=filled, color=orange];
n700 -> n702;
}

View File

@@ -1,101 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n762 [label="2", shape=box];
n762 -> n763;
n763 [label="3", shape=box];
n763 -> n764;
n764 [label="CALL f", shape=box, style=filled, color=orange];
n764 -> n712;
n712 [label="START f(a, b)", shape=box, style=filled, color=green];
n712 -> n717;
n717 [label="a", shape=box];
n717 -> n718;
n718 [label="0", shape=box];
n718 -> n719;
n719 [label="a == 0", shape=box];
n719 -> n720;
n720 [label="<?>", shape=diamond];
n720 -> n724 [label="T"];
n724 [label="2", shape=box];
n724 -> n725;
n725 [label="b", shape=box];
n725 -> n726;
n726 [label="2 + b", shape=box];
n726 -> n713;
n713 [label="END f(a, b)", shape=box, style=filled, color=green];
n713 -> n760;
n760 [label="RET f", shape=box, style=filled, color=orange];
n760 -> n761;
n761 [label="c * f((c - 1),d)", shape=box];
n761 -> n728;
n728 [label="END g(a, c)", shape=box, style=filled, color=green];
n728 -> n740;
n740 [label="RET g", shape=box, style=filled, color=orange];
n740 -> n741;
n741 [label="2 + g(a,b)", shape=box];
n741 -> n713;
n728 -> n772;
n772 [label="RET g", shape=box, style=filled, color=orange];
n713 -> n766;
n766 [label="RET f", shape=box, style=filled, color=orange];
n766 -> n768;
n768 [label="3", shape=box];
n768 -> n769;
n769 [label="2", shape=box];
n769 -> n770;
n770 [label="CALL g", shape=box, style=filled, color=orange];
n770 -> n727;
n727 [label="START g(a, c)", shape=box, style=filled, color=green];
n727 -> n730;
n730 [label="a", shape=box];
n730 -> n731;
n731 [label="c", shape=box];
n731 -> n732;
n732 [label="a + c", shape=box];
n732 -> n733;
n733 [label="b", shape=box];
n733 -> n734;
n734 [label="(a + c) + b", shape=box];
n734 -> n728;
n727 -> n743;
n743 [label="c", shape=box];
n743 -> n744;
n744 [label="0", shape=box];
n744 -> n745;
n745 [label="c == 0", shape=box];
n745 -> n746;
n746 [label="<?>", shape=diamond];
n746 -> n750 [label="T"];
n750 [label="1", shape=box];
n750 -> n751;
n751 [label="d", shape=box];
n751 -> n752;
n752 [label="1 + d", shape=box];
n752 -> n728;
n746 -> n753 [label="F"];
n753 [label="c", shape=box];
n753 -> n754;
n754 [label="c", shape=box];
n754 -> n755;
n755 [label="1", shape=box];
n755 -> n756;
n756 [label="c - 1", shape=box];
n756 -> n757;
n757 [label="d", shape=box];
n757 -> n758;
n758 [label="CALL f", shape=box, style=filled, color=orange];
n758 -> n712;
n758 -> n760;
n770 -> n772;
n720 -> n735 [label="F"];
n735 [label="2", shape=box];
n735 -> n736;
n736 [label="a", shape=box];
n736 -> n737;
n737 [label="b", shape=box];
n737 -> n738;
n738 [label="CALL g", shape=box, style=filled, color=orange];
n738 -> n727;
n738 -> n740;
n764 -> n766;
}

View File

@@ -1,38 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n792 [label="1", shape=box];
n792 -> n793;
n793 [label="2", shape=box];
n793 -> n794;
n794 [label="CALL f", shape=box, style=filled, color=orange];
n794 -> n775;
n775 [label="START f(x, y)", shape=box, style=filled, color=green];
n775 -> n785;
n785 [label="5", shape=box];
n785 -> n786;
n786 [label="CALL g", shape=box, style=filled, color=orange];
n786 -> n778;
n778 [label="START g(x)", shape=box, style=filled, color=green];
n778 -> n781;
n781 [label="x", shape=box];
n781 -> n782;
n782 [label="7", shape=box];
n782 -> n783;
n783 [label="x + 7", shape=box];
n783 -> n784;
n784 [label="y = (x + 7)", shape=box];
n784 -> n779;
n779 [label="END g(x)", shape=box, style=filled, color=green];
n779 -> n788;
n788 [label="RET g", shape=box, style=filled, color=orange];
n788 -> n789;
n789 [label="x = g(5)", shape=box];
n789 -> n791;
n791 [label="y", shape=box];
n791 -> n776;
n776 [label="END f(x, y)", shape=box, style=filled, color=green];
n776 -> n796;
n796 [label="RET f", shape=box, style=filled, color=orange];
n786 -> n788;
n794 -> n796;
}

View File

@@ -1,57 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n829 [label="3", shape=box];
n829 -> n830;
n830 [label="CALL f", shape=box, style=filled, color=orange];
n830 -> n800;
n800 [label="START f(x)", shape=box, style=filled, color=green];
n800 -> n803;
n803 [label="2", shape=box];
n803 -> n804;
n804 [label="x", shape=box];
n804 -> n805;
n805 [label="2 * x", shape=box];
n805 -> n806;
n806 [label="x = (2 * x)", shape=box];
n806 -> n807;
n807 [label="x", shape=box];
n807 -> n808;
n808 [label="0", shape=box];
n808 -> n809;
n809 [label="x > 0", shape=box];
n809 -> n810;
n810 [label="<?>", shape=diamond];
n810 -> n814 [label="T"];
n814 [label="x", shape=box];
n814 -> n815;
n815 [label="1", shape=box];
n815 -> n816;
n816 [label="x - 1", shape=box];
n816 -> n817;
n817 [label="x = (x - 1)", shape=box];
n817 -> n819;
n819 [label="x", shape=box];
n819 -> n820;
n820 [label="0", shape=box];
n820 -> n821;
n821 [label="x > 0", shape=box];
n821 -> n822;
n822 [label="<?>", shape=diamond];
n822 -> n824 [label="T"];
n824 [label="x", shape=box];
n824 -> n825;
n825 [label="1", shape=box];
n825 -> n826;
n826 [label="x - 1", shape=box];
n826 -> n827;
n827 [label="x = (x - 1)", shape=box];
n827 -> n819;
n822 -> n801 [label="F"];
n801 [label="END f(x)", shape=box, style=filled, color=green];
n801 -> n832;
n832 [label="RET f", shape=box, style=filled, color=orange];
n810 -> n818 [label="F"];
n818 [label="x", shape=box];
n818 -> n819;
n830 -> n832;
}

View File

@@ -1,19 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n842 [label="2", shape=box];
n842 -> n843;
n843 [label="CALL g", shape=box, style=filled, color=orange];
n843 -> n836;
n836 [label="START g(x, y)", shape=box, style=filled, color=green];
n836 -> n839;
n839 [label="3", shape=box];
n839 -> n840;
n840 [label="y = 3", shape=box];
n840 -> n841;
n841 [label="x", shape=box];
n841 -> n837;
n837 [label="END g(x, y)", shape=box, style=filled, color=green];
n837 -> n845;
n845 [label="RET g", shape=box, style=filled, color=orange];
n843 -> n845;
}

View File

@@ -1,14 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n858 [label="True", shape=box];
n858 -> n859;
n859 [label="False", shape=box];
n859 -> n860;
n860 [label="True && False", shape=box];
n860 -> n861;
n861 [label="<?>", shape=diamond];
n861 -> n865 [label="T"];
n865 [label="1", shape=box];
n861 -> n866 [label="F"];
n866 [label="0", shape=box];
}

View File

@@ -1,14 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n869 [label="True", shape=box];
n869 -> n870;
n870 [label="False", shape=box];
n870 -> n871;
n871 [label="True || False", shape=box];
n871 -> n872;
n872 [label="<?>", shape=diamond];
n872 -> n876 [label="T"];
n876 [label="1", shape=box];
n872 -> n877 [label="F"];
n877 [label="0", shape=box];
}

View File

@@ -1,14 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n880 [label="1", shape=box];
n880 -> n881;
n881 [label="2", shape=box];
n881 -> n882;
n882 [label="1 > 2", shape=box];
n882 -> n883;
n883 [label="<?>", shape=diamond];
n883 -> n887 [label="T"];
n887 [label="1", shape=box];
n883 -> n888 [label="F"];
n888 [label="0", shape=box];
}

View File

@@ -1,18 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n891 [label="2", shape=box];
n891 -> n892;
n892 [label="3", shape=box];
n892 -> n893;
n893 [label="5", shape=box];
n893 -> n894;
n894 [label="3 + 5", shape=box];
n894 -> n895;
n895 [label="2 > (3 + 5)", shape=box];
n895 -> n896;
n896 [label="<?>", shape=diamond];
n896 -> n900 [label="T"];
n900 [label="1", shape=box];
n896 -> n901 [label="F"];
n901 [label="0", shape=box];
}

View File

@@ -1,22 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n904 [label="1", shape=box];
n904 -> n905;
n905 [label="2", shape=box];
n905 -> n906;
n906 [label="1 > 2", shape=box];
n906 -> n907;
n907 [label="3", shape=box];
n907 -> n908;
n908 [label="5", shape=box];
n908 -> n909;
n909 [label="3 < 5", shape=box];
n909 -> n910;
n910 [label="(1 > 2) || (3 < 5)", shape=box];
n910 -> n911;
n911 [label="<?>", shape=diamond];
n911 -> n915 [label="T"];
n915 [label="1", shape=box];
n911 -> n916 [label="F"];
n916 [label="0", shape=box];
}

View File

@@ -1,18 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n919 [label="2", shape=box];
n919 -> n920;
n920 [label="0", shape=box];
n920 -> n921;
n921 [label="2 == 0", shape=box];
n921 -> n922;
n922 [label="False", shape=box];
n922 -> n923;
n923 [label="(2 == 0) == False", shape=box];
n923 -> n924;
n924 [label="<?>", shape=diamond];
n924 -> n928 [label="T"];
n928 [label="1", shape=box];
n924 -> n929 [label="F"];
n929 [label="0", shape=box];
}

View File

@@ -1,10 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n849 [label="True", shape=box];
n849 -> n850;
n850 [label="<?>", shape=diamond];
n850 -> n854 [label="T"];
n854 [label="1", shape=box];
n850 -> n855 [label="F"];
n855 [label="0", shape=box];
}

View File

@@ -1,19 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n938 [label="10", shape=box];
n938 -> n939;
n939 [label="CALL square", shape=box, style=filled, color=orange];
n939 -> n932;
n932 [label="START square(x)", shape=box, style=filled, color=green];
n932 -> n935;
n935 [label="x", shape=box];
n935 -> n936;
n936 [label="x", shape=box];
n936 -> n937;
n937 [label="x * x", shape=box];
n937 -> n933;
n933 [label="END square(x)", shape=box, style=filled, color=green];
n933 -> n941;
n941 [label="RET square", shape=box, style=filled, color=orange];
n939 -> n941;
}

View File

@@ -1,90 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n983 [label="2", shape=box];
n983 -> n984;
n984 [label="3", shape=box];
n984 -> n985;
n985 [label="CALL mult", shape=box, style=filled, color=orange];
n985 -> n945;
n945 [label="START mult(a, b)", shape=box, style=filled, color=green];
n945 -> n950;
n950 [label="a", shape=box];
n950 -> n951;
n951 [label="b", shape=box];
n951 -> n952;
n952 [label="a * b", shape=box];
n952 -> n946;
n946 [label="END mult(a, b)", shape=box, style=filled, color=green];
n946 -> n977;
n977 [label="RET mult", shape=box, style=filled, color=orange];
n977 -> n954;
n954 [label="END inc(a)", shape=box, style=filled, color=green];
n954 -> n972;
n972 [label="RET inc", shape=box, style=filled, color=orange];
n972 -> n954;
n954 -> n981;
n981 [label="RET inc", shape=box, style=filled, color=orange];
n981 -> n948;
n948 [label="END add(a, b)", shape=box, style=filled, color=green];
n948 -> n992;
n992 [label="RET add", shape=box, style=filled, color=orange];
n992 -> n993;
n993 [label="CALL add", shape=box, style=filled, color=orange];
n993 -> n947;
n947 [label="START add(a, b)", shape=box, style=filled, color=green];
n947 -> n978;
n978 [label="a", shape=box];
n978 -> n979;
n979 [label="CALL inc", shape=box, style=filled, color=orange];
n979 -> n953;
n953 [label="START inc(a)", shape=box, style=filled, color=green];
n953 -> n956;
n956 [label="b", shape=box];
n956 -> n957;
n957 [label="0", shape=box];
n957 -> n958;
n958 [label="b != 0", shape=box];
n958 -> n959;
n959 [label="<?>", shape=diamond];
n959 -> n963 [label="T"];
n963 [label="b", shape=box];
n963 -> n964;
n964 [label="1", shape=box];
n964 -> n965;
n965 [label="b - 1", shape=box];
n965 -> n966;
n966 [label="b = (b - 1)", shape=box];
n966 -> n967;
n967 [label="a", shape=box];
n967 -> n968;
n968 [label="1", shape=box];
n968 -> n969;
n969 [label="a + 1", shape=box];
n969 -> n970;
n970 [label="CALL inc", shape=box, style=filled, color=orange];
n970 -> n953;
n970 -> n972;
n959 -> n973 [label="F"];
n973 [label="a", shape=box];
n973 -> n974;
n974 [label="1", shape=box];
n974 -> n975;
n975 [label="CALL mult", shape=box, style=filled, color=orange];
n975 -> n945;
n975 -> n977;
n979 -> n981;
n993 -> n995;
n995 [label="RET add", shape=box, style=filled, color=orange];
n948 -> n995;
n946 -> n987;
n987 [label="RET mult", shape=box, style=filled, color=orange];
n987 -> n988;
n988 [label="4", shape=box];
n988 -> n989;
n989 [label="5", shape=box];
n989 -> n990;
n990 [label="CALL add", shape=box, style=filled, color=orange];
n990 -> n947;
n990 -> n992;
n985 -> n987;
}

View File

@@ -1,9 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n1028 [label="True", shape=box];
n1028 -> n1029;
n1029 [label="<?>", shape=diamond];
n1029 -> n1031 [label="T"];
n1031 [label="3", shape=box];
n1031 -> n1028;
}

View File

@@ -1,48 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n1020 [label="10", shape=box];
n1020 -> n1021;
n1021 [label="8", shape=box];
n1021 -> n1022;
n1022 [label="CALL func", shape=box, style=filled, color=orange];
n1022 -> n999;
n999 [label="START func(a, b)", shape=box, style=filled, color=green];
n999 -> n1002;
n1002 [label="a", shape=box];
n1002 -> n1003;
n1003 [label="0", shape=box];
n1003 -> n1004;
n1004 [label="a > 0", shape=box];
n1004 -> n1005;
n1005 [label="b", shape=box];
n1005 -> n1006;
n1006 [label="a", shape=box];
n1006 -> n1007;
n1007 [label="b != a", shape=box];
n1007 -> n1008;
n1008 [label="(a > 0) && (b != a)", shape=box];
n1008 -> n1009;
n1009 [label="<?>", shape=diamond];
n1009 -> n1011 [label="T"];
n1011 [label="b", shape=box];
n1011 -> n1012;
n1012 [label="1", shape=box];
n1012 -> n1013;
n1013 [label="b + 1", shape=box];
n1013 -> n1014;
n1014 [label="b = (b + 1)", shape=box];
n1014 -> n1015;
n1015 [label="a", shape=box];
n1015 -> n1016;
n1016 [label="1", shape=box];
n1016 -> n1017;
n1017 [label="a - 1", shape=box];
n1017 -> n1018;
n1018 [label="a = (a - 1)", shape=box];
n1018 -> n1004;
n1009 -> n1000 [label="F"];
n1000 [label="END func(a, b)", shape=box, style=filled, color=green];
n1000 -> n1024;
n1024 [label="RET func", shape=box, style=filled, color=orange];
n1022 -> n1024;
}

View File

@@ -1,74 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n1075 [label="21", shape=box];
n1075 -> n1076;
n1076 [label="49", shape=box];
n1076 -> n1077;
n1077 [label="CALL wrapper", shape=box, style=filled, color=orange];
n1077 -> n1035;
n1035 [label="START wrapper(a, b)", shape=box, style=filled, color=green];
n1035 -> n1070;
n1070 [label="0", shape=box];
n1070 -> n1071;
n1071 [label="CALL ggt", shape=box, style=filled, color=orange];
n1071 -> n1038;
n1038 [label="START ggt(noneSense)", shape=box, style=filled, color=green];
n1038 -> n1041;
n1041 [label="a", shape=box];
n1041 -> n1042;
n1042 [label="b", shape=box];
n1042 -> n1043;
n1043 [label="a == b", shape=box];
n1043 -> n1044;
n1044 [label="<?>", shape=diamond];
n1044 -> n1048 [label="T"];
n1048 [label="a", shape=box];
n1048 -> n1039;
n1039 [label="END ggt(noneSense)", shape=box, style=filled, color=green];
n1039 -> n1073;
n1073 [label="RET ggt", shape=box, style=filled, color=orange];
n1073 -> n1036;
n1036 [label="END wrapper(a, b)", shape=box, style=filled, color=green];
n1036 -> n1062;
n1062 [label="RET wrapper", shape=box, style=filled, color=orange];
n1062 -> n1039;
n1036 -> n1069;
n1069 [label="RET wrapper", shape=box, style=filled, color=orange];
n1069 -> n1039;
n1036 -> n1079;
n1079 [label="RET wrapper", shape=box, style=filled, color=orange];
n1044 -> n1049 [label="F"];
n1049 [label="a", shape=box];
n1049 -> n1050;
n1050 [label="b", shape=box];
n1050 -> n1051;
n1051 [label="a > b", shape=box];
n1051 -> n1052;
n1052 [label="<?>", shape=diamond];
n1052 -> n1056 [label="T"];
n1056 [label="a", shape=box];
n1056 -> n1057;
n1057 [label="b", shape=box];
n1057 -> n1058;
n1058 [label="a - b", shape=box];
n1058 -> n1059;
n1059 [label="b", shape=box];
n1059 -> n1060;
n1060 [label="CALL wrapper", shape=box, style=filled, color=orange];
n1060 -> n1035;
n1060 -> n1062;
n1052 -> n1063 [label="F"];
n1063 [label="b", shape=box];
n1063 -> n1064;
n1064 [label="a", shape=box];
n1064 -> n1065;
n1065 [label="b - a", shape=box];
n1065 -> n1066;
n1066 [label="a", shape=box];
n1066 -> n1067;
n1067 [label="CALL wrapper", shape=box, style=filled, color=orange];
n1067 -> n1035;
n1067 -> n1069;
n1071 -> n1073;
n1077 -> n1079;
}

View File

@@ -1,47 +0,0 @@
digraph CFG {
node [fontname="Helvetica"];
n1107 [label="4", shape=box];
n1107 -> n1108;
n1108 [label="10", shape=box];
n1108 -> n1109;
n1109 [label="CALL wrapper", shape=box, style=filled, color=orange];
n1109 -> n1083;
n1083 [label="START wrapper(number, threshold)", shape=box, style=filled, color=green];
n1083 -> n1102;
n1102 [label="number", shape=box];
n1102 -> n1103;
n1103 [label="CALL square", shape=box, style=filled, color=orange];
n1103 -> n1086;
n1086 [label="START square(x)", shape=box, style=filled, color=green];
n1086 -> n1089;
n1089 [label="x", shape=box];
n1089 -> n1090;
n1090 [label="x", shape=box];
n1090 -> n1091;
n1091 [label="x * x", shape=box];
n1091 -> n1092;
n1092 [label="threshold", shape=box];
n1092 -> n1093;
n1093 [label="(x * x) > threshold", shape=box];
n1093 -> n1094;
n1094 [label="<?>", shape=diamond];
n1094 -> n1098 [label="T"];
n1098 [label="x", shape=box];
n1098 -> n1087;
n1087 [label="END square(x)", shape=box, style=filled, color=green];
n1087 -> n1105;
n1105 [label="RET square", shape=box, style=filled, color=orange];
n1105 -> n1084;
n1084 [label="END wrapper(number, threshold)", shape=box, style=filled, color=green];
n1084 -> n1111;
n1111 [label="RET wrapper", shape=box, style=filled, color=orange];
n1094 -> n1099 [label="F"];
n1099 [label="x", shape=box];
n1099 -> n1100;
n1100 [label="x", shape=box];
n1100 -> n1101;
n1101 [label="x * x", shape=box];
n1101 -> n1087;
n1103 -> n1105;
n1109 -> n1111;
}

View File

@@ -1,88 +0,0 @@
#!/usr/bin/env python3
import sys
import os
from pathlib import Path
# Add the current directory to Python path so we can import our modules
sys.path.insert(0, '/home/janniclas/Projekte/Construction-of-Compilers/Project-02-03-04')
import triplayacc as yacc
import cfg_build
from cfg.CFG import CFG
from cfg.CFG_Node import (CFG_START, CFG_END)
def test_cfg_refactoring():
"""Test that the CFG refactoring works correctly"""
test_files = [
'example.tripla',
'simpleSequence.tripla',
'condition.tripla',
'factorial.tripla'
]
print("Testing CFG refactoring...")
print("=" * 50)
for filename in test_files:
print(f"\nTesting {filename}...")
try:
# Reset the global FUNCTIONS registry
cfg_build.FUNCTIONS.clear()
source = Path(f'triplaprograms/{filename}').read_text()
ast = yacc.parser.parse(source)
# Create CFG the old way (without AST parameter)
start1 = CFG_START()
end1 = CFG_END()
last1 = ast.cfa(start1, end1)
if last1 is not None:
last1.add_child(end1)
cfg_old = CFG(start1, end1) # Old constructor
dot_old = cfg_old.to_dot()
# Create CFG the new way (with AST parameter)
cfg_build.FUNCTIONS.clear()
start2 = CFG_START()
end2 = CFG_END()
last2 = ast.cfa(start2, end2)
if last2 is not None:
last2.add_child(end2)
cfg_new = CFG(start2, end2, ast) # New constructor
dot_new = cfg_new.to_dot()
# Compare the outputs
if dot_old == dot_new:
print(f" ✓ PASS: DOT outputs are identical")
else:
print(f" ✗ FAIL: DOT outputs differ")
print(f" Old length: {len(dot_old)}")
print(f" New length: {len(dot_new)}")
return False
# Verify basic structure
if 'digraph CFG' not in dot_new:
print(f" ✗ FAIL: Missing graph declaration")
return False
if '->' not in dot_new:
print(f" ✗ FAIL: Missing edges")
return False
print(f" ✓ PASS: Basic structure verified")
print(f" ✓ Generated DOT with {len(dot_new)} characters")
except Exception as e:
print(f" ✗ FAIL: Exception occurred: {e}")
return False
print("\n" + "=" * 50)
print("✓ All tests passed! CFG refactoring is working correctly.")
return True
if __name__ == "__main__":
success = test_cfg_refactoring()
sys.exit(0 if success else 1)

View File

@@ -0,0 +1,42 @@
GOTO L1
L2: NOP
CONST 2
STORE 1 0
LOAD 1 0
POP
CONST 3
STORE 2 0
LOAD 2 0
POP
GOTO L3
L4: NOP
CONST 7
STORE 0 0
LOAD 0 0
POP
LOAD 1 1
CONST 0
GT
IFZERO L5
LOAD 1 1
INVOKE 1 L4 1
GOTO L6
L5: NOP
CONST 8
STORE 0 0
LOAD 0 0
L6: NOP
POP
LOAD 0 0
RETURN
L3: NOP
LOAD 0 0
INVOKE 1 L4 0
LOAD 0 0
ADD
RETURN
L1: NOP
CONST 2
CONST 3
INVOKE 2 L2 0
HALT