diff --git a/cfpq-paths-app/README.md b/cfpq-paths-app/README.md new file mode 100644 index 000000000..adb2d55c0 --- /dev/null +++ b/cfpq-paths-app/README.md @@ -0,0 +1,246 @@ +>[!CAUTION] +>For demo purposes only! +>Do not expect big graphs to be processed successfully (in reasonable time or without out-of-memory errors). + +This demo is based on UCFS, which, for a given grammar represented as an RSM, a graph, and start vertices, produces an SPPF. + +**RSM** (Recursive State Machine) is an automaton-like representation of context-free languages. + +**SPPF** (Shared Packed Parse Forest) is a derivation-tree-like structure that represents **all** possible paths satisfying the specified grammar. If the number of such paths is infinite, the SPPF contains cycles. +SPPF consists of nodes of the types listed below. Each node has a unique Id and detailed information specific to its type. + +* **Nonterminal** node contains the name of the non-terminal and pairs of vertices from the input graph that are the start and end of paths derived from that non-terminal. + + ![Graph for example 1](./src/main/resources/figures/Nonterm_example.dot.svg) + + This node has number ```0``` and is the root of all derivations for all paths from 1 to 4 derivable from non-terminal ```S``` + +* **Terminal** node is a leaf and corresponds to an edge. + + ![Graph for example 1](./src/main/resources/figures/Terminal_example.dot.svg) + + This node depicts edge ```3 -alloc-> 4```. + +* **Epsilon** node is a simplified way to represent that $\varepsilon$ is derived at a specific position. + + ![Graph for example 1](./src/main/resources/figures/Epsilon_example.dot.svg) + +* **Range** node is a supplementary node that helps reuse subtrees. + + ![Graph for example 1](./src/main/resources/figures/Range_example.dot.svg) + + This node represents all subpaths from 0 to 4 that are accepted while the RSM transitions from ```S_0``` to ```S_2```. + +* **Intermediate** node is a supplementary node used to connect subpaths. + + ![Graph for example 1](./src/main/resources/figures/Intermediate_example.dot.svg) + + This node depicts that the path from 0 to 2 is composed of two parts: from 0 to 1 and from 1 to 2. + +**Requirements**: 11 java + +**To run (from project root)**: + +```bash +./gradlew :cfpq-app:run +``` + +**Input graphs:** ```src/main/resources/``` + +**Grammar and code for paths extraction:** ```src/main/kotlin/me/vkutuev/Main.kt``` + +>[!NOTE] +> We implemented a very naive path extraction algorithm solely to demonstrate SPPF traversal. + +## Examples + +We provide a few code snippets, the corresponding graphs to be analyzed, parts of the resulting SPPFs, and extracted paths. + +For analysis, we use the following extended points-to grammar (start non-terminal is ```S```), which allows us to analyze chains of fields. +``` +PointsTo -> ("assign" | ("load_i" Alias "store_i"))* "alloc" +FlowsTo -> "alloc_r" ("assign_r" | ("store_i_r" Alias "load_o_r"))* +Alias -> PointsTo FlowsTo +S -> (Alias? "store_i")* PointsTo +``` + +For all our examples, we use a common grammar with $i \in [0..3]$. +The corresponding RSM is presented below: + +![Graph for example 1](./src/main/resources/figures/rsm.dot.svg) + +### Example 1 +Code snippet: +```java +val n = new X() +val y = new Y() +val z = new Z() +val l = n +val t = y +l.u = y +t.v = z +``` + +Respective graph: + +![Graph for example 1](./src/main/resources/figures/graph_1.dot.svg) + +Resulting SPPF: + +![SPPF for example 1](./src/main/resources/figures/graph_1_sppf.dot.svg) + +Three trees are extracted because there are three paths of interest from node 1. +We do not extract subpaths derivable from non-terminals ```Alias``` and ```PointsTo```, as they contain no useful information for restoring fields. + + +Respective paths: + +* [(1-PointsTo->0)] + + This path is trivial. Such paths will be omitted in further examples. + +* [(1-Alias->2), (2-store_0->3), (3-PointsTo->4)] + + This path means that ```n.u = new Y()```. Vertex 2 is an alias for 1 (corresponding to ```n```), and 2 has a field ```u``` that points to ```new Y()``` (```store_0``` corresponds to ```l.u = y```). + +* [(1-Alias->2), (2-store_0->3), (3-Alias->5), (5-store_1->6), (6-PointsTo->7)] + + This path means that ```n.u.v = new Z()```. + + +### Example 2 + +Code snippet: +```java +val n = new X() +val l = n +while (...){ + l.next = new X() + l = l.next +} +``` + +Respective graph: + +![Graph for example 2](./src/main/resources/figures/graph_2.dot.svg) + +Part of resulting SPPF: + +![SPPF for example 2](./src/main/resources/figures/graph_2_sppf.dot.svg) + +This part contains a cycle formed by vertices 27–31–34–37–38–40–42–44–47–49–52–56 (colored in red). This is because there are infinitely many paths of interest. We extract some of them: + +* [(0-Alias->2), (2-store_0->3), (3-PointsTo->4)] + + ```n.next = new X () // line 4``` + +* [(0-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-PointsTo->4)] + + ```n.next.next = new X () // line 4``` + +* [(0-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-PointsTo->4)] + + ```n.next.next.next = new X () // line 4``` + +* [(0-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-PointsTo->4)] + + ```n.next.next.next.next = new X () // line 4``` + +* [(0-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-PointsTo->4)] + + ```n.next.next.next.next.next = new X () // line 4``` + +* [(0-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-PointsTo->4)] + + ```n.next.next.next.next.next.next = new X () // line 4``` + +More paths can be extracted if needed. Traversal should be tuned accordingly. + +### Example 3 + +Code snippet: +```java +val n = new X() +val l = n +while (...){ + val t = new X() + l.next = t + l = t +} +``` + +Respective graph: + +![Graph for example 3](./src/main/resources/figures/graph_3.dot.svg) + +Part of resulting SPPF: + +![SPPF for example 3](./src/main/resources/figures/graph_3_sppf.dot.svg) + +This SPPF also contains a cycle (3–5–7–11), so there are infinitely many paths of interest, and we extract only a few of them. + +* [(0-Alias->1), (1-store_0->2), (2-PointsTo->3)] + + ```n.next = new X() // line 4``` + +* [(0-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-PointsTo->3)] + + ```n.next.next = new X() // line 4``` + +* [(0-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-PointsTo->3)] + + ```n.next.next.next = new X() // line 4``` + +* [(0-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-PointsTo->3)] + + ```n.next.next.next.next = new X() // line 4``` + +* [(0-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-PointsTo->3)] + + ```n.next.next.next.next.next = new X() // line 4``` + +* [(0-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-PointsTo->3)] + + ```n.next.next.next.next.next.next = new X() // line 4``` + + +### Example 4 + +Code snippet: + +```java +val n = new X() +val z = new Z() +val u = new U() +z.x = n +u.y = n +val v = z.x +v.p = new Y() +val r = u.y +r.q = new P() +``` +Respective graph: + +![Graph for example 4](./src/main/resources/figures/graph_4.dot.svg) + +For this example, we omit the figure of the SPPF due to its size. However, we present the respective paths. Note that in this example, we specify two vertices as start: 1 and 8. + +* [(1-Alias->9), (9-store_3->11), (11-PointsTo->13)] + + ```n.q = new P()``` + +* [(1-Alias->8), (8-store_2->10), (10-PointsTo->12)] + + ```n.p = new Y() ``` + +* [(8-Alias->9), (9-store_3->11), (11-PointsTo->13)] + + ```v.q = new P() ``` + +* [(8-store_2->10), (10-PointsTo->12)] + + ```v.p = new Y() ``` + +* [(8-Alias->8), (8-store_2->10), (10-PointsTo->12)] + + ```v.p = new Y() ``` diff --git a/cfpq-paths-app/build.gradle.kts b/cfpq-paths-app/build.gradle.kts new file mode 100644 index 000000000..4ff9a58b9 --- /dev/null +++ b/cfpq-paths-app/build.gradle.kts @@ -0,0 +1,21 @@ +plugins { + kotlin("jvm") version "2.3.0" + application +} + +repositories { + mavenCentral() +} + +dependencies { + implementation(kotlin("stdlib")) + implementation(project(":solver")) +} + +kotlin { + jvmToolchain(11) +} + +application { + mainClass = "org.ucfs.paths.MainKt" +} diff --git a/cfpq-paths-app/src/main/kotlin/org/ucfs/paths/Main.kt b/cfpq-paths-app/src/main/kotlin/org/ucfs/paths/Main.kt new file mode 100644 index 000000000..9c36d45f6 --- /dev/null +++ b/cfpq-paths-app/src/main/kotlin/org/ucfs/paths/Main.kt @@ -0,0 +1,129 @@ +package org.ucfs.paths + +import org.ucfs.grammar.combinator.Grammar +import org.ucfs.grammar.combinator.extension.StringExtension.or +import org.ucfs.grammar.combinator.extension.StringExtension.times +import org.ucfs.grammar.combinator.regexp.Nt +import org.ucfs.grammar.combinator.regexp.Option +import org.ucfs.grammar.combinator.regexp.many +import org.ucfs.grammar.combinator.regexp.or +import org.ucfs.input.DotParser +import org.ucfs.input.InputGraph +import org.ucfs.input.TerminalInputLabel +import org.ucfs.parser.Gll +import org.ucfs.sppf.getSppfDot +import org.ucfs.sppf.node.* +import java.nio.file.Files +import java.nio.file.Path + +class PointsToGrammar : Grammar() { + val S by Nt().asStart() + val Alias by Nt() + val PointsTo by Nt(many("assign" or ("load_0" * Alias * "store_0") + or ("load_1" * Alias * "store_1") + or ("load_2" * Alias * "store_2") + or ("load_3" * Alias * "store_3") + ) * "alloc") + val FlowsTo by Nt("alloc_r" * many("assign_r" or ("store_0_r" * Alias * "load_0_r") + or ("store_1_r" * Alias * "load_1_r") + or ("store_2_r" * Alias * "load_2_r") + or ("store_3_r" * Alias * "load_3_r"))) + + init { + Alias /= PointsTo * FlowsTo + S /= many( Option(Alias) * ("store_0" or "store_1" or "store_2" or "store_3")) * PointsTo + } +} + +fun readGraph(name: String): InputGraph { + val dotGraph = object {}.javaClass.getResource("/$name")?.readText() + ?: throw RuntimeException("File $name not found in resources") + val dotParser = DotParser() + return dotParser.parseDot(dotGraph) +} + +data class OutEdge(val start: Int, val symbol: String, val end: Int){ + override fun toString(): String = "(" + start.toString() + "-" + symbol + "->" + end.toString() + ")" +} + +fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List>? { + if (maxDepth == 0) { + return null + } + when (val nodeType = node.type) { + is TerminalType<*> -> { + val range = node.inputRange ?: throw RuntimeException("Null inputRange for TerminalType node of SPPF") + return listOf(listOf(OutEdge(range.from, nodeType.terminal.toString(), range.to))) + } + + //Do not extract subpaths for non-terminal Alias because they are useless. + is NonterminalType if nodeType.startState.nonterminal.name == "Alias" -> { + val range = node.inputRange ?: throw RuntimeException("Null inputRange for Alias Nonterminal node of SPPF") + return listOf(listOf(OutEdge(range.from, "Alias", range.to))) + } + + //Do not extract subpaths for non-terminal PointsTo because they are useless. + is NonterminalType if nodeType.startState.nonterminal.name == "PointsTo" -> { + val range = node.inputRange ?: throw RuntimeException("Null inputRange for PointsTo Nonterminal node of SPPF") + return listOf(listOf(OutEdge(range.from, "PointsTo", range.to))) + } + + is EpsilonNonterminalType -> { + return listOf(emptyList()) + } + + is EmptyType -> { + throw RuntimeException("SPPF cannot contain EmptyRange") + } + + is IntermediateType<*>, is NonterminalType -> { + val subPaths = node.children.map { getPathFromSppf(it, maxDepth - 1) } + if (subPaths.any { it == null }) { + return null + } + val paths = subPaths.filterNotNull().fold(listOf(listOf())) { acc, lst -> + acc.flatMap { list -> lst.map { element -> list + element } } + } + return paths + } + + is Range -> { + val paths = node.children.map { + getPathFromSppf(it, maxDepth - 1)?.filterNotNull() + }.filterNotNull().flatten() + if (paths.isEmpty()) { + return null + } + return paths + } + + else -> { + println("Type of node is ${node.type.javaClass}") + throw RuntimeException("Unknown RangeType in SPPF") + } + } +} + +fun saveSppf(name: String, sppf: Set>) { + val graphName = name.removeSuffix(".dot") + val genPath = Path.of("gen", "sppf") + Files.createDirectories(genPath) + val file = genPath.resolve("${graphName}_sppf.dot").toFile() + + file.printWriter().use { out -> + out.println(getSppfDot(sppf)) + } +} + +fun main() { + listOf("graph_1.dot", "graph_2.dot", "graph_3.dot", "graph_4.dot").forEach { graphName -> + val graph = readGraph(graphName) + val grammar = PointsToGrammar() + val gll = Gll.gll(grammar.rsm, graph) + val sppf = gll.parse() + println("Founded paths in $graphName") + sppf.forEach { getPathFromSppf(it, maxDepth = 30)?.forEach { println(it.toString()) } } + println() + saveSppf(graphName, sppf) + } +} diff --git a/cfpq-paths-app/src/main/resources/figures/Epsilon_example.dot b/cfpq-paths-app/src/main/resources/figures/Epsilon_example.dot new file mode 100644 index 000000000..fe56a9c3e --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/Epsilon_example.dot @@ -0,0 +1,3 @@ +digraph g{ +_0_12 [label = "2 Epsilon RSM: S_0, input: [0, 0]", shape = invhouse] +} \ No newline at end of file diff --git a/cfpq-paths-app/src/main/resources/figures/Epsilon_example.dot.svg b/cfpq-paths-app/src/main/resources/figures/Epsilon_example.dot.svg new file mode 100644 index 000000000..e39d541be --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/Epsilon_example.dot.svg @@ -0,0 +1,19 @@ + + + + + + +g + + + +_0_12 + +2     Epsilon RSM: S_0, input: [0, 0] + + + diff --git a/cfpq-paths-app/src/main/resources/figures/Intermediate_example.dot b/cfpq-paths-app/src/main/resources/figures/Intermediate_example.dot new file mode 100644 index 000000000..12323b224 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/Intermediate_example.dot @@ -0,0 +1,4 @@ +digraph g{ +_1_8 [label = "16 Intermediate input: 1, rsm: Alias_1, input: [0, 2]", shape = plain] +} + diff --git a/cfpq-paths-app/src/main/resources/figures/Intermediate_example.dot.svg b/cfpq-paths-app/src/main/resources/figures/Intermediate_example.dot.svg new file mode 100644 index 000000000..8487bffd2 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/Intermediate_example.dot.svg @@ -0,0 +1,18 @@ + + + + + + +g + + + +_1_8 +16     Intermediate input: 1, rsm: Alias_1, input: [0, 2] + + + diff --git a/cfpq-paths-app/src/main/resources/figures/Nonterm_example.dot b/cfpq-paths-app/src/main/resources/figures/Nonterm_example.dot new file mode 100644 index 000000000..b65f1ef17 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/Nonterm_example.dot @@ -0,0 +1,4 @@ +digraph g{ +_1_0 [label = "0 Nonterminal S, input: [0, 4]", shape = invtrapezium] +} + diff --git a/cfpq-paths-app/src/main/resources/figures/Nonterm_example.dot.svg b/cfpq-paths-app/src/main/resources/figures/Nonterm_example.dot.svg new file mode 100644 index 000000000..b4e60e705 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/Nonterm_example.dot.svg @@ -0,0 +1,19 @@ + + + + + + +g + + + +_1_0 + +0     Nonterminal S, input: [0, 4] + + + diff --git a/cfpq-paths-app/src/main/resources/figures/Range_example.dot b/cfpq-paths-app/src/main/resources/figures/Range_example.dot new file mode 100644 index 000000000..aa8f56187 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/Range_example.dot @@ -0,0 +1,4 @@ +digraph g{ +_1_1 [label = "1 Range , input: [0, 4], rsm: [S_0, S_2]", shape = ellipse] +} + diff --git a/cfpq-paths-app/src/main/resources/figures/Range_example.dot.svg b/cfpq-paths-app/src/main/resources/figures/Range_example.dot.svg new file mode 100644 index 000000000..e1b36d3f1 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/Range_example.dot.svg @@ -0,0 +1,19 @@ + + + + + + +g + + + +_1_1 + +1     Range , input: [0, 4], rsm: [S_0, S_2] + + + diff --git a/cfpq-paths-app/src/main/resources/figures/Terminal_example.dot b/cfpq-paths-app/src/main/resources/figures/Terminal_example.dot new file mode 100644 index 000000000..b64dea439 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/Terminal_example.dot @@ -0,0 +1,4 @@ +digraph g{ +_1_5 [label = "13 Terminal 'alloc', input: [3, 4]", shape = rectangle] +} + diff --git a/cfpq-paths-app/src/main/resources/figures/Terminal_example.dot.svg b/cfpq-paths-app/src/main/resources/figures/Terminal_example.dot.svg new file mode 100644 index 000000000..9947cddfd --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/Terminal_example.dot.svg @@ -0,0 +1,19 @@ + + + + + + +g + + + +_1_5 + +13     Terminal 'alloc', input: [3, 4] + + + diff --git a/cfpq-paths-app/src/main/resources/figures/graph_1.dot b/cfpq-paths-app/src/main/resources/figures/graph_1.dot new file mode 100644 index 000000000..db6f85581 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_1.dot @@ -0,0 +1,27 @@ +digraph { + start -> 1; + 1 -> 0 [label = "alloc"]; + 0 -> 1 [label = "alloc_r"]; + 2 -> 1 [label = "assign"]; + 1 -> 2 [label = "assign_r"]; + 2 -> 3 [label = "store_0"]; + 3 -> 2 [label = "store_0_r"]; + 3 -> 4 [label = "alloc"]; + 4 -> 3 [label = "alloc_r"]; + 5 -> 3 [label = "assign"]; + 3 -> 5 [label = "assign_r"]; + 5 -> 6 [label = "store_1"]; + 6 -> 5 [label = "store_1_r"]; + 6 -> 7 [label = "alloc"]; + 7 -> 6 [label = "alloc_r"]; + + 0[label = "0 | new X()"] + 1[label = "1 | n"] + 2[label = "2 | l"] + 3[label = "3 | y"] + 4[label = "4 | new Y()"] + 5[label = "5 | t"] + 6[label = "6 | z"] + 7[label = "7 | new Z()"] + +} diff --git a/cfpq-paths-app/src/main/resources/figures/graph_1.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_1.dot.svg new file mode 100644 index 000000000..9c58204f4 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_1.dot.svg @@ -0,0 +1,171 @@ + + + + + + +%3 + + + +start + +start + + + +1 + +1 | n + + + +start->1 + + + + + +0 + +0 | new X() + + + +1->0 + + +alloc + + + +2 + +2 | l + + + +1->2 + + +assign_r + + + +0->1 + + +alloc_r + + + +2->1 + + +assign + + + +3 + +3 | y + + + +2->3 + + +store_0 + + + +3->2 + + +store_0_r + + + +4 + +4 | new Y() + + + +3->4 + + +alloc + + + +5 + +5 | t + + + +3->5 + + +assign_r + + + +4->3 + + +alloc_r + + + +5->3 + + +assign + + + +6 + +6 | z + + + +5->6 + + +store_1 + + + +6->5 + + +store_1_r + + + +7 + +7 | new Z() + + + +6->7 + + +alloc + + + +7->6 + + +alloc_r + + + diff --git a/cfpq-paths-app/src/main/resources/figures/graph_1_sppf.dot b/cfpq-paths-app/src/main/resources/figures/graph_1_sppf.dot new file mode 100644 index 000000000..25b11c79e --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_1_sppf.dot @@ -0,0 +1,176 @@ +digraph g { +labelloc="t" +label="" +subgraph cluster_0{ +labelloc="t" +_0_0 [label = "0 Nonterminal S, input: [1, 0]", shape = invtrapezium] +_0_1 [label = "1 Range , input: [1, 0], rsm: [S_0, S_2]", shape = ellipse] +_0_2 [label = "2 Nonterminal PointsTo, input: [1, 0]", shape = invtrapezium] +_0_3 [label = "3 Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_0_4 [label = "4 Terminal 'alloc', input: [1, 0]", shape = rectangle] +_0_0->_0_1 +_0_1->_0_2 +_0_2->_0_3 +_0_3->_0_4 +} + +subgraph cluster_1{ +labelloc="t" +_1_0 [label = "0 Nonterminal S, input: [1, 4]", shape = invtrapezium] +_1_1 [label = "1 Range , input: [1, 4], rsm: [S_0, S_2]", shape = ellipse] +_1_2 [label = "10 Nonterminal Alias, input: [1, 2]", shape = invtrapezium] +_1_3 [label = "11 Terminal 'store_0', input: [2, 3]", shape = rectangle] +_1_4 [label = "12 Terminal 'alloc', input: [3, 4]", shape = rectangle] +_1_5 [label = "13 Range , input: [1, 2], rsm: [Alias_0, Alias_2]", shape = ellipse] +_1_6 [label = "14 Intermediate input: 0, rsm: Alias_1, input: [1, 2]", shape = plain] +_1_7 [label = "15 Range , input: [1, 0], rsm: [Alias_0, Alias_1]", shape = ellipse] +_1_8 [label = "16 Range , input: [0, 2], rsm: [Alias_1, Alias_2]", shape = ellipse] +_1_9 [label = "17 Nonterminal PointsTo, input: [1, 0]", shape = invtrapezium] +_1_10 [label = "18 Nonterminal FlowsTo, input: [0, 2]", shape = invtrapezium] +_1_11 [label = "19 Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_1_12 [label = "2 Intermediate input: 3, rsm: S_0, input: [1, 4]", shape = plain] +_1_13 [label = "20 Range , input: [0, 2], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_1_14 [label = "21 Terminal 'alloc', input: [1, 0]", shape = rectangle] +_1_15 [label = "22 Intermediate input: 1, rsm: FlowsTo_1, input: [0, 2]", shape = plain] +_1_16 [label = "23 Range , input: [0, 1], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_1_17 [label = "24 Range , input: [1, 2], rsm: [FlowsTo_1, FlowsTo_1]", shape = ellipse] +_1_18 [label = "25 Terminal 'alloc_r', input: [0, 1]", shape = rectangle] +_1_19 [label = "26 Terminal 'assign_r', input: [1, 2]", shape = rectangle] +_1_20 [label = "3 Range , input: [1, 3], rsm: [S_0, S_0]", shape = ellipse] +_1_21 [label = "4 Range , input: [3, 4], rsm: [S_0, S_2]", shape = ellipse] +_1_22 [label = "5 Intermediate input: 2, rsm: S_1, input: [1, 3]", shape = plain] +_1_23 [label = "6 Nonterminal PointsTo, input: [3, 4]", shape = invtrapezium] +_1_24 [label = "7 Range , input: [1, 2], rsm: [S_0, S_1]", shape = ellipse] +_1_25 [label = "8 Range , input: [2, 3], rsm: [S_1, S_0]", shape = ellipse] +_1_26 [label = "9 Range , input: [3, 4], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_1_0->_1_1 +_1_1->_1_12 +_1_2->_1_5 +_1_5->_1_6 +_1_6->_1_7 +_1_6->_1_8 +_1_7->_1_9 +_1_8->_1_10 +_1_9->_1_11 +_1_10->_1_13 +_1_11->_1_14 +_1_12->_1_20 +_1_12->_1_21 +_1_13->_1_15 +_1_15->_1_16 +_1_15->_1_17 +_1_16->_1_18 +_1_17->_1_19 +_1_20->_1_22 +_1_21->_1_23 +_1_22->_1_24 +_1_22->_1_25 +_1_23->_1_26 +_1_24->_1_2 +_1_25->_1_3 +_1_26->_1_4 +} + +subgraph cluster_2{ +labelloc="t" +_2_0 [label = "0 Nonterminal S, input: [1, 7]", shape = invtrapezium] +_2_1 [label = "1 Range , input: [1, 7], rsm: [S_0, S_2]", shape = ellipse] +_2_2 [label = "10 Intermediate input: 3, rsm: S_0, input: [1, 5]", shape = plain] +_2_3 [label = "11 Terminal 'store_1', input: [5, 6]", shape = rectangle] +_2_4 [label = "12 Terminal 'alloc', input: [6, 7]", shape = rectangle] +_2_5 [label = "13 Range , input: [1, 3], rsm: [S_0, S_0]", shape = ellipse] +_2_6 [label = "14 Range , input: [3, 5], rsm: [S_0, S_1]", shape = ellipse] +_2_7 [label = "15 Intermediate input: 2, rsm: S_1, input: [1, 3]", shape = plain] +_2_8 [label = "16 Nonterminal Alias, input: [3, 5]", shape = invtrapezium] +_2_9 [label = "17 Range , input: [1, 2], rsm: [S_0, S_1]", shape = ellipse] +_2_10 [label = "18 Range , input: [2, 3], rsm: [S_1, S_0]", shape = ellipse] +_2_11 [label = "19 Range , input: [3, 5], rsm: [Alias_0, Alias_2]", shape = ellipse] +_2_12 [label = "2 Intermediate input: 6, rsm: S_0, input: [1, 7]", shape = plain] +_2_13 [label = "20 Nonterminal Alias, input: [1, 2]", shape = invtrapezium] +_2_14 [label = "21 Terminal 'store_0', input: [2, 3]", shape = rectangle] +_2_15 [label = "22 Intermediate input: 4, rsm: Alias_1, input: [3, 5]", shape = plain] +_2_16 [label = "23 Range , input: [1, 2], rsm: [Alias_0, Alias_2]", shape = ellipse] +_2_17 [label = "24 Range , input: [3, 4], rsm: [Alias_0, Alias_1]", shape = ellipse] +_2_18 [label = "25 Range , input: [4, 5], rsm: [Alias_1, Alias_2]", shape = ellipse] +_2_19 [label = "26 Intermediate input: 0, rsm: Alias_1, input: [1, 2]", shape = plain] +_2_20 [label = "27 Nonterminal PointsTo, input: [3, 4]", shape = invtrapezium] +_2_21 [label = "28 Nonterminal FlowsTo, input: [4, 5]", shape = invtrapezium] +_2_22 [label = "29 Range , input: [1, 0], rsm: [Alias_0, Alias_1]", shape = ellipse] +_2_23 [label = "3 Range , input: [1, 6], rsm: [S_0, S_0]", shape = ellipse] +_2_24 [label = "30 Range , input: [0, 2], rsm: [Alias_1, Alias_2]", shape = ellipse] +_2_25 [label = "31 Range , input: [3, 4], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_2_26 [label = "32 Range , input: [4, 5], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_2_27 [label = "33 Nonterminal PointsTo, input: [1, 0]", shape = invtrapezium] +_2_28 [label = "34 Nonterminal FlowsTo, input: [0, 2]", shape = invtrapezium] +_2_29 [label = "35 Terminal 'alloc', input: [3, 4]", shape = rectangle] +_2_30 [label = "36 Intermediate input: 3, rsm: FlowsTo_1, input: [4, 5]", shape = plain] +_2_31 [label = "37 Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_2_32 [label = "38 Range , input: [0, 2], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_2_33 [label = "39 Range , input: [4, 3], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_2_34 [label = "4 Range , input: [6, 7], rsm: [S_0, S_2]", shape = ellipse] +_2_35 [label = "40 Range , input: [3, 5], rsm: [FlowsTo_1, FlowsTo_1]", shape = ellipse] +_2_36 [label = "41 Terminal 'alloc', input: [1, 0]", shape = rectangle] +_2_37 [label = "42 Intermediate input: 1, rsm: FlowsTo_1, input: [0, 2]", shape = plain] +_2_38 [label = "43 Terminal 'alloc_r', input: [4, 3]", shape = rectangle] +_2_39 [label = "44 Terminal 'assign_r', input: [3, 5]", shape = rectangle] +_2_40 [label = "45 Range , input: [0, 1], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_2_41 [label = "46 Range , input: [1, 2], rsm: [FlowsTo_1, FlowsTo_1]", shape = ellipse] +_2_42 [label = "47 Terminal 'alloc_r', input: [0, 1]", shape = rectangle] +_2_43 [label = "48 Terminal 'assign_r', input: [1, 2]", shape = rectangle] +_2_44 [label = "5 Intermediate input: 5, rsm: S_1, input: [1, 6]", shape = plain] +_2_45 [label = "6 Nonterminal PointsTo, input: [6, 7]", shape = invtrapezium] +_2_46 [label = "7 Range , input: [1, 5], rsm: [S_0, S_1]", shape = ellipse] +_2_47 [label = "8 Range , input: [5, 6], rsm: [S_1, S_0]", shape = ellipse] +_2_48 [label = "9 Range , input: [6, 7], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_2_0->_2_1 +_2_1->_2_12 +_2_2->_2_5 +_2_2->_2_6 +_2_5->_2_7 +_2_6->_2_8 +_2_7->_2_9 +_2_7->_2_10 +_2_8->_2_11 +_2_9->_2_13 +_2_10->_2_14 +_2_11->_2_15 +_2_12->_2_23 +_2_12->_2_34 +_2_13->_2_16 +_2_15->_2_17 +_2_15->_2_18 +_2_16->_2_19 +_2_17->_2_20 +_2_18->_2_21 +_2_19->_2_22 +_2_19->_2_24 +_2_20->_2_25 +_2_21->_2_26 +_2_22->_2_27 +_2_23->_2_44 +_2_24->_2_28 +_2_25->_2_29 +_2_26->_2_30 +_2_27->_2_31 +_2_28->_2_32 +_2_30->_2_33 +_2_30->_2_35 +_2_31->_2_36 +_2_32->_2_37 +_2_33->_2_38 +_2_34->_2_45 +_2_35->_2_39 +_2_37->_2_40 +_2_37->_2_41 +_2_40->_2_42 +_2_41->_2_43 +_2_44->_2_46 +_2_44->_2_47 +_2_45->_2_48 +_2_46->_2_2 +_2_47->_2_3 +_2_48->_2_4 +} + +} + diff --git a/cfpq-paths-app/src/main/resources/figures/graph_1_sppf.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_1_sppf.dot.svg new file mode 100644 index 000000000..76a662962 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_1_sppf.dot.svg @@ -0,0 +1,967 @@ + + + + + + +g + + +cluster_0 + + + +cluster_1 + + + +cluster_2 + + + + +_0_0 + +0     Nonterminal S, input: [1, 0] + + + +_0_1 + +1     Range , input: [1, 0], rsm: [S_0, S_2] + + + +_0_0->_0_1 + + + + + +_0_2 + +2     Nonterminal PointsTo, input: [1, 0] + + + +_0_1->_0_2 + + + + + +_0_3 + +3     Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5] + + + +_0_2->_0_3 + + + + + +_0_4 + +4     Terminal 'alloc', input: [1, 0] + + + +_0_3->_0_4 + + + + + +_1_0 + +0     Nonterminal S, input: [1, 4] + + + +_1_1 + +1     Range , input: [1, 4], rsm: [S_0, S_2] + + + +_1_0->_1_1 + + + + + +_1_12 +2     Intermediate input: 3, rsm: S_0, input: [1, 4] + + + +_1_1->_1_12 + + + + + +_1_2 + +10     Nonterminal Alias, input: [1, 2] + + + +_1_5 + +13     Range , input: [1, 2], rsm: [Alias_0, Alias_2] + + + +_1_2->_1_5 + + + + + +_1_3 + +11     Terminal 'store_0', input: [2, 3] + + + +_1_4 + +12     Terminal 'alloc', input: [3, 4] + + + +_1_6 +14     Intermediate input: 0, rsm: Alias_1, input: [1, 2] + + + +_1_5->_1_6 + + + + + +_1_7 + +15     Range , input: [1, 0], rsm: [Alias_0, Alias_1] + + + +_1_6->_1_7 + + + + + +_1_8 + +16     Range , input: [0, 2], rsm: [Alias_1, Alias_2] + + + +_1_6->_1_8 + + + + + +_1_9 + +17     Nonterminal PointsTo, input: [1, 0] + + + +_1_7->_1_9 + + + + + +_1_10 + +18     Nonterminal FlowsTo, input: [0, 2] + + + +_1_8->_1_10 + + + + + +_1_11 + +19     Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5] + + + +_1_9->_1_11 + + + + + +_1_13 + +20     Range , input: [0, 2], rsm: [FlowsTo_0, FlowsTo_1] + + + +_1_10->_1_13 + + + + + +_1_14 + +21     Terminal 'alloc', input: [1, 0] + + + +_1_11->_1_14 + + + + + +_1_20 + +3     Range , input: [1, 3], rsm: [S_0, S_0] + + + +_1_12->_1_20 + + + + + +_1_21 + +4     Range , input: [3, 4], rsm: [S_0, S_2] + + + +_1_12->_1_21 + + + + + +_1_15 +22     Intermediate input: 1, rsm: FlowsTo_1, input: [0, 2] + + + +_1_13->_1_15 + + + + + +_1_16 + +23     Range , input: [0, 1], rsm: [FlowsTo_0, FlowsTo_1] + + + +_1_15->_1_16 + + + + + +_1_17 + +24     Range , input: [1, 2], rsm: [FlowsTo_1, FlowsTo_1] + + + +_1_15->_1_17 + + + + + +_1_18 + +25     Terminal 'alloc_r', input: [0, 1] + + + +_1_16->_1_18 + + + + + +_1_19 + +26     Terminal 'assign_r', input: [1, 2] + + + +_1_17->_1_19 + + + + + +_1_22 +5     Intermediate input: 2, rsm: S_1, input: [1, 3] + + + +_1_20->_1_22 + + + + + +_1_23 + +6     Nonterminal PointsTo, input: [3, 4] + + + +_1_21->_1_23 + + + + + +_1_24 + +7     Range , input: [1, 2], rsm: [S_0, S_1] + + + +_1_22->_1_24 + + + + + +_1_25 + +8     Range , input: [2, 3], rsm: [S_1, S_0] + + + +_1_22->_1_25 + + + + + +_1_26 + +9     Range , input: [3, 4], rsm: [PointsTo_0, PointsTo_5] + + + +_1_23->_1_26 + + + + + +_1_24->_1_2 + + + + + +_1_25->_1_3 + + + + + +_1_26->_1_4 + + + + + +_2_0 + +0     Nonterminal S, input: [1, 7] + + + +_2_1 + +1     Range , input: [1, 7], rsm: [S_0, S_2] + + + +_2_0->_2_1 + + + + + +_2_12 +2     Intermediate input: 6, rsm: S_0, input: [1, 7] + + + +_2_1->_2_12 + + + + + +_2_2 +10     Intermediate input: 3, rsm: S_0, input: [1, 5] + + + +_2_5 + +13     Range , input: [1, 3], rsm: [S_0, S_0] + + + +_2_2->_2_5 + + + + + +_2_6 + +14     Range , input: [3, 5], rsm: [S_0, S_1] + + + +_2_2->_2_6 + + + + + +_2_3 + +11     Terminal 'store_1', input: [5, 6] + + + +_2_4 + +12     Terminal 'alloc', input: [6, 7] + + + +_2_7 +15     Intermediate input: 2, rsm: S_1, input: [1, 3] + + + +_2_5->_2_7 + + + + + +_2_8 + +16     Nonterminal Alias, input: [3, 5] + + + +_2_6->_2_8 + + + + + +_2_9 + +17     Range , input: [1, 2], rsm: [S_0, S_1] + + + +_2_7->_2_9 + + + + + +_2_10 + +18     Range , input: [2, 3], rsm: [S_1, S_0] + + + +_2_7->_2_10 + + + + + +_2_11 + +19     Range , input: [3, 5], rsm: [Alias_0, Alias_2] + + + +_2_8->_2_11 + + + + + +_2_13 + +20     Nonterminal Alias, input: [1, 2] + + + +_2_9->_2_13 + + + + + +_2_14 + +21     Terminal 'store_0', input: [2, 3] + + + +_2_10->_2_14 + + + + + +_2_15 +22     Intermediate input: 4, rsm: Alias_1, input: [3, 5] + + + +_2_11->_2_15 + + + + + +_2_23 + +3     Range , input: [1, 6], rsm: [S_0, S_0] + + + +_2_12->_2_23 + + + + + +_2_34 + +4     Range , input: [6, 7], rsm: [S_0, S_2] + + + +_2_12->_2_34 + + + + + +_2_16 + +23     Range , input: [1, 2], rsm: [Alias_0, Alias_2] + + + +_2_13->_2_16 + + + + + +_2_17 + +24     Range , input: [3, 4], rsm: [Alias_0, Alias_1] + + + +_2_15->_2_17 + + + + + +_2_18 + +25     Range , input: [4, 5], rsm: [Alias_1, Alias_2] + + + +_2_15->_2_18 + + + + + +_2_19 +26     Intermediate input: 0, rsm: Alias_1, input: [1, 2] + + + +_2_16->_2_19 + + + + + +_2_20 + +27     Nonterminal PointsTo, input: [3, 4] + + + +_2_17->_2_20 + + + + + +_2_21 + +28     Nonterminal FlowsTo, input: [4, 5] + + + +_2_18->_2_21 + + + + + +_2_22 + +29     Range , input: [1, 0], rsm: [Alias_0, Alias_1] + + + +_2_19->_2_22 + + + + + +_2_24 + +30     Range , input: [0, 2], rsm: [Alias_1, Alias_2] + + + +_2_19->_2_24 + + + + + +_2_25 + +31     Range , input: [3, 4], rsm: [PointsTo_0, PointsTo_5] + + + +_2_20->_2_25 + + + + + +_2_26 + +32     Range , input: [4, 5], rsm: [FlowsTo_0, FlowsTo_1] + + + +_2_21->_2_26 + + + + + +_2_27 + +33     Nonterminal PointsTo, input: [1, 0] + + + +_2_22->_2_27 + + + + + +_2_44 +5     Intermediate input: 5, rsm: S_1, input: [1, 6] + + + +_2_23->_2_44 + + + + + +_2_28 + +34     Nonterminal FlowsTo, input: [0, 2] + + + +_2_24->_2_28 + + + + + +_2_29 + +35     Terminal 'alloc', input: [3, 4] + + + +_2_25->_2_29 + + + + + +_2_30 +36     Intermediate input: 3, rsm: FlowsTo_1, input: [4, 5] + + + +_2_26->_2_30 + + + + + +_2_31 + +37     Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5] + + + +_2_27->_2_31 + + + + + +_2_32 + +38     Range , input: [0, 2], rsm: [FlowsTo_0, FlowsTo_1] + + + +_2_28->_2_32 + + + + + +_2_33 + +39     Range , input: [4, 3], rsm: [FlowsTo_0, FlowsTo_1] + + + +_2_30->_2_33 + + + + + +_2_35 + +40     Range , input: [3, 5], rsm: [FlowsTo_1, FlowsTo_1] + + + +_2_30->_2_35 + + + + + +_2_36 + +41     Terminal 'alloc', input: [1, 0] + + + +_2_31->_2_36 + + + + + +_2_37 +42     Intermediate input: 1, rsm: FlowsTo_1, input: [0, 2] + + + +_2_32->_2_37 + + + + + +_2_38 + +43     Terminal 'alloc_r', input: [4, 3] + + + +_2_33->_2_38 + + + + + +_2_45 + +6     Nonterminal PointsTo, input: [6, 7] + + + +_2_34->_2_45 + + + + + +_2_39 + +44     Terminal 'assign_r', input: [3, 5] + + + +_2_35->_2_39 + + + + + +_2_40 + +45     Range , input: [0, 1], rsm: [FlowsTo_0, FlowsTo_1] + + + +_2_37->_2_40 + + + + + +_2_41 + +46     Range , input: [1, 2], rsm: [FlowsTo_1, FlowsTo_1] + + + +_2_37->_2_41 + + + + + +_2_42 + +47     Terminal 'alloc_r', input: [0, 1] + + + +_2_40->_2_42 + + + + + +_2_43 + +48     Terminal 'assign_r', input: [1, 2] + + + +_2_41->_2_43 + + + + + +_2_46 + +7     Range , input: [1, 5], rsm: [S_0, S_1] + + + +_2_44->_2_46 + + + + + +_2_47 + +8     Range , input: [5, 6], rsm: [S_1, S_0] + + + +_2_44->_2_47 + + + + + +_2_48 + +9     Range , input: [6, 7], rsm: [PointsTo_0, PointsTo_5] + + + +_2_45->_2_48 + + + + + +_2_46->_2_2 + + + + + +_2_47->_2_3 + + + + + +_2_48->_2_4 + + + + + diff --git a/cfpq-paths-app/src/main/resources/figures/graph_2.dot b/cfpq-paths-app/src/main/resources/figures/graph_2.dot new file mode 100644 index 000000000..89921de33 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_2.dot @@ -0,0 +1,23 @@ +digraph { + start -> 0; + 0 -> 1 [label = "alloc"]; + 1 -> 0 [label = "alloc_r"]; + 2 -> 0 [label = "assign"]; + 0 -> 2 [label = "assign_r"]; + 2 -> 3 [label = "store_0"]; + 3 -> 2 [label = "store_0_r"]; + 3 -> 4 [label = "alloc"]; + 4 -> 3 [label = "alloc_r"]; + 2 -> 5 [label = "assign"]; + 5 -> 2 [label = "assign_r"]; + 5 -> 2 [label = "load_0"]; + 2 -> 5 [label = "load_0_r"]; + + 0[label = "0 | n"] + 1[label = "1 | new X() // line 1"] + 2[label = "2 | l"] + 3[label = "3 | tmp1 // line 4"] + 4[label = "4 | new X() // line 4"] + 5[label = "5 | tmp2 // line 5"] + +} diff --git a/cfpq-paths-app/src/main/resources/figures/graph_2.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_2.dot.svg new file mode 100644 index 000000000..823dd0988 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_2.dot.svg @@ -0,0 +1,145 @@ + + + + + + +%191 + + + +start + +start + + + +0 + +0 | n + + + +start->0 + + + + + +1 + +1 | new X() // line 1 + + + +0->1 + + +alloc + + + +2 + +2 | l + + + +0->2 + + +assign_r + + + +1->0 + + +alloc_r + + + +2->0 + + +assign + + + +3 + +3 | tmp1 // line 4 + + + +2->3 + + +store_0 + + + +5 + +5 | tmp2 // line 5 + + + +2->5 + + +assign + + + +2->5 + + +load_0_r + + + +3->2 + + +store_0_r + + + +4 + +4 | new X() // line 4 + + + +3->4 + + +alloc + + + +4->3 + + +alloc_r + + + +5->2 + + +assign_r + + + +5->2 + + +load_0 + + + diff --git a/cfpq-paths-app/src/main/resources/figures/graph_2_sppf.dot b/cfpq-paths-app/src/main/resources/figures/graph_2_sppf.dot new file mode 100644 index 000000000..7ac8ed0b9 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_2_sppf.dot @@ -0,0 +1,177 @@ +digraph g { +labelloc="t" +label="" + +subgraph cluster_1{ +labelloc="t" +_1_0 [label = "0 Nonterminal S, input: [0, 4]", shape = invtrapezium] +_1_1 [label = "1 Range , input: [0, 4], rsm: [S_0, S_2]", shape = ellipse] +_1_2 [label = "10 Nonterminal Alias, input: [0, 2]", shape = invtrapezium] +_1_3 [label = "11 Intermediate input: 3, rsm: S_0, input: [0, 2]", shape = plain] +_1_4 [label = "12 Terminal 'store_0', input: [2, 3]", shape = rectangle] +_1_5 [label = "13 Terminal 'alloc', input: [3, 4]", shape = rectangle] +_1_6 [label = "14 Range , input: [0, 2], rsm: [Alias_0, Alias_2]", shape = ellipse] +_1_7 [label = "15 Range , input: [3, 2], rsm: [S_0, S_1]", shape = ellipse] +_1_8 [label = "16 Intermediate input: 1, rsm: Alias_1, input: [0, 2]", shape = plain] +_1_9 [label = "17 Nonterminal Alias, input: [3, 2]", shape = invtrapezium] +_1_10 [label = "18 Range , input: [0, 1], rsm: [Alias_0, Alias_1]", shape = ellipse] +_1_11 [label = "19 Range , input: [1, 2], rsm: [Alias_1, Alias_2]", shape = ellipse] +_1_12 [label = "2 Intermediate input: 3, rsm: S_0, input: [0, 4]", shape = plain] +_1_13 [label = "20 Range , input: [3, 2], rsm: [Alias_0, Alias_2]", shape = ellipse] +_1_14 [label = "21 Nonterminal PointsTo, input: [0, 1]", shape = invtrapezium] +_1_15 [label = "22 Nonterminal FlowsTo, input: [1, 2]", shape = invtrapezium] +_1_16 [label = "23 Intermediate input: 4, rsm: Alias_1, input: [3, 2]", shape = plain] +_1_17 [label = "24 Range , input: [0, 1], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_1_18 [label = "25 Range , input: [1, 2], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_1_19 [label = "26 Range , input: [3, 4], rsm: [Alias_0, Alias_1]", shape = ellipse] +_1_20 [label = "27 Range , input: [4, 2], rsm: [Alias_1, Alias_2]", shape = ellipse, color="red"] +_1_21 [label = "28 Terminal 'alloc', input: [0, 1]", shape = rectangle] +_1_22 [label = "29 Intermediate input: 0, rsm: FlowsTo_1, input: [1, 2]", shape = plain] +_1_23 [label = "3 Range , input: [0, 3], rsm: [S_0, S_0]", shape = ellipse] +_1_24 [label = "30 Nonterminal PointsTo, input: [3, 4]", shape = invtrapezium] +_1_25 [label = "31 Nonterminal FlowsTo, input: [4, 2]", shape = invtrapezium, color="red"] +_1_26 [label = "32 Range , input: [1, 0], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_1_27 [label = "33 Range , input: [0, 2], rsm: [FlowsTo_1, FlowsTo_1]", shape = ellipse] +_1_28 [label = "34 Range , input: [4, 2], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse, color="red"] +_1_29 [label = "35 Terminal 'alloc_r', input: [1, 0]", shape = rectangle] +_1_30 [label = "36 Terminal 'assign_r', input: [0, 2]", shape = rectangle] +_1_31 [label = "37 Intermediate input: 5, rsm: FlowsTo_1, input: [4, 2]", shape = plain, color="red"] +_1_32 [label = "38 Range , input: [4, 5], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse, color="red"] +_1_33 [label = "39 Range , input: [5, 2], rsm: [FlowsTo_1, FlowsTo_1]", shape = ellipse] +_1_34 [label = "4 Range , input: [3, 4], rsm: [S_0, S_2]", shape = ellipse] +_1_35 [label = "40 Intermediate input: 2, rsm: FlowsTo_9, input: [4, 5]", shape = plain, color="red"] +_1_36 [label = "41 Terminal 'assign_r', input: [5, 2]", shape = rectangle] +_1_37 [label = "42 Range , input: [4, 2], rsm: [FlowsTo_0, FlowsTo_9]", shape = ellipse, color="red"] +_1_38 [label = "43 Range , input: [2, 5], rsm: [FlowsTo_9, FlowsTo_1]", shape = ellipse] +_1_39 [label = "44 Intermediate input: 2, rsm: FlowsTo_2, input: [4, 2]", shape = plain, color="red"] +_1_40 [label = "45 Terminal 'load_0_r', input: [2, 5]", shape = rectangle] +_1_41 [label = "46 Range , input: [4, 2], rsm: [FlowsTo_0, FlowsTo_2]", shape = ellipse] +_1_42 [label = "47 Range , input: [2, 2], rsm: [FlowsTo_2, FlowsTo_9]", shape = ellipse, color="red"] +_1_43 [label = "48 Intermediate input: 3, rsm: FlowsTo_1, input: [4, 2]", shape = plain] +_1_44 [label = "49 Nonterminal Alias, input: [2, 2]", shape = invtrapezium, color="red"] +_1_45 [label = "5 Intermediate input: 2, rsm: S_1, input: [0, 3]", shape = plain] +_1_46 [label = "50 Range , input: [4, 3], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_1_47 [label = "51 Range , input: [3, 2], rsm: [FlowsTo_1, FlowsTo_2]", shape = ellipse] +_1_48 [label = "52 Range , input: [2, 2], rsm: [Alias_0, Alias_2]", shape = ellipse, color="red"] +_1_49 [label = "53 Terminal 'alloc_r', input: [4, 3]", shape = rectangle] +_1_50 [label = "54 Terminal 'store_0_r', input: [3, 2]", shape = rectangle] +_1_51 [label = "55 Intermediate input: 1, rsm: Alias_1, input: [2, 2]", shape = plain] +_1_52 [label = "56 Intermediate input: 4, rsm: Alias_1, input: [2, 2]", shape = plain, color="red"] +_1_53 [label = "57 Range , input: [2, 1], rsm: [Alias_0, Alias_1]", shape = ellipse] +_1_54 [label = "58 Range , input: [2, 4], rsm: [Alias_0, Alias_1]", shape = ellipse] +_1_55 [label = "59 Nonterminal PointsTo, input: [2, 1]", shape = invtrapezium] +_1_56 [label = "6 Nonterminal PointsTo, input: [3, 4]", shape = invtrapezium] +_1_57 [label = "60 Nonterminal PointsTo, input: [2, 4]", shape = invtrapezium] +_1_58 [label = "61 Range , input: [2, 1], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_1_59 [label = "62 Range , input: [2, 4], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_1_60 [label = "63 Intermediate input: 0, rsm: PointsTo_0, input: [2, 1]", shape = plain] +_1_61 [label = "64 Intermediate input: 3, rsm: PointsTo_0, input: [2, 4]", shape = plain] +_1_62 [label = "65 Range , input: [2, 0], rsm: [PointsTo_0, PointsTo_0]", shape = ellipse] +_1_63 [label = "66 Range , input: [2, 3], rsm: [PointsTo_0, PointsTo_0]", shape = ellipse] +_1_64 [label = "67 Terminal 'assign', input: [2, 0]", shape = rectangle] +_1_65 [label = "68 Intermediate input: 2, rsm: PointsTo_9, input: [2, 3]", shape = plain] +_1_66 [label = "69 Range , input: [2, 2], rsm: [PointsTo_0, PointsTo_9]", shape = ellipse] +_1_67 [label = "7 Range , input: [0, 2], rsm: [S_0, S_1]", shape = ellipse] +_1_68 [label = "70 Range , input: [2, 3], rsm: [PointsTo_9, PointsTo_0]", shape = ellipse] +_1_69 [label = "71 Intermediate input: 2, rsm: PointsTo_1, input: [2, 2]", shape = plain] +_1_70 [label = "72 Range , input: [2, 2], rsm: [PointsTo_0, PointsTo_1]", shape = ellipse] +_1_71 [label = "73 Range , input: [2, 2], rsm: [PointsTo_1, PointsTo_9]", shape = ellipse] +_1_72 [label = "74 Intermediate input: 5, rsm: PointsTo_0, input: [2, 2]", shape = plain] +_1_73 [label = "75 Nonterminal Alias, input: [2, 2]", shape = invtrapezium] +_1_74 [label = "76 Range , input: [2, 5], rsm: [PointsTo_0, PointsTo_0]", shape = ellipse] +_1_75 [label = "77 Range , input: [5, 2], rsm: [PointsTo_0, PointsTo_1]", shape = ellipse] +_1_76 [label = "78 Terminal 'assign', input: [2, 5]", shape = rectangle] +_1_77 [label = "79 Terminal 'load_0', input: [5, 2]", shape = rectangle] +_1_78 [label = "8 Range , input: [2, 3], rsm: [S_1, S_0]", shape = ellipse] +_1_79 [label = "9 Range , input: [3, 4], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_1_0->_1_1 +_1_1->_1_12 +_1_2->_1_6 +_1_3->_1_23 +_1_3->_1_7 +_1_6->_1_8 +_1_7->_1_9 +_1_8->_1_10 +_1_8->_1_11 +_1_9->_1_13 +_1_10->_1_14 +_1_11->_1_15 +_1_12->_1_23 +_1_12->_1_34 +_1_13->_1_16 +_1_14->_1_17 +_1_15->_1_18 +_1_16->_1_19 +_1_16->_1_20 +_1_17->_1_21 +_1_18->_1_22 +_1_19->_1_24 +_1_20->_1_25 +_1_22->_1_26 +_1_22->_1_27 +_1_23->_1_45 +_1_24->_1_79 +_1_25->_1_28 +_1_26->_1_29 +_1_27->_1_30 +_1_28->_1_31 +_1_31->_1_32 +_1_31->_1_33 +_1_32->_1_35 +_1_33->_1_36 +_1_34->_1_56 +_1_35->_1_37 +_1_35->_1_38 +_1_37->_1_39 +_1_38->_1_40 +_1_39->_1_41 +_1_39->_1_42 +_1_41->_1_43 +_1_42->_1_44 +_1_43->_1_46 +_1_43->_1_47 +_1_44->_1_48 +_1_45->_1_67 +_1_45->_1_78 +_1_46->_1_49 +_1_47->_1_50 +_1_48->_1_51 +_1_48->_1_52 +_1_51->_1_53 +_1_51->_1_11 +_1_52->_1_54 +_1_52->_1_20 +_1_53->_1_55 +_1_54->_1_57 +_1_55->_1_58 +_1_56->_1_79 +_1_57->_1_59 +_1_58->_1_60 +_1_59->_1_61 +_1_60->_1_62 +_1_60->_1_17 +_1_61->_1_63 +_1_61->_1_79 +_1_62->_1_64 +_1_63->_1_65 +_1_65->_1_66 +_1_65->_1_68 +_1_66->_1_69 +_1_67->_1_2 +_1_67->_1_3 +_1_68->_1_4 +_1_69->_1_70 +_1_69->_1_71 +_1_70->_1_72 +_1_71->_1_73 +_1_72->_1_74 +_1_72->_1_75 +_1_73->_1_48 +_1_74->_1_76 +_1_75->_1_77 +_1_78->_1_4 +_1_79->_1_5 +} + +} + diff --git a/cfpq-paths-app/src/main/resources/figures/graph_2_sppf.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_2_sppf.dot.svg new file mode 100644 index 000000000..144bea2ab --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_2_sppf.dot.svg @@ -0,0 +1,1002 @@ + + + + + + +g + + +cluster_1 + + + + +_1_0 + +0     Nonterminal S, input: [0, 4] + + + +_1_1 + +1     Range , input: [0, 4], rsm: [S_0, S_2] + + + +_1_0->_1_1 + + + + + +_1_12 +2     Intermediate input: 3, rsm: S_0, input: [0, 4] + + + +_1_1->_1_12 + + + + + +_1_2 + +10     Nonterminal Alias, input: [0, 2] + + + +_1_6 + +14     Range , input: [0, 2], rsm: [Alias_0, Alias_2] + + + +_1_2->_1_6 + + + + + +_1_3 +11     Intermediate input: 3, rsm: S_0, input: [0, 2] + + + +_1_7 + +15     Range , input: [3, 2], rsm: [S_0, S_1] + + + +_1_3->_1_7 + + + + + +_1_23 + +3     Range , input: [0, 3], rsm: [S_0, S_0] + + + +_1_3->_1_23 + + + + + +_1_4 + +12     Terminal 'store_0', input: [2, 3] + + + +_1_5 + +13     Terminal 'alloc', input: [3, 4] + + + +_1_8 +16     Intermediate input: 1, rsm: Alias_1, input: [0, 2] + + + +_1_6->_1_8 + + + + + +_1_9 + +17     Nonterminal Alias, input: [3, 2] + + + +_1_7->_1_9 + + + + + +_1_10 + +18     Range , input: [0, 1], rsm: [Alias_0, Alias_1] + + + +_1_8->_1_10 + + + + + +_1_11 + +19     Range , input: [1, 2], rsm: [Alias_1, Alias_2] + + + +_1_8->_1_11 + + + + + +_1_13 + +20     Range , input: [3, 2], rsm: [Alias_0, Alias_2] + + + +_1_9->_1_13 + + + + + +_1_14 + +21     Nonterminal PointsTo, input: [0, 1] + + + +_1_10->_1_14 + + + + + +_1_15 + +22     Nonterminal FlowsTo, input: [1, 2] + + + +_1_11->_1_15 + + + + + +_1_12->_1_23 + + + + + +_1_34 + +4     Range , input: [3, 4], rsm: [S_0, S_2] + + + +_1_12->_1_34 + + + + + +_1_16 +23     Intermediate input: 4, rsm: Alias_1, input: [3, 2] + + + +_1_13->_1_16 + + + + + +_1_17 + +24     Range , input: [0, 1], rsm: [PointsTo_0, PointsTo_5] + + + +_1_14->_1_17 + + + + + +_1_18 + +25     Range , input: [1, 2], rsm: [FlowsTo_0, FlowsTo_1] + + + +_1_15->_1_18 + + + + + +_1_19 + +26     Range , input: [3, 4], rsm: [Alias_0, Alias_1] + + + +_1_16->_1_19 + + + + + +_1_20 + +27     Range , input: [4, 2], rsm: [Alias_1, Alias_2] + + + +_1_16->_1_20 + + + + + +_1_21 + +28     Terminal 'alloc', input: [0, 1] + + + +_1_17->_1_21 + + + + + +_1_22 +29     Intermediate input: 0, rsm: FlowsTo_1, input: [1, 2] + + + +_1_18->_1_22 + + + + + +_1_24 + +30     Nonterminal PointsTo, input: [3, 4] + + + +_1_19->_1_24 + + + + + +_1_25 + +31     Nonterminal FlowsTo, input: [4, 2] + + + +_1_20->_1_25 + + + + + +_1_26 + +32     Range , input: [1, 0], rsm: [FlowsTo_0, FlowsTo_1] + + + +_1_22->_1_26 + + + + + +_1_27 + +33     Range , input: [0, 2], rsm: [FlowsTo_1, FlowsTo_1] + + + +_1_22->_1_27 + + + + + +_1_45 +5     Intermediate input: 2, rsm: S_1, input: [0, 3] + + + +_1_23->_1_45 + + + + + +_1_79 + +9     Range , input: [3, 4], rsm: [PointsTo_0, PointsTo_5] + + + +_1_24->_1_79 + + + + + +_1_28 + +34     Range , input: [4, 2], rsm: [FlowsTo_0, FlowsTo_1] + + + +_1_25->_1_28 + + + + + +_1_29 + +35     Terminal 'alloc_r', input: [1, 0] + + + +_1_26->_1_29 + + + + + +_1_30 + +36     Terminal 'assign_r', input: [0, 2] + + + +_1_27->_1_30 + + + + + +_1_31 +37     Intermediate input: 5, rsm: FlowsTo_1, input: [4, 2] + + + +_1_28->_1_31 + + + + + +_1_32 + +38     Range , input: [4, 5], rsm: [FlowsTo_0, FlowsTo_1] + + + +_1_31->_1_32 + + + + + +_1_33 + +39     Range , input: [5, 2], rsm: [FlowsTo_1, FlowsTo_1] + + + +_1_31->_1_33 + + + + + +_1_35 +40     Intermediate input: 2, rsm: FlowsTo_9, input: [4, 5] + + + +_1_32->_1_35 + + + + + +_1_36 + +41     Terminal 'assign_r', input: [5, 2] + + + +_1_33->_1_36 + + + + + +_1_56 + +6     Nonterminal PointsTo, input: [3, 4] + + + +_1_34->_1_56 + + + + + +_1_37 + +42     Range , input: [4, 2], rsm: [FlowsTo_0, FlowsTo_9] + + + +_1_35->_1_37 + + + + + +_1_38 + +43     Range , input: [2, 5], rsm: [FlowsTo_9, FlowsTo_1] + + + +_1_35->_1_38 + + + + + +_1_39 +44     Intermediate input: 2, rsm: FlowsTo_2, input: [4, 2] + + + +_1_37->_1_39 + + + + + +_1_40 + +45     Terminal 'load_0_r', input: [2, 5] + + + +_1_38->_1_40 + + + + + +_1_41 + +46     Range , input: [4, 2], rsm: [FlowsTo_0, FlowsTo_2] + + + +_1_39->_1_41 + + + + + +_1_42 + +47     Range , input: [2, 2], rsm: [FlowsTo_2, FlowsTo_9] + + + +_1_39->_1_42 + + + + + +_1_43 +48     Intermediate input: 3, rsm: FlowsTo_1, input: [4, 2] + + + +_1_41->_1_43 + + + + + +_1_44 + +49     Nonterminal Alias, input: [2, 2] + + + +_1_42->_1_44 + + + + + +_1_46 + +50     Range , input: [4, 3], rsm: [FlowsTo_0, FlowsTo_1] + + + +_1_43->_1_46 + + + + + +_1_47 + +51     Range , input: [3, 2], rsm: [FlowsTo_1, FlowsTo_2] + + + +_1_43->_1_47 + + + + + +_1_48 + +52     Range , input: [2, 2], rsm: [Alias_0, Alias_2] + + + +_1_44->_1_48 + + + + + +_1_67 + +7     Range , input: [0, 2], rsm: [S_0, S_1] + + + +_1_45->_1_67 + + + + + +_1_78 + +8     Range , input: [2, 3], rsm: [S_1, S_0] + + + +_1_45->_1_78 + + + + + +_1_49 + +53     Terminal 'alloc_r', input: [4, 3] + + + +_1_46->_1_49 + + + + + +_1_50 + +54     Terminal 'store_0_r', input: [3, 2] + + + +_1_47->_1_50 + + + + + +_1_51 +55     Intermediate input: 1, rsm: Alias_1, input: [2, 2] + + + +_1_48->_1_51 + + + + + +_1_52 +56     Intermediate input: 4, rsm: Alias_1, input: [2, 2] + + + +_1_48->_1_52 + + + + + +_1_51->_1_11 + + + + + +_1_53 + +57     Range , input: [2, 1], rsm: [Alias_0, Alias_1] + + + +_1_51->_1_53 + + + + + +_1_52->_1_20 + + + + + +_1_54 + +58     Range , input: [2, 4], rsm: [Alias_0, Alias_1] + + + +_1_52->_1_54 + + + + + +_1_55 + +59     Nonterminal PointsTo, input: [2, 1] + + + +_1_53->_1_55 + + + + + +_1_57 + +60     Nonterminal PointsTo, input: [2, 4] + + + +_1_54->_1_57 + + + + + +_1_58 + +61     Range , input: [2, 1], rsm: [PointsTo_0, PointsTo_5] + + + +_1_55->_1_58 + + + + + +_1_56->_1_79 + + + + + +_1_59 + +62     Range , input: [2, 4], rsm: [PointsTo_0, PointsTo_5] + + + +_1_57->_1_59 + + + + + +_1_60 +63     Intermediate input: 0, rsm: PointsTo_0, input: [2, 1] + + + +_1_58->_1_60 + + + + + +_1_61 +64     Intermediate input: 3, rsm: PointsTo_0, input: [2, 4] + + + +_1_59->_1_61 + + + + + +_1_60->_1_17 + + + + + +_1_62 + +65     Range , input: [2, 0], rsm: [PointsTo_0, PointsTo_0] + + + +_1_60->_1_62 + + + + + +_1_63 + +66     Range , input: [2, 3], rsm: [PointsTo_0, PointsTo_0] + + + +_1_61->_1_63 + + + + + +_1_61->_1_79 + + + + + +_1_64 + +67     Terminal 'assign', input: [2, 0] + + + +_1_62->_1_64 + + + + + +_1_65 +68     Intermediate input: 2, rsm: PointsTo_9, input: [2, 3] + + + +_1_63->_1_65 + + + + + +_1_66 + +69     Range , input: [2, 2], rsm: [PointsTo_0, PointsTo_9] + + + +_1_65->_1_66 + + + + + +_1_68 + +70     Range , input: [2, 3], rsm: [PointsTo_9, PointsTo_0] + + + +_1_65->_1_68 + + + + + +_1_69 +71     Intermediate input: 2, rsm: PointsTo_1, input: [2, 2] + + + +_1_66->_1_69 + + + + + +_1_67->_1_2 + + + + + +_1_67->_1_3 + + + + + +_1_68->_1_4 + + + + + +_1_70 + +72     Range , input: [2, 2], rsm: [PointsTo_0, PointsTo_1] + + + +_1_69->_1_70 + + + + + +_1_71 + +73     Range , input: [2, 2], rsm: [PointsTo_1, PointsTo_9] + + + +_1_69->_1_71 + + + + + +_1_72 +74     Intermediate input: 5, rsm: PointsTo_0, input: [2, 2] + + + +_1_70->_1_72 + + + + + +_1_73 + +75     Nonterminal Alias, input: [2, 2] + + + +_1_71->_1_73 + + + + + +_1_74 + +76     Range , input: [2, 5], rsm: [PointsTo_0, PointsTo_0] + + + +_1_72->_1_74 + + + + + +_1_75 + +77     Range , input: [5, 2], rsm: [PointsTo_0, PointsTo_1] + + + +_1_72->_1_75 + + + + + +_1_73->_1_48 + + + + + +_1_76 + +78     Terminal 'assign', input: [2, 5] + + + +_1_74->_1_76 + + + + + +_1_77 + +79     Terminal 'load_0', input: [5, 2] + + + +_1_75->_1_77 + + + + + +_1_78->_1_4 + + + + + +_1_79->_1_5 + + + + + diff --git a/cfpq-paths-app/src/main/resources/figures/graph_3.dot b/cfpq-paths-app/src/main/resources/figures/graph_3.dot new file mode 100644 index 000000000..e2e5b2c09 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_3.dot @@ -0,0 +1,20 @@ +digraph { + start -> 0; + 1 -> 0 [label = "assign"]; + 0 -> 1 [label = "assign_r"]; + 1 -> 2 [label = "store_0"]; + 2 -> 1 [label = "store_0_r"]; + 1 -> 2 [label = "assign"]; + 2 -> 1 [label = "assign_r"]; + 2 -> 3 [label = "alloc"]; + 3 -> 2 [label = "alloc_r"]; + 0 -> 4 [label = "alloc"]; + 4 -> 0 [label = "alloc_r"]; + + + 0[label = "0 | n"] + 1[label = "1 | l"] + 2[label = "2 | t" ] + 3[label = "3 | new X() // line 4"] + 4[label = "4 | new X() // line 1"] +} diff --git a/cfpq-paths-app/src/main/resources/figures/graph_3.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_3.dot.svg new file mode 100644 index 000000000..3beaf3825 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_3.dot.svg @@ -0,0 +1,125 @@ + + + + + + +%393 + + + +start + +start + + + +0 + +0 | n + + + +start->0 + + + + + +1 + +1 | l + + + +0->1 + + +assign_r + + + +4 + +4 | new X() // line 1 + + + +0->4 + + +alloc + + + +1->0 + + +assign + + + +2 + +2 | t + + + +1->2 + + +store_0 + + + +1->2 + + +assign + + + +2->1 + + +store_0_r + + + +2->1 + + +assign_r + + + +3 + +3 | new X() // line 4 + + + +2->3 + + +alloc + + + +3->2 + + +alloc_r + + + +4->0 + + +alloc_r + + + diff --git a/cfpq-paths-app/src/main/resources/figures/graph_3_sppf.dot b/cfpq-paths-app/src/main/resources/figures/graph_3_sppf.dot new file mode 100644 index 000000000..0a0877649 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_3_sppf.dot @@ -0,0 +1,95 @@ +digraph g { +labelloc="t" +label="" +subgraph cluster_0{ +labelloc="t" +_0_0 [label = "0 Nonterminal S, input: [0, 3]", shape = invtrapezium] +_0_1 [label = "1 Range , input: [0, 3], rsm: [S_0, S_2]", shape = ellipse] +_0_2 [label = "10 Nonterminal Alias, input: [0, 1]", shape = invtrapezium] +_0_3 [label = "11 Intermediate input: 2, rsm: S_0, input: [0, 1]", shape = plain, color="red"] +_0_4 [label = "12 Terminal 'store_0', input: [1, 2]", shape = rectangle] +_0_5 [label = "13 Terminal 'alloc', input: [2, 3]", shape = rectangle] +_0_6 [label = "14 Range , input: [0, 1], rsm: [Alias_0, Alias_2]", shape = ellipse] +_0_7 [label = "15 Range , input: [2, 1], rsm: [S_0, S_1]", shape = ellipse] +_0_8 [label = "16 Intermediate input: 4, rsm: Alias_1, input: [0, 1]", shape = plain] +_0_9 [label = "17 Nonterminal Alias, input: [2, 1]", shape = invtrapezium] +_0_10 [label = "18 Range , input: [0, 4], rsm: [Alias_0, Alias_1]", shape = ellipse] +_0_11 [label = "19 Range , input: [4, 1], rsm: [Alias_1, Alias_2]", shape = ellipse] +_0_12 [label = "2 Intermediate input: 2, rsm: S_0, input: [0, 3]", shape = plain] +_0_13 [label = "20 Range , input: [2, 1], rsm: [Alias_0, Alias_2]", shape = ellipse] +_0_14 [label = "21 Nonterminal PointsTo, input: [0, 4]", shape = invtrapezium] +_0_15 [label = "22 Nonterminal FlowsTo, input: [4, 1]", shape = invtrapezium] +_0_16 [label = "23 Intermediate input: 3, rsm: Alias_1, input: [2, 1]", shape = plain] +_0_17 [label = "24 Range , input: [0, 4], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_0_18 [label = "25 Range , input: [4, 1], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_0_19 [label = "26 Range , input: [2, 3], rsm: [Alias_0, Alias_1]", shape = ellipse] +_0_20 [label = "27 Range , input: [3, 1], rsm: [Alias_1, Alias_2]", shape = ellipse] +_0_21 [label = "28 Terminal 'alloc', input: [0, 4]", shape = rectangle] +_0_22 [label = "29 Intermediate input: 0, rsm: FlowsTo_1, input: [4, 1]", shape = plain] +_0_23 [label = "3 Range , input: [0, 2], rsm: [S_0, S_0]", shape = ellipse, color="red"] +_0_24 [label = "30 Nonterminal PointsTo, input: [2, 3]", shape = invtrapezium] +_0_25 [label = "31 Nonterminal FlowsTo, input: [3, 1]", shape = invtrapezium] +_0_26 [label = "32 Range , input: [4, 0], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_0_27 [label = "33 Range , input: [0, 1], rsm: [FlowsTo_1, FlowsTo_1]", shape = ellipse] +_0_28 [label = "34 Range , input: [3, 1], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_0_29 [label = "35 Terminal 'alloc_r', input: [4, 0]", shape = rectangle] +_0_30 [label = "36 Terminal 'assign_r', input: [0, 1]", shape = rectangle] +_0_31 [label = "37 Intermediate input: 2, rsm: FlowsTo_1, input: [3, 1]", shape = plain] +_0_32 [label = "38 Range , input: [3, 2], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_0_33 [label = "39 Range , input: [2, 1], rsm: [FlowsTo_1, FlowsTo_1]", shape = ellipse] +_0_34 [label = "4 Range , input: [2, 3], rsm: [S_0, S_2]", shape = ellipse] +_0_35 [label = "40 Terminal 'alloc_r', input: [3, 2]", shape = rectangle] +_0_36 [label = "41 Terminal 'assign_r', input: [2, 1]", shape = rectangle] +_0_37 [label = "5 Intermediate input: 1, rsm: S_1, input: [0, 2]", shape = plain, color="red"] +_0_38 [label = "6 Nonterminal PointsTo, input: [2, 3]", shape = invtrapezium] +_0_39 [label = "7 Range , input: [0, 1], rsm: [S_0, S_1]", shape = ellipse, color="red"] +_0_40 [label = "8 Range , input: [1, 2], rsm: [S_1, S_0]", shape = ellipse] +_0_41 [label = "9 Range , input: [2, 3], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_0_0->_0_1 +_0_1->_0_12 +_0_2->_0_6 +_0_3->_0_23 +_0_3->_0_7 +_0_6->_0_8 +_0_7->_0_9 +_0_8->_0_10 +_0_8->_0_11 +_0_9->_0_13 +_0_10->_0_14 +_0_11->_0_15 +_0_12->_0_23 +_0_12->_0_34 +_0_13->_0_16 +_0_14->_0_17 +_0_15->_0_18 +_0_16->_0_19 +_0_16->_0_20 +_0_17->_0_21 +_0_18->_0_22 +_0_19->_0_24 +_0_20->_0_25 +_0_22->_0_26 +_0_22->_0_27 +_0_23->_0_37 +_0_24->_0_41 +_0_25->_0_28 +_0_26->_0_29 +_0_27->_0_30 +_0_28->_0_31 +_0_31->_0_32 +_0_31->_0_33 +_0_32->_0_35 +_0_33->_0_36 +_0_34->_0_38 +_0_37->_0_39 +_0_37->_0_40 +_0_38->_0_41 +_0_39->_0_2 +_0_39->_0_3 +_0_40->_0_4 +_0_41->_0_5 +} + + +} + diff --git a/cfpq-paths-app/src/main/resources/figures/graph_3_sppf.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_3_sppf.dot.svg new file mode 100644 index 000000000..547d50c85 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_3_sppf.dot.svg @@ -0,0 +1,520 @@ + + + + + + +g + + +cluster_0 + + + + +_0_0 + +0     Nonterminal S, input: [0, 3] + + + +_0_1 + +1     Range , input: [0, 3], rsm: [S_0, S_2] + + + +_0_0->_0_1 + + + + + +_0_12 +2     Intermediate input: 2, rsm: S_0, input: [0, 3] + + + +_0_1->_0_12 + + + + + +_0_2 + +10     Nonterminal Alias, input: [0, 1] + + + +_0_6 + +14     Range , input: [0, 1], rsm: [Alias_0, Alias_2] + + + +_0_2->_0_6 + + + + + +_0_3 +11     Intermediate input: 2, rsm: S_0, input: [0, 1] + + + +_0_7 + +15     Range , input: [2, 1], rsm: [S_0, S_1] + + + +_0_3->_0_7 + + + + + +_0_23 + +3     Range , input: [0, 2], rsm: [S_0, S_0] + + + +_0_3->_0_23 + + + + + +_0_4 + +12     Terminal 'store_0', input: [1, 2] + + + +_0_5 + +13     Terminal 'alloc', input: [2, 3] + + + +_0_8 +16     Intermediate input: 4, rsm: Alias_1, input: [0, 1] + + + +_0_6->_0_8 + + + + + +_0_9 + +17     Nonterminal Alias, input: [2, 1] + + + +_0_7->_0_9 + + + + + +_0_10 + +18     Range , input: [0, 4], rsm: [Alias_0, Alias_1] + + + +_0_8->_0_10 + + + + + +_0_11 + +19     Range , input: [4, 1], rsm: [Alias_1, Alias_2] + + + +_0_8->_0_11 + + + + + +_0_13 + +20     Range , input: [2, 1], rsm: [Alias_0, Alias_2] + + + +_0_9->_0_13 + + + + + +_0_14 + +21     Nonterminal PointsTo, input: [0, 4] + + + +_0_10->_0_14 + + + + + +_0_15 + +22     Nonterminal FlowsTo, input: [4, 1] + + + +_0_11->_0_15 + + + + + +_0_12->_0_23 + + + + + +_0_34 + +4     Range , input: [2, 3], rsm: [S_0, S_2] + + + +_0_12->_0_34 + + + + + +_0_16 +23     Intermediate input: 3, rsm: Alias_1, input: [2, 1] + + + +_0_13->_0_16 + + + + + +_0_17 + +24     Range , input: [0, 4], rsm: [PointsTo_0, PointsTo_5] + + + +_0_14->_0_17 + + + + + +_0_18 + +25     Range , input: [4, 1], rsm: [FlowsTo_0, FlowsTo_1] + + + +_0_15->_0_18 + + + + + +_0_19 + +26     Range , input: [2, 3], rsm: [Alias_0, Alias_1] + + + +_0_16->_0_19 + + + + + +_0_20 + +27     Range , input: [3, 1], rsm: [Alias_1, Alias_2] + + + +_0_16->_0_20 + + + + + +_0_21 + +28     Terminal 'alloc', input: [0, 4] + + + +_0_17->_0_21 + + + + + +_0_22 +29     Intermediate input: 0, rsm: FlowsTo_1, input: [4, 1] + + + +_0_18->_0_22 + + + + + +_0_24 + +30     Nonterminal PointsTo, input: [2, 3] + + + +_0_19->_0_24 + + + + + +_0_25 + +31     Nonterminal FlowsTo, input: [3, 1] + + + +_0_20->_0_25 + + + + + +_0_26 + +32     Range , input: [4, 0], rsm: [FlowsTo_0, FlowsTo_1] + + + +_0_22->_0_26 + + + + + +_0_27 + +33     Range , input: [0, 1], rsm: [FlowsTo_1, FlowsTo_1] + + + +_0_22->_0_27 + + + + + +_0_37 +5     Intermediate input: 1, rsm: S_1, input: [0, 2] + + + +_0_23->_0_37 + + + + + +_0_41 + +9     Range , input: [2, 3], rsm: [PointsTo_0, PointsTo_5] + + + +_0_24->_0_41 + + + + + +_0_28 + +34     Range , input: [3, 1], rsm: [FlowsTo_0, FlowsTo_1] + + + +_0_25->_0_28 + + + + + +_0_29 + +35     Terminal 'alloc_r', input: [4, 0] + + + +_0_26->_0_29 + + + + + +_0_30 + +36     Terminal 'assign_r', input: [0, 1] + + + +_0_27->_0_30 + + + + + +_0_31 +37     Intermediate input: 2, rsm: FlowsTo_1, input: [3, 1] + + + +_0_28->_0_31 + + + + + +_0_32 + +38     Range , input: [3, 2], rsm: [FlowsTo_0, FlowsTo_1] + + + +_0_31->_0_32 + + + + + +_0_33 + +39     Range , input: [2, 1], rsm: [FlowsTo_1, FlowsTo_1] + + + +_0_31->_0_33 + + + + + +_0_35 + +40     Terminal 'alloc_r', input: [3, 2] + + + +_0_32->_0_35 + + + + + +_0_36 + +41     Terminal 'assign_r', input: [2, 1] + + + +_0_33->_0_36 + + + + + +_0_38 + +6     Nonterminal PointsTo, input: [2, 3] + + + +_0_34->_0_38 + + + + + +_0_39 + +7     Range , input: [0, 1], rsm: [S_0, S_1] + + + +_0_37->_0_39 + + + + + +_0_40 + +8     Range , input: [1, 2], rsm: [S_1, S_0] + + + +_0_37->_0_40 + + + + + +_0_38->_0_41 + + + + + +_0_39->_0_2 + + + + + +_0_39->_0_3 + + + + + +_0_40->_0_4 + + + + + +_0_41->_0_5 + + + + + diff --git a/cfpq-paths-app/src/main/resources/figures/graph_4.dot b/cfpq-paths-app/src/main/resources/figures/graph_4.dot new file mode 100644 index 000000000..a8936f86d --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_4.dot @@ -0,0 +1,45 @@ +digraph { + start -> 1; + start -> 8; + 1 -> 0 [label = "alloc"]; + 0 -> 1 [label = "alloc_r"]; + 4 -> 2 [label = "alloc"]; + 2 -> 4 [label = "alloc_r"]; + 5 -> 3 [label = "alloc"]; + 3 -> 5 [label = "alloc_r"]; + 10 -> 12 [label = "alloc"]; + 12 -> 10 [label = "alloc_r"]; + 11 -> 13 [label = "alloc"]; + 13 -> 11 [label = "alloc_r"]; + 8 -> 6 [label = "assign"]; + 6 -> 8 [label = "assign_r"]; + 9 -> 7 [label = "assign"]; + 7 -> 9 [label = "assign_r"]; + 4 -> 1 [label = "store_0"]; + 1 -> 4 [label = "store_0_r"]; + 5 -> 1 [label = "store_1"]; + 1 -> 5 [label = "store_1_r"]; + 8 -> 10 [label = "store_2"]; + 10 -> 8 [label = "store_2_r"]; + 9 -> 11 [label = "store_3"]; + 11 -> 9 [label = "store_3_r"]; + 6 -> 4 [label = "load_0"]; + 4 -> 6 [label = "load_0_r"]; + 7 -> 5 [label = "load_1"]; + 5 -> 7 [label = "load_1_r"]; + + 0[label="0 | new X()"]; + 1[label="1 | n"]; + 2[label="2 | new Z()"]; + 3[label="3 | new U()"]; + 4[label="4 | z"]; + 5[label="5 | u"]; + 6[label="6 | tmp1 // line 6"]; + 7[label="7 | tmp2 // line 8"]; + 8[label="8 | v"]; + 9[label="9 | r"]; + 10[label="10 | tmp3 // line 7"]; + 11[label="11 | tmp4 // line 9"]; + 12[label="12 | new Y()"]; + 13[label="13 | new P()"]; +} diff --git a/cfpq-paths-app/src/main/resources/figures/graph_4.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_4.dot.svg new file mode 100644 index 000000000..5a55bc680 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_4.dot.svg @@ -0,0 +1,297 @@ + + + + + + +%503 + + + +start + +start + + + +1 + +1 | n + + + +start->1 + + + + + +8 + +8 | v + + + +start->8 + + + + + +0 + +0 | new X() + + + +1->0 + + +alloc + + + +4 + +4 | z + + + +1->4 + + +store_0_r + + + +5 + +5 | u + + + +1->5 + + +store_1_r + + + +10 + +10 | tmp3 // line 7 + + + +8->10 + + +store_2 + + + +6 + +6 | tmp1 // line 6 + + + +8->6 + + +assign + + + +0->1 + + +alloc_r + + + +4->1 + + +store_0 + + + +2 + +2 | new Z() + + + +4->2 + + +alloc + + + +4->6 + + +load_0_r + + + +2->4 + + +alloc_r + + + +5->1 + + +store_1 + + + +3 + +3 | new U() + + + +5->3 + + +alloc + + + +7 + +7 | tmp2 // line 8 + + + +5->7 + + +load_1_r + + + +3->5 + + +alloc_r + + + +10->8 + + +store_2_r + + + +12 + +12 | new Y() + + + +10->12 + + +alloc + + + +12->10 + + +alloc_r + + + +11 + +11 | tmp4 // line 9 + + + +13 + +13 | new P() + + + +11->13 + + +alloc + + + +9 + +9 | r + + + +11->9 + + +store_3_r + + + +13->11 + + +alloc_r + + + +6->8 + + +assign_r + + + +6->4 + + +load_0 + + + +9->11 + + +store_3 + + + +9->7 + + +assign + + + +7->5 + + +load_1 + + + +7->9 + + +assign_r + + + diff --git a/cfpq-paths-app/src/main/resources/figures/graph_4_sppf.dot b/cfpq-paths-app/src/main/resources/figures/graph_4_sppf.dot new file mode 100644 index 000000000..d7983d9c2 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_4_sppf.dot @@ -0,0 +1,573 @@ +digraph g { +labelloc="t" +label="" +subgraph cluster_0{ +labelloc="t" +_0_0 [label = "0 Nonterminal S, input: [1, 0]", shape = invtrapezium] +_0_1 [label = "1 Range , input: [1, 0], rsm: [S_0, S_2]", shape = ellipse] +_0_2 [label = "2 Nonterminal PointsTo, input: [1, 0]", shape = invtrapezium] +_0_3 [label = "3 Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_0_4 [label = "4 Terminal 'alloc', input: [1, 0]", shape = rectangle] +_0_0->_0_1 +_0_1->_0_2 +_0_2->_0_3 +_0_3->_0_4 +} + +subgraph cluster_1{ +labelloc="t" +_1_0 [label = "0 Nonterminal S, input: [1, 12]", shape = invtrapezium] +_1_1 [label = "1 Range , input: [1, 12], rsm: [S_0, S_2]", shape = ellipse] +_1_2 [label = "10 Nonterminal Alias, input: [1, 8]", shape = invtrapezium] +_1_3 [label = "11 Terminal 'store_2', input: [8, 10]", shape = rectangle] +_1_4 [label = "12 Terminal 'alloc', input: [10, 12]", shape = rectangle] +_1_5 [label = "13 Range , input: [1, 8], rsm: [Alias_0, Alias_2]", shape = ellipse] +_1_6 [label = "14 Intermediate input: 0, rsm: Alias_1, input: [1, 8]", shape = plain] +_1_7 [label = "15 Range , input: [1, 0], rsm: [Alias_0, Alias_1]", shape = ellipse] +_1_8 [label = "16 Range , input: [0, 8], rsm: [Alias_1, Alias_2]", shape = ellipse] +_1_9 [label = "17 Nonterminal PointsTo, input: [1, 0]", shape = invtrapezium] +_1_10 [label = "18 Nonterminal FlowsTo, input: [0, 8]", shape = invtrapezium] +_1_11 [label = "19 Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_1_12 [label = "2 Intermediate input: 10, rsm: S_0, input: [1, 12]", shape = plain] +_1_13 [label = "20 Range , input: [0, 8], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_1_14 [label = "21 Terminal 'alloc', input: [1, 0]", shape = rectangle] +_1_15 [label = "22 Intermediate input: 6, rsm: FlowsTo_1, input: [0, 8]", shape = plain] +_1_16 [label = "23 Range , input: [0, 6], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_1_17 [label = "24 Range , input: [6, 8], rsm: [FlowsTo_1, FlowsTo_1]", shape = ellipse] +_1_18 [label = "25 Intermediate input: 4, rsm: FlowsTo_9, input: [0, 6]", shape = plain] +_1_19 [label = "26 Terminal 'assign_r', input: [6, 8]", shape = rectangle] +_1_20 [label = "27 Range , input: [0, 4], rsm: [FlowsTo_0, FlowsTo_9]", shape = ellipse] +_1_21 [label = "28 Range , input: [4, 6], rsm: [FlowsTo_9, FlowsTo_1]", shape = ellipse] +_1_22 [label = "29 Intermediate input: 4, rsm: FlowsTo_2, input: [0, 4]", shape = plain] +_1_23 [label = "3 Range , input: [1, 10], rsm: [S_0, S_0]", shape = ellipse] +_1_24 [label = "30 Terminal 'load_0_r', input: [4, 6]", shape = rectangle] +_1_25 [label = "31 Range , input: [0, 4], rsm: [FlowsTo_0, FlowsTo_2]", shape = ellipse] +_1_26 [label = "32 Range , input: [4, 4], rsm: [FlowsTo_2, FlowsTo_9]", shape = ellipse] +_1_27 [label = "33 Intermediate input: 1, rsm: FlowsTo_1, input: [0, 4]", shape = plain] +_1_28 [label = "34 Nonterminal Alias, input: [4, 4]", shape = invtrapezium] +_1_29 [label = "35 Range , input: [0, 1], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_1_30 [label = "36 Range , input: [1, 4], rsm: [FlowsTo_1, FlowsTo_2]", shape = ellipse] +_1_31 [label = "37 Range , input: [4, 4], rsm: [Alias_0, Alias_2]", shape = ellipse] +_1_32 [label = "38 Terminal 'alloc_r', input: [0, 1]", shape = rectangle] +_1_33 [label = "39 Terminal 'store_0_r', input: [1, 4]", shape = rectangle] +_1_34 [label = "4 Range , input: [10, 12], rsm: [S_0, S_2]", shape = ellipse] +_1_35 [label = "40 Intermediate input: 2, rsm: Alias_1, input: [4, 4]", shape = plain] +_1_36 [label = "41 Range , input: [4, 2], rsm: [Alias_0, Alias_1]", shape = ellipse] +_1_37 [label = "42 Range , input: [2, 4], rsm: [Alias_1, Alias_2]", shape = ellipse] +_1_38 [label = "43 Nonterminal PointsTo, input: [4, 2]", shape = invtrapezium] +_1_39 [label = "44 Nonterminal FlowsTo, input: [2, 4]", shape = invtrapezium] +_1_40 [label = "45 Range , input: [4, 2], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_1_41 [label = "46 Range , input: [2, 4], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_1_42 [label = "47 Terminal 'alloc', input: [4, 2]", shape = rectangle] +_1_43 [label = "48 Terminal 'alloc_r', input: [2, 4]", shape = rectangle] +_1_44 [label = "5 Intermediate input: 8, rsm: S_1, input: [1, 10]", shape = plain] +_1_45 [label = "6 Nonterminal PointsTo, input: [10, 12]", shape = invtrapezium] +_1_46 [label = "7 Range , input: [1, 8], rsm: [S_0, S_1]", shape = ellipse] +_1_47 [label = "8 Range , input: [8, 10], rsm: [S_1, S_0]", shape = ellipse] +_1_48 [label = "9 Range , input: [10, 12], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_1_0->_1_1 +_1_1->_1_12 +_1_2->_1_5 +_1_5->_1_6 +_1_6->_1_7 +_1_6->_1_8 +_1_7->_1_9 +_1_8->_1_10 +_1_9->_1_11 +_1_10->_1_13 +_1_11->_1_14 +_1_12->_1_23 +_1_12->_1_34 +_1_13->_1_15 +_1_15->_1_16 +_1_15->_1_17 +_1_16->_1_18 +_1_17->_1_19 +_1_18->_1_20 +_1_18->_1_21 +_1_20->_1_22 +_1_21->_1_24 +_1_22->_1_25 +_1_22->_1_26 +_1_23->_1_44 +_1_25->_1_27 +_1_26->_1_28 +_1_27->_1_29 +_1_27->_1_30 +_1_28->_1_31 +_1_29->_1_32 +_1_30->_1_33 +_1_31->_1_35 +_1_34->_1_45 +_1_35->_1_36 +_1_35->_1_37 +_1_36->_1_38 +_1_37->_1_39 +_1_38->_1_40 +_1_39->_1_41 +_1_40->_1_42 +_1_41->_1_43 +_1_44->_1_46 +_1_44->_1_47 +_1_45->_1_48 +_1_46->_1_2 +_1_47->_1_3 +_1_48->_1_4 +} + +subgraph cluster_2{ +labelloc="t" +_2_0 [label = "0 Nonterminal S, input: [1, 13]", shape = invtrapezium] +_2_1 [label = "1 Range , input: [1, 13], rsm: [S_0, S_2]", shape = ellipse] +_2_2 [label = "10 Nonterminal Alias, input: [1, 9]", shape = invtrapezium] +_2_3 [label = "11 Terminal 'store_3', input: [9, 11]", shape = rectangle] +_2_4 [label = "12 Terminal 'alloc', input: [11, 13]", shape = rectangle] +_2_5 [label = "13 Range , input: [1, 9], rsm: [Alias_0, Alias_2]", shape = ellipse] +_2_6 [label = "14 Intermediate input: 0, rsm: Alias_1, input: [1, 9]", shape = plain] +_2_7 [label = "15 Range , input: [1, 0], rsm: [Alias_0, Alias_1]", shape = ellipse] +_2_8 [label = "16 Range , input: [0, 9], rsm: [Alias_1, Alias_2]", shape = ellipse] +_2_9 [label = "17 Nonterminal PointsTo, input: [1, 0]", shape = invtrapezium] +_2_10 [label = "18 Nonterminal FlowsTo, input: [0, 9]", shape = invtrapezium] +_2_11 [label = "19 Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_2_12 [label = "2 Intermediate input: 11, rsm: S_0, input: [1, 13]", shape = plain] +_2_13 [label = "20 Range , input: [0, 9], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_2_14 [label = "21 Terminal 'alloc', input: [1, 0]", shape = rectangle] +_2_15 [label = "22 Intermediate input: 7, rsm: FlowsTo_1, input: [0, 9]", shape = plain] +_2_16 [label = "23 Range , input: [0, 7], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_2_17 [label = "24 Range , input: [7, 9], rsm: [FlowsTo_1, FlowsTo_1]", shape = ellipse] +_2_18 [label = "25 Intermediate input: 5, rsm: FlowsTo_8, input: [0, 7]", shape = plain] +_2_19 [label = "26 Terminal 'assign_r', input: [7, 9]", shape = rectangle] +_2_20 [label = "27 Range , input: [0, 5], rsm: [FlowsTo_0, FlowsTo_8]", shape = ellipse] +_2_21 [label = "28 Range , input: [5, 7], rsm: [FlowsTo_8, FlowsTo_1]", shape = ellipse] +_2_22 [label = "29 Intermediate input: 5, rsm: FlowsTo_3, input: [0, 5]", shape = plain] +_2_23 [label = "3 Range , input: [1, 11], rsm: [S_0, S_0]", shape = ellipse] +_2_24 [label = "30 Terminal 'load_1_r', input: [5, 7]", shape = rectangle] +_2_25 [label = "31 Range , input: [0, 5], rsm: [FlowsTo_0, FlowsTo_3]", shape = ellipse] +_2_26 [label = "32 Range , input: [5, 5], rsm: [FlowsTo_3, FlowsTo_8]", shape = ellipse] +_2_27 [label = "33 Intermediate input: 1, rsm: FlowsTo_1, input: [0, 5]", shape = plain] +_2_28 [label = "34 Nonterminal Alias, input: [5, 5]", shape = invtrapezium] +_2_29 [label = "35 Range , input: [0, 1], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_2_30 [label = "36 Range , input: [1, 5], rsm: [FlowsTo_1, FlowsTo_3]", shape = ellipse] +_2_31 [label = "37 Range , input: [5, 5], rsm: [Alias_0, Alias_2]", shape = ellipse] +_2_32 [label = "38 Terminal 'alloc_r', input: [0, 1]", shape = rectangle] +_2_33 [label = "39 Terminal 'store_1_r', input: [1, 5]", shape = rectangle] +_2_34 [label = "4 Range , input: [11, 13], rsm: [S_0, S_2]", shape = ellipse] +_2_35 [label = "40 Intermediate input: 3, rsm: Alias_1, input: [5, 5]", shape = plain] +_2_36 [label = "41 Range , input: [5, 3], rsm: [Alias_0, Alias_1]", shape = ellipse] +_2_37 [label = "42 Range , input: [3, 5], rsm: [Alias_1, Alias_2]", shape = ellipse] +_2_38 [label = "43 Nonterminal PointsTo, input: [5, 3]", shape = invtrapezium] +_2_39 [label = "44 Nonterminal FlowsTo, input: [3, 5]", shape = invtrapezium] +_2_40 [label = "45 Range , input: [5, 3], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_2_41 [label = "46 Range , input: [3, 5], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_2_42 [label = "47 Terminal 'alloc', input: [5, 3]", shape = rectangle] +_2_43 [label = "48 Terminal 'alloc_r', input: [3, 5]", shape = rectangle] +_2_44 [label = "5 Intermediate input: 9, rsm: S_1, input: [1, 11]", shape = plain] +_2_45 [label = "6 Nonterminal PointsTo, input: [11, 13]", shape = invtrapezium] +_2_46 [label = "7 Range , input: [1, 9], rsm: [S_0, S_1]", shape = ellipse] +_2_47 [label = "8 Range , input: [9, 11], rsm: [S_1, S_0]", shape = ellipse] +_2_48 [label = "9 Range , input: [11, 13], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_2_0->_2_1 +_2_1->_2_12 +_2_2->_2_5 +_2_5->_2_6 +_2_6->_2_7 +_2_6->_2_8 +_2_7->_2_9 +_2_8->_2_10 +_2_9->_2_11 +_2_10->_2_13 +_2_11->_2_14 +_2_12->_2_23 +_2_12->_2_34 +_2_13->_2_15 +_2_15->_2_16 +_2_15->_2_17 +_2_16->_2_18 +_2_17->_2_19 +_2_18->_2_20 +_2_18->_2_21 +_2_20->_2_22 +_2_21->_2_24 +_2_22->_2_25 +_2_22->_2_26 +_2_23->_2_44 +_2_25->_2_27 +_2_26->_2_28 +_2_27->_2_29 +_2_27->_2_30 +_2_28->_2_31 +_2_29->_2_32 +_2_30->_2_33 +_2_31->_2_35 +_2_34->_2_45 +_2_35->_2_36 +_2_35->_2_37 +_2_36->_2_38 +_2_37->_2_39 +_2_38->_2_40 +_2_39->_2_41 +_2_40->_2_42 +_2_41->_2_43 +_2_44->_2_46 +_2_44->_2_47 +_2_45->_2_48 +_2_46->_2_2 +_2_47->_2_3 +_2_48->_2_4 +} + +subgraph cluster_3{ +labelloc="t" +_3_0 [label = "0 Nonterminal S, input: [8, 0]", shape = invtrapezium] +_3_1 [label = "1 Range , input: [8, 0], rsm: [S_0, S_2]", shape = ellipse] +_3_2 [label = "10 Range , input: [4, 1], rsm: [PointsTo_9, PointsTo_0]", shape = ellipse] +_3_3 [label = "11 Intermediate input: 4, rsm: PointsTo_1, input: [8, 4]", shape = plain] +_3_4 [label = "12 Terminal 'store_0', input: [4, 1]", shape = rectangle] +_3_5 [label = "13 Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_1]", shape = ellipse] +_3_6 [label = "14 Range , input: [4, 4], rsm: [PointsTo_1, PointsTo_9]", shape = ellipse] +_3_7 [label = "15 Intermediate input: 6, rsm: PointsTo_0, input: [8, 4]", shape = plain] +_3_8 [label = "16 Nonterminal Alias, input: [4, 4]", shape = invtrapezium] +_3_9 [label = "17 Range , input: [8, 6], rsm: [PointsTo_0, PointsTo_0]", shape = ellipse] +_3_10 [label = "18 Range , input: [6, 4], rsm: [PointsTo_0, PointsTo_1]", shape = ellipse] +_3_11 [label = "19 Range , input: [4, 4], rsm: [Alias_0, Alias_2]", shape = ellipse] +_3_12 [label = "2 Nonterminal PointsTo, input: [8, 0]", shape = invtrapezium] +_3_13 [label = "20 Terminal 'assign', input: [8, 6]", shape = rectangle] +_3_14 [label = "21 Terminal 'load_0', input: [6, 4]", shape = rectangle] +_3_15 [label = "22 Intermediate input: 2, rsm: Alias_1, input: [4, 4]", shape = plain] +_3_16 [label = "23 Range , input: [4, 2], rsm: [Alias_0, Alias_1]", shape = ellipse] +_3_17 [label = "24 Range , input: [2, 4], rsm: [Alias_1, Alias_2]", shape = ellipse] +_3_18 [label = "25 Nonterminal PointsTo, input: [4, 2]", shape = invtrapezium] +_3_19 [label = "26 Nonterminal FlowsTo, input: [2, 4]", shape = invtrapezium] +_3_20 [label = "27 Range , input: [4, 2], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_3_21 [label = "28 Range , input: [2, 4], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_3_22 [label = "29 Terminal 'alloc', input: [4, 2]", shape = rectangle] +_3_23 [label = "3 Range , input: [8, 0], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_3_24 [label = "30 Terminal 'alloc_r', input: [2, 4]", shape = rectangle] +_3_25 [label = "4 Intermediate input: 1, rsm: PointsTo_0, input: [8, 0]", shape = plain] +_3_26 [label = "5 Range , input: [8, 1], rsm: [PointsTo_0, PointsTo_0]", shape = ellipse] +_3_27 [label = "6 Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_3_28 [label = "7 Intermediate input: 4, rsm: PointsTo_9, input: [8, 1]", shape = plain] +_3_29 [label = "8 Terminal 'alloc', input: [1, 0]", shape = rectangle] +_3_30 [label = "9 Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_9]", shape = ellipse] +_3_0->_3_1 +_3_1->_3_12 +_3_2->_3_4 +_3_3->_3_5 +_3_3->_3_6 +_3_5->_3_7 +_3_6->_3_8 +_3_7->_3_9 +_3_7->_3_10 +_3_8->_3_11 +_3_9->_3_13 +_3_10->_3_14 +_3_11->_3_15 +_3_12->_3_23 +_3_15->_3_16 +_3_15->_3_17 +_3_16->_3_18 +_3_17->_3_19 +_3_18->_3_20 +_3_19->_3_21 +_3_20->_3_22 +_3_21->_3_24 +_3_23->_3_25 +_3_25->_3_26 +_3_25->_3_27 +_3_26->_3_28 +_3_27->_3_29 +_3_28->_3_30 +_3_28->_3_2 +_3_30->_3_3 +} + +subgraph cluster_4{ +labelloc="t" +_4_0 [label = "0 Nonterminal S, input: [8, 12]", shape = invtrapezium] +_4_1 [label = "1 Range , input: [8, 12], rsm: [S_0, S_2]", shape = ellipse] +_4_2 [label = "10 Range , input: [10, 12], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_4_3 [label = "11 Nonterminal Alias, input: [8, 8]", shape = invtrapezium] +_4_4 [label = "12 Terminal 'alloc', input: [10, 12]", shape = rectangle] +_4_5 [label = "13 Range , input: [8, 8], rsm: [Alias_0, Alias_2]", shape = ellipse] +_4_6 [label = "14 Intermediate input: 0, rsm: Alias_1, input: [8, 8]", shape = plain] +_4_7 [label = "15 Range , input: [8, 0], rsm: [Alias_0, Alias_1]", shape = ellipse] +_4_8 [label = "16 Range , input: [0, 8], rsm: [Alias_1, Alias_2]", shape = ellipse] +_4_9 [label = "17 Nonterminal PointsTo, input: [8, 0]", shape = invtrapezium] +_4_10 [label = "18 Nonterminal FlowsTo, input: [0, 8]", shape = invtrapezium] +_4_11 [label = "19 Range , input: [8, 0], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_4_12 [label = "2 Intermediate input: 10, rsm: S_0, input: [8, 12]", shape = plain] +_4_13 [label = "20 Range , input: [0, 8], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_4_14 [label = "21 Intermediate input: 1, rsm: PointsTo_0, input: [8, 0]", shape = plain] +_4_15 [label = "22 Intermediate input: 6, rsm: FlowsTo_1, input: [0, 8]", shape = plain] +_4_16 [label = "23 Range , input: [8, 1], rsm: [PointsTo_0, PointsTo_0]", shape = ellipse] +_4_17 [label = "24 Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_4_18 [label = "25 Range , input: [0, 6], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_4_19 [label = "26 Range , input: [6, 8], rsm: [FlowsTo_1, FlowsTo_1]", shape = ellipse] +_4_20 [label = "27 Intermediate input: 4, rsm: PointsTo_9, input: [8, 1]", shape = plain] +_4_21 [label = "28 Terminal 'alloc', input: [1, 0]", shape = rectangle] +_4_22 [label = "29 Intermediate input: 4, rsm: FlowsTo_9, input: [0, 6]", shape = plain] +_4_23 [label = "3 Range , input: [8, 10], rsm: [S_0, S_0]", shape = ellipse] +_4_24 [label = "30 Terminal 'assign_r', input: [6, 8]", shape = rectangle] +_4_25 [label = "31 Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_9]", shape = ellipse] +_4_26 [label = "32 Range , input: [4, 1], rsm: [PointsTo_9, PointsTo_0]", shape = ellipse] +_4_27 [label = "33 Range , input: [0, 4], rsm: [FlowsTo_0, FlowsTo_9]", shape = ellipse] +_4_28 [label = "34 Range , input: [4, 6], rsm: [FlowsTo_9, FlowsTo_1]", shape = ellipse] +_4_29 [label = "35 Intermediate input: 4, rsm: PointsTo_1, input: [8, 4]", shape = plain] +_4_30 [label = "36 Terminal 'store_0', input: [4, 1]", shape = rectangle] +_4_31 [label = "37 Intermediate input: 4, rsm: FlowsTo_2, input: [0, 4]", shape = plain] +_4_32 [label = "38 Terminal 'load_0_r', input: [4, 6]", shape = rectangle] +_4_33 [label = "39 Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_1]", shape = ellipse] +_4_34 [label = "4 Range , input: [10, 12], rsm: [S_0, S_2]", shape = ellipse] +_4_35 [label = "40 Range , input: [4, 4], rsm: [PointsTo_1, PointsTo_9]", shape = ellipse] +_4_36 [label = "41 Range , input: [0, 4], rsm: [FlowsTo_0, FlowsTo_2]", shape = ellipse] +_4_37 [label = "42 Range , input: [4, 4], rsm: [FlowsTo_2, FlowsTo_9]", shape = ellipse] +_4_38 [label = "43 Intermediate input: 6, rsm: PointsTo_0, input: [8, 4]", shape = plain] +_4_39 [label = "44 Nonterminal Alias, input: [4, 4]", shape = invtrapezium] +_4_40 [label = "45 Intermediate input: 1, rsm: FlowsTo_1, input: [0, 4]", shape = plain] +_4_41 [label = "46 Nonterminal Alias, input: [4, 4]", shape = invtrapezium] +_4_42 [label = "47 Range , input: [8, 6], rsm: [PointsTo_0, PointsTo_0]", shape = ellipse] +_4_43 [label = "48 Range , input: [6, 4], rsm: [PointsTo_0, PointsTo_1]", shape = ellipse] +_4_44 [label = "49 Range , input: [4, 4], rsm: [Alias_0, Alias_2]", shape = ellipse] +_4_45 [label = "5 Terminal 'store_2', input: [8, 10]", shape = rectangle] +_4_46 [label = "50 Range , input: [0, 1], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_4_47 [label = "51 Range , input: [1, 4], rsm: [FlowsTo_1, FlowsTo_2]", shape = ellipse] +_4_48 [label = "52 Terminal 'assign', input: [8, 6]", shape = rectangle] +_4_49 [label = "53 Terminal 'load_0', input: [6, 4]", shape = rectangle] +_4_50 [label = "54 Intermediate input: 2, rsm: Alias_1, input: [4, 4]", shape = plain] +_4_51 [label = "55 Terminal 'alloc_r', input: [0, 1]", shape = rectangle] +_4_52 [label = "56 Terminal 'store_0_r', input: [1, 4]", shape = rectangle] +_4_53 [label = "57 Range , input: [4, 2], rsm: [Alias_0, Alias_1]", shape = ellipse] +_4_54 [label = "58 Range , input: [2, 4], rsm: [Alias_1, Alias_2]", shape = ellipse] +_4_55 [label = "59 Nonterminal PointsTo, input: [4, 2]", shape = invtrapezium] +_4_56 [label = "6 Intermediate input: 8, rsm: S_1, input: [8, 10]", shape = plain] +_4_57 [label = "60 Nonterminal FlowsTo, input: [2, 4]", shape = invtrapezium] +_4_58 [label = "61 Range , input: [4, 2], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_4_59 [label = "62 Range , input: [2, 4], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_4_60 [label = "63 Terminal 'alloc', input: [4, 2]", shape = rectangle] +_4_61 [label = "64 Terminal 'alloc_r', input: [2, 4]", shape = rectangle] +_4_62 [label = "7 Nonterminal PointsTo, input: [10, 12]", shape = invtrapezium] +_4_63 [label = "8 Range , input: [8, 8], rsm: [S_0, S_1]", shape = ellipse] +_4_64 [label = "9 Range , input: [8, 10], rsm: [S_1, S_0]", shape = ellipse] +_4_0->_4_1 +_4_1->_4_12 +_4_2->_4_4 +_4_3->_4_5 +_4_5->_4_6 +_4_6->_4_7 +_4_6->_4_8 +_4_7->_4_9 +_4_8->_4_10 +_4_9->_4_11 +_4_10->_4_13 +_4_11->_4_14 +_4_12->_4_23 +_4_12->_4_34 +_4_13->_4_15 +_4_14->_4_16 +_4_14->_4_17 +_4_15->_4_18 +_4_15->_4_19 +_4_16->_4_20 +_4_17->_4_21 +_4_18->_4_22 +_4_19->_4_24 +_4_20->_4_25 +_4_20->_4_26 +_4_22->_4_27 +_4_22->_4_28 +_4_23->_4_45 +_4_23->_4_56 +_4_25->_4_29 +_4_26->_4_30 +_4_27->_4_31 +_4_28->_4_32 +_4_29->_4_33 +_4_29->_4_35 +_4_31->_4_36 +_4_31->_4_37 +_4_33->_4_38 +_4_34->_4_62 +_4_35->_4_39 +_4_36->_4_40 +_4_37->_4_41 +_4_38->_4_42 +_4_38->_4_43 +_4_39->_4_44 +_4_40->_4_46 +_4_40->_4_47 +_4_41->_4_44 +_4_42->_4_48 +_4_43->_4_49 +_4_44->_4_50 +_4_46->_4_51 +_4_47->_4_52 +_4_50->_4_53 +_4_50->_4_54 +_4_53->_4_55 +_4_54->_4_57 +_4_55->_4_58 +_4_56->_4_63 +_4_56->_4_64 +_4_57->_4_59 +_4_58->_4_60 +_4_59->_4_61 +_4_62->_4_2 +_4_63->_4_3 +_4_64->_4_45 +} + +subgraph cluster_5{ +labelloc="t" +_5_0 [label = "0 Nonterminal S, input: [8, 13]", shape = invtrapezium] +_5_1 [label = "1 Range , input: [8, 13], rsm: [S_0, S_2]", shape = ellipse] +_5_2 [label = "10 Nonterminal Alias, input: [8, 9]", shape = invtrapezium] +_5_3 [label = "11 Terminal 'store_3', input: [9, 11]", shape = rectangle] +_5_4 [label = "12 Terminal 'alloc', input: [11, 13]", shape = rectangle] +_5_5 [label = "13 Range , input: [8, 9], rsm: [Alias_0, Alias_2]", shape = ellipse] +_5_6 [label = "14 Intermediate input: 0, rsm: Alias_1, input: [8, 9]", shape = plain] +_5_7 [label = "15 Range , input: [8, 0], rsm: [Alias_0, Alias_1]", shape = ellipse] +_5_8 [label = "16 Range , input: [0, 9], rsm: [Alias_1, Alias_2]", shape = ellipse] +_5_9 [label = "17 Nonterminal PointsTo, input: [8, 0]", shape = invtrapezium] +_5_10 [label = "18 Nonterminal FlowsTo, input: [0, 9]", shape = invtrapezium] +_5_11 [label = "19 Range , input: [8, 0], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_5_12 [label = "2 Intermediate input: 11, rsm: S_0, input: [8, 13]", shape = plain] +_5_13 [label = "20 Range , input: [0, 9], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_5_14 [label = "21 Intermediate input: 1, rsm: PointsTo_0, input: [8, 0]", shape = plain] +_5_15 [label = "22 Intermediate input: 7, rsm: FlowsTo_1, input: [0, 9]", shape = plain] +_5_16 [label = "23 Range , input: [8, 1], rsm: [PointsTo_0, PointsTo_0]", shape = ellipse] +_5_17 [label = "24 Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_5_18 [label = "25 Range , input: [0, 7], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_5_19 [label = "26 Range , input: [7, 9], rsm: [FlowsTo_1, FlowsTo_1]", shape = ellipse] +_5_20 [label = "27 Intermediate input: 4, rsm: PointsTo_9, input: [8, 1]", shape = plain] +_5_21 [label = "28 Terminal 'alloc', input: [1, 0]", shape = rectangle] +_5_22 [label = "29 Intermediate input: 5, rsm: FlowsTo_8, input: [0, 7]", shape = plain] +_5_23 [label = "3 Range , input: [8, 11], rsm: [S_0, S_0]", shape = ellipse] +_5_24 [label = "30 Terminal 'assign_r', input: [7, 9]", shape = rectangle] +_5_25 [label = "31 Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_9]", shape = ellipse] +_5_26 [label = "32 Range , input: [4, 1], rsm: [PointsTo_9, PointsTo_0]", shape = ellipse] +_5_27 [label = "33 Range , input: [0, 5], rsm: [FlowsTo_0, FlowsTo_8]", shape = ellipse] +_5_28 [label = "34 Range , input: [5, 7], rsm: [FlowsTo_8, FlowsTo_1]", shape = ellipse] +_5_29 [label = "35 Intermediate input: 4, rsm: PointsTo_1, input: [8, 4]", shape = plain] +_5_30 [label = "36 Terminal 'store_0', input: [4, 1]", shape = rectangle] +_5_31 [label = "37 Intermediate input: 5, rsm: FlowsTo_3, input: [0, 5]", shape = plain] +_5_32 [label = "38 Terminal 'load_1_r', input: [5, 7]", shape = rectangle] +_5_33 [label = "39 Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_1]", shape = ellipse] +_5_34 [label = "4 Range , input: [11, 13], rsm: [S_0, S_2]", shape = ellipse] +_5_35 [label = "40 Range , input: [4, 4], rsm: [PointsTo_1, PointsTo_9]", shape = ellipse] +_5_36 [label = "41 Range , input: [0, 5], rsm: [FlowsTo_0, FlowsTo_3]", shape = ellipse] +_5_37 [label = "42 Range , input: [5, 5], rsm: [FlowsTo_3, FlowsTo_8]", shape = ellipse] +_5_38 [label = "43 Intermediate input: 6, rsm: PointsTo_0, input: [8, 4]", shape = plain] +_5_39 [label = "44 Nonterminal Alias, input: [4, 4]", shape = invtrapezium] +_5_40 [label = "45 Intermediate input: 1, rsm: FlowsTo_1, input: [0, 5]", shape = plain] +_5_41 [label = "46 Nonterminal Alias, input: [5, 5]", shape = invtrapezium] +_5_42 [label = "47 Range , input: [8, 6], rsm: [PointsTo_0, PointsTo_0]", shape = ellipse] +_5_43 [label = "48 Range , input: [6, 4], rsm: [PointsTo_0, PointsTo_1]", shape = ellipse] +_5_44 [label = "49 Range , input: [4, 4], rsm: [Alias_0, Alias_2]", shape = ellipse] +_5_45 [label = "5 Intermediate input: 9, rsm: S_1, input: [8, 11]", shape = plain] +_5_46 [label = "50 Range , input: [0, 1], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_5_47 [label = "51 Range , input: [1, 5], rsm: [FlowsTo_1, FlowsTo_3]", shape = ellipse] +_5_48 [label = "52 Range , input: [5, 5], rsm: [Alias_0, Alias_2]", shape = ellipse] +_5_49 [label = "53 Terminal 'assign', input: [8, 6]", shape = rectangle] +_5_50 [label = "54 Terminal 'load_0', input: [6, 4]", shape = rectangle] +_5_51 [label = "55 Intermediate input: 2, rsm: Alias_1, input: [4, 4]", shape = plain] +_5_52 [label = "56 Terminal 'alloc_r', input: [0, 1]", shape = rectangle] +_5_53 [label = "57 Terminal 'store_1_r', input: [1, 5]", shape = rectangle] +_5_54 [label = "58 Intermediate input: 3, rsm: Alias_1, input: [5, 5]", shape = plain] +_5_55 [label = "59 Range , input: [4, 2], rsm: [Alias_0, Alias_1]", shape = ellipse] +_5_56 [label = "6 Nonterminal PointsTo, input: [11, 13]", shape = invtrapezium] +_5_57 [label = "60 Range , input: [2, 4], rsm: [Alias_1, Alias_2]", shape = ellipse] +_5_58 [label = "61 Range , input: [5, 3], rsm: [Alias_0, Alias_1]", shape = ellipse] +_5_59 [label = "62 Range , input: [3, 5], rsm: [Alias_1, Alias_2]", shape = ellipse] +_5_60 [label = "63 Nonterminal PointsTo, input: [4, 2]", shape = invtrapezium] +_5_61 [label = "64 Nonterminal FlowsTo, input: [2, 4]", shape = invtrapezium] +_5_62 [label = "65 Nonterminal PointsTo, input: [5, 3]", shape = invtrapezium] +_5_63 [label = "66 Nonterminal FlowsTo, input: [3, 5]", shape = invtrapezium] +_5_64 [label = "67 Range , input: [4, 2], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_5_65 [label = "68 Range , input: [2, 4], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_5_66 [label = "69 Range , input: [5, 3], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_5_67 [label = "7 Range , input: [8, 9], rsm: [S_0, S_1]", shape = ellipse] +_5_68 [label = "70 Range , input: [3, 5], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_5_69 [label = "71 Terminal 'alloc', input: [4, 2]", shape = rectangle] +_5_70 [label = "72 Terminal 'alloc_r', input: [2, 4]", shape = rectangle] +_5_71 [label = "73 Terminal 'alloc', input: [5, 3]", shape = rectangle] +_5_72 [label = "74 Terminal 'alloc_r', input: [3, 5]", shape = rectangle] +_5_73 [label = "8 Range , input: [9, 11], rsm: [S_1, S_0]", shape = ellipse] +_5_74 [label = "9 Range , input: [11, 13], rsm: [PointsTo_0, PointsTo_5]", shape = ellipse] +_5_0->_5_1 +_5_1->_5_12 +_5_2->_5_5 +_5_5->_5_6 +_5_6->_5_7 +_5_6->_5_8 +_5_7->_5_9 +_5_8->_5_10 +_5_9->_5_11 +_5_10->_5_13 +_5_11->_5_14 +_5_12->_5_23 +_5_12->_5_34 +_5_13->_5_15 +_5_14->_5_16 +_5_14->_5_17 +_5_15->_5_18 +_5_15->_5_19 +_5_16->_5_20 +_5_17->_5_21 +_5_18->_5_22 +_5_19->_5_24 +_5_20->_5_25 +_5_20->_5_26 +_5_22->_5_27 +_5_22->_5_28 +_5_23->_5_45 +_5_25->_5_29 +_5_26->_5_30 +_5_27->_5_31 +_5_28->_5_32 +_5_29->_5_33 +_5_29->_5_35 +_5_31->_5_36 +_5_31->_5_37 +_5_33->_5_38 +_5_34->_5_56 +_5_35->_5_39 +_5_36->_5_40 +_5_37->_5_41 +_5_38->_5_42 +_5_38->_5_43 +_5_39->_5_44 +_5_40->_5_46 +_5_40->_5_47 +_5_41->_5_48 +_5_42->_5_49 +_5_43->_5_50 +_5_44->_5_51 +_5_45->_5_67 +_5_45->_5_73 +_5_46->_5_52 +_5_47->_5_53 +_5_48->_5_54 +_5_51->_5_55 +_5_51->_5_57 +_5_54->_5_58 +_5_54->_5_59 +_5_55->_5_60 +_5_56->_5_74 +_5_57->_5_61 +_5_58->_5_62 +_5_59->_5_63 +_5_60->_5_64 +_5_61->_5_65 +_5_62->_5_66 +_5_63->_5_68 +_5_64->_5_69 +_5_65->_5_70 +_5_66->_5_71 +_5_67->_5_2 +_5_68->_5_72 +_5_73->_5_3 +_5_74->_5_4 +} + +} + diff --git a/cfpq-paths-app/src/main/resources/figures/graph_4_sppf.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_4_sppf.dot.svg new file mode 100644 index 000000000..f7bf293fd --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/graph_4_sppf.dot.svg @@ -0,0 +1,3255 @@ + + + + + + +g + + +cluster_2 + + + +cluster_0 + + + +cluster_1 + + + +cluster_3 + + + +cluster_5 + + + +cluster_4 + + + + +_0_0 + +0     Nonterminal S, input: [1, 0] + + + +_0_1 + +1     Range , input: [1, 0], rsm: [S_0, S_2] + + + +_0_0->_0_1 + + + + + +_0_2 + +2     Nonterminal PointsTo, input: [1, 0] + + + +_0_1->_0_2 + + + + + +_0_3 + +3     Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5] + + + +_0_2->_0_3 + + + + + +_0_4 + +4     Terminal 'alloc', input: [1, 0] + + + +_0_3->_0_4 + + + + + +_1_0 + +0     Nonterminal S, input: [1, 12] + + + +_1_1 + +1     Range , input: [1, 12], rsm: [S_0, S_2] + + + +_1_0->_1_1 + + + + + +_1_12 +2     Intermediate input: 10, rsm: S_0, input: [1, 12] + + + +_1_1->_1_12 + + + + + +_1_2 + +10     Nonterminal Alias, input: [1, 8] + + + +_1_5 + +13     Range , input: [1, 8], rsm: [Alias_0, Alias_2] + + + +_1_2->_1_5 + + + + + +_1_3 + +11     Terminal 'store_2', input: [8, 10] + + + +_1_4 + +12     Terminal 'alloc', input: [10, 12] + + + +_1_6 +14     Intermediate input: 0, rsm: Alias_1, input: [1, 8] + + + +_1_5->_1_6 + + + + + +_1_7 + +15     Range , input: [1, 0], rsm: [Alias_0, Alias_1] + + + +_1_6->_1_7 + + + + + +_1_8 + +16     Range , input: [0, 8], rsm: [Alias_1, Alias_2] + + + +_1_6->_1_8 + + + + + +_1_9 + +17     Nonterminal PointsTo, input: [1, 0] + + + +_1_7->_1_9 + + + + + +_1_10 + +18     Nonterminal FlowsTo, input: [0, 8] + + + +_1_8->_1_10 + + + + + +_1_11 + +19     Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5] + + + +_1_9->_1_11 + + + + + +_1_13 + +20     Range , input: [0, 8], rsm: [FlowsTo_0, FlowsTo_1] + + + +_1_10->_1_13 + + + + + +_1_14 + +21     Terminal 'alloc', input: [1, 0] + + + +_1_11->_1_14 + + + + + +_1_23 + +3     Range , input: [1, 10], rsm: [S_0, S_0] + + + +_1_12->_1_23 + + + + + +_1_34 + +4     Range , input: [10, 12], rsm: [S_0, S_2] + + + +_1_12->_1_34 + + + + + +_1_15 +22     Intermediate input: 6, rsm: FlowsTo_1, input: [0, 8] + + + +_1_13->_1_15 + + + + + +_1_16 + +23     Range , input: [0, 6], rsm: [FlowsTo_0, FlowsTo_1] + + + +_1_15->_1_16 + + + + + +_1_17 + +24     Range , input: [6, 8], rsm: [FlowsTo_1, FlowsTo_1] + + + +_1_15->_1_17 + + + + + +_1_18 +25     Intermediate input: 4, rsm: FlowsTo_9, input: [0, 6] + + + +_1_16->_1_18 + + + + + +_1_19 + +26     Terminal 'assign_r', input: [6, 8] + + + +_1_17->_1_19 + + + + + +_1_20 + +27     Range , input: [0, 4], rsm: [FlowsTo_0, FlowsTo_9] + + + +_1_18->_1_20 + + + + + +_1_21 + +28     Range , input: [4, 6], rsm: [FlowsTo_9, FlowsTo_1] + + + +_1_18->_1_21 + + + + + +_1_22 +29     Intermediate input: 4, rsm: FlowsTo_2, input: [0, 4] + + + +_1_20->_1_22 + + + + + +_1_24 + +30     Terminal 'load_0_r', input: [4, 6] + + + +_1_21->_1_24 + + + + + +_1_25 + +31     Range , input: [0, 4], rsm: [FlowsTo_0, FlowsTo_2] + + + +_1_22->_1_25 + + + + + +_1_26 + +32     Range , input: [4, 4], rsm: [FlowsTo_2, FlowsTo_9] + + + +_1_22->_1_26 + + + + + +_1_44 +5     Intermediate input: 8, rsm: S_1, input: [1, 10] + + + +_1_23->_1_44 + + + + + +_1_27 +33     Intermediate input: 1, rsm: FlowsTo_1, input: [0, 4] + + + +_1_25->_1_27 + + + + + +_1_28 + +34     Nonterminal Alias, input: [4, 4] + + + +_1_26->_1_28 + + + + + +_1_29 + +35     Range , input: [0, 1], rsm: [FlowsTo_0, FlowsTo_1] + + + +_1_27->_1_29 + + + + + +_1_30 + +36     Range , input: [1, 4], rsm: [FlowsTo_1, FlowsTo_2] + + + +_1_27->_1_30 + + + + + +_1_31 + +37     Range , input: [4, 4], rsm: [Alias_0, Alias_2] + + + +_1_28->_1_31 + + + + + +_1_32 + +38     Terminal 'alloc_r', input: [0, 1] + + + +_1_29->_1_32 + + + + + +_1_33 + +39     Terminal 'store_0_r', input: [1, 4] + + + +_1_30->_1_33 + + + + + +_1_35 +40     Intermediate input: 2, rsm: Alias_1, input: [4, 4] + + + +_1_31->_1_35 + + + + + +_1_45 + +6     Nonterminal PointsTo, input: [10, 12] + + + +_1_34->_1_45 + + + + + +_1_36 + +41     Range , input: [4, 2], rsm: [Alias_0, Alias_1] + + + +_1_35->_1_36 + + + + + +_1_37 + +42     Range , input: [2, 4], rsm: [Alias_1, Alias_2] + + + +_1_35->_1_37 + + + + + +_1_38 + +43     Nonterminal PointsTo, input: [4, 2] + + + +_1_36->_1_38 + + + + + +_1_39 + +44     Nonterminal FlowsTo, input: [2, 4] + + + +_1_37->_1_39 + + + + + +_1_40 + +45     Range , input: [4, 2], rsm: [PointsTo_0, PointsTo_5] + + + +_1_38->_1_40 + + + + + +_1_41 + +46     Range , input: [2, 4], rsm: [FlowsTo_0, FlowsTo_1] + + + +_1_39->_1_41 + + + + + +_1_42 + +47     Terminal 'alloc', input: [4, 2] + + + +_1_40->_1_42 + + + + + +_1_43 + +48     Terminal 'alloc_r', input: [2, 4] + + + +_1_41->_1_43 + + + + + +_1_46 + +7     Range , input: [1, 8], rsm: [S_0, S_1] + + + +_1_44->_1_46 + + + + + +_1_47 + +8     Range , input: [8, 10], rsm: [S_1, S_0] + + + +_1_44->_1_47 + + + + + +_1_48 + +9     Range , input: [10, 12], rsm: [PointsTo_0, PointsTo_5] + + + +_1_45->_1_48 + + + + + +_1_46->_1_2 + + + + + +_1_47->_1_3 + + + + + +_1_48->_1_4 + + + + + +_2_0 + +0     Nonterminal S, input: [1, 13] + + + +_2_1 + +1     Range , input: [1, 13], rsm: [S_0, S_2] + + + +_2_0->_2_1 + + + + + +_2_12 +2     Intermediate input: 11, rsm: S_0, input: [1, 13] + + + +_2_1->_2_12 + + + + + +_2_2 + +10     Nonterminal Alias, input: [1, 9] + + + +_2_5 + +13     Range , input: [1, 9], rsm: [Alias_0, Alias_2] + + + +_2_2->_2_5 + + + + + +_2_3 + +11     Terminal 'store_3', input: [9, 11] + + + +_2_4 + +12     Terminal 'alloc', input: [11, 13] + + + +_2_6 +14     Intermediate input: 0, rsm: Alias_1, input: [1, 9] + + + +_2_5->_2_6 + + + + + +_2_7 + +15     Range , input: [1, 0], rsm: [Alias_0, Alias_1] + + + +_2_6->_2_7 + + + + + +_2_8 + +16     Range , input: [0, 9], rsm: [Alias_1, Alias_2] + + + +_2_6->_2_8 + + + + + +_2_9 + +17     Nonterminal PointsTo, input: [1, 0] + + + +_2_7->_2_9 + + + + + +_2_10 + +18     Nonterminal FlowsTo, input: [0, 9] + + + +_2_8->_2_10 + + + + + +_2_11 + +19     Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5] + + + +_2_9->_2_11 + + + + + +_2_13 + +20     Range , input: [0, 9], rsm: [FlowsTo_0, FlowsTo_1] + + + +_2_10->_2_13 + + + + + +_2_14 + +21     Terminal 'alloc', input: [1, 0] + + + +_2_11->_2_14 + + + + + +_2_23 + +3     Range , input: [1, 11], rsm: [S_0, S_0] + + + +_2_12->_2_23 + + + + + +_2_34 + +4     Range , input: [11, 13], rsm: [S_0, S_2] + + + +_2_12->_2_34 + + + + + +_2_15 +22     Intermediate input: 7, rsm: FlowsTo_1, input: [0, 9] + + + +_2_13->_2_15 + + + + + +_2_16 + +23     Range , input: [0, 7], rsm: [FlowsTo_0, FlowsTo_1] + + + +_2_15->_2_16 + + + + + +_2_17 + +24     Range , input: [7, 9], rsm: [FlowsTo_1, FlowsTo_1] + + + +_2_15->_2_17 + + + + + +_2_18 +25     Intermediate input: 5, rsm: FlowsTo_8, input: [0, 7] + + + +_2_16->_2_18 + + + + + +_2_19 + +26     Terminal 'assign_r', input: [7, 9] + + + +_2_17->_2_19 + + + + + +_2_20 + +27     Range , input: [0, 5], rsm: [FlowsTo_0, FlowsTo_8] + + + +_2_18->_2_20 + + + + + +_2_21 + +28     Range , input: [5, 7], rsm: [FlowsTo_8, FlowsTo_1] + + + +_2_18->_2_21 + + + + + +_2_22 +29     Intermediate input: 5, rsm: FlowsTo_3, input: [0, 5] + + + +_2_20->_2_22 + + + + + +_2_24 + +30     Terminal 'load_1_r', input: [5, 7] + + + +_2_21->_2_24 + + + + + +_2_25 + +31     Range , input: [0, 5], rsm: [FlowsTo_0, FlowsTo_3] + + + +_2_22->_2_25 + + + + + +_2_26 + +32     Range , input: [5, 5], rsm: [FlowsTo_3, FlowsTo_8] + + + +_2_22->_2_26 + + + + + +_2_44 +5     Intermediate input: 9, rsm: S_1, input: [1, 11] + + + +_2_23->_2_44 + + + + + +_2_27 +33     Intermediate input: 1, rsm: FlowsTo_1, input: [0, 5] + + + +_2_25->_2_27 + + + + + +_2_28 + +34     Nonterminal Alias, input: [5, 5] + + + +_2_26->_2_28 + + + + + +_2_29 + +35     Range , input: [0, 1], rsm: [FlowsTo_0, FlowsTo_1] + + + +_2_27->_2_29 + + + + + +_2_30 + +36     Range , input: [1, 5], rsm: [FlowsTo_1, FlowsTo_3] + + + +_2_27->_2_30 + + + + + +_2_31 + +37     Range , input: [5, 5], rsm: [Alias_0, Alias_2] + + + +_2_28->_2_31 + + + + + +_2_32 + +38     Terminal 'alloc_r', input: [0, 1] + + + +_2_29->_2_32 + + + + + +_2_33 + +39     Terminal 'store_1_r', input: [1, 5] + + + +_2_30->_2_33 + + + + + +_2_35 +40     Intermediate input: 3, rsm: Alias_1, input: [5, 5] + + + +_2_31->_2_35 + + + + + +_2_45 + +6     Nonterminal PointsTo, input: [11, 13] + + + +_2_34->_2_45 + + + + + +_2_36 + +41     Range , input: [5, 3], rsm: [Alias_0, Alias_1] + + + +_2_35->_2_36 + + + + + +_2_37 + +42     Range , input: [3, 5], rsm: [Alias_1, Alias_2] + + + +_2_35->_2_37 + + + + + +_2_38 + +43     Nonterminal PointsTo, input: [5, 3] + + + +_2_36->_2_38 + + + + + +_2_39 + +44     Nonterminal FlowsTo, input: [3, 5] + + + +_2_37->_2_39 + + + + + +_2_40 + +45     Range , input: [5, 3], rsm: [PointsTo_0, PointsTo_5] + + + +_2_38->_2_40 + + + + + +_2_41 + +46     Range , input: [3, 5], rsm: [FlowsTo_0, FlowsTo_1] + + + +_2_39->_2_41 + + + + + +_2_42 + +47     Terminal 'alloc', input: [5, 3] + + + +_2_40->_2_42 + + + + + +_2_43 + +48     Terminal 'alloc_r', input: [3, 5] + + + +_2_41->_2_43 + + + + + +_2_46 + +7     Range , input: [1, 9], rsm: [S_0, S_1] + + + +_2_44->_2_46 + + + + + +_2_47 + +8     Range , input: [9, 11], rsm: [S_1, S_0] + + + +_2_44->_2_47 + + + + + +_2_48 + +9     Range , input: [11, 13], rsm: [PointsTo_0, PointsTo_5] + + + +_2_45->_2_48 + + + + + +_2_46->_2_2 + + + + + +_2_47->_2_3 + + + + + +_2_48->_2_4 + + + + + +_3_0 + +0     Nonterminal S, input: [8, 0] + + + +_3_1 + +1     Range , input: [8, 0], rsm: [S_0, S_2] + + + +_3_0->_3_1 + + + + + +_3_12 + +2     Nonterminal PointsTo, input: [8, 0] + + + +_3_1->_3_12 + + + + + +_3_2 + +10     Range , input: [4, 1], rsm: [PointsTo_9, PointsTo_0] + + + +_3_4 + +12     Terminal 'store_0', input: [4, 1] + + + +_3_2->_3_4 + + + + + +_3_3 +11     Intermediate input: 4, rsm: PointsTo_1, input: [8, 4] + + + +_3_5 + +13     Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_1] + + + +_3_3->_3_5 + + + + + +_3_6 + +14     Range , input: [4, 4], rsm: [PointsTo_1, PointsTo_9] + + + +_3_3->_3_6 + + + + + +_3_7 +15     Intermediate input: 6, rsm: PointsTo_0, input: [8, 4] + + + +_3_5->_3_7 + + + + + +_3_8 + +16     Nonterminal Alias, input: [4, 4] + + + +_3_6->_3_8 + + + + + +_3_9 + +17     Range , input: [8, 6], rsm: [PointsTo_0, PointsTo_0] + + + +_3_7->_3_9 + + + + + +_3_10 + +18     Range , input: [6, 4], rsm: [PointsTo_0, PointsTo_1] + + + +_3_7->_3_10 + + + + + +_3_11 + +19     Range , input: [4, 4], rsm: [Alias_0, Alias_2] + + + +_3_8->_3_11 + + + + + +_3_13 + +20     Terminal 'assign', input: [8, 6] + + + +_3_9->_3_13 + + + + + +_3_14 + +21     Terminal 'load_0', input: [6, 4] + + + +_3_10->_3_14 + + + + + +_3_15 +22     Intermediate input: 2, rsm: Alias_1, input: [4, 4] + + + +_3_11->_3_15 + + + + + +_3_23 + +3     Range , input: [8, 0], rsm: [PointsTo_0, PointsTo_5] + + + +_3_12->_3_23 + + + + + +_3_16 + +23     Range , input: [4, 2], rsm: [Alias_0, Alias_1] + + + +_3_15->_3_16 + + + + + +_3_17 + +24     Range , input: [2, 4], rsm: [Alias_1, Alias_2] + + + +_3_15->_3_17 + + + + + +_3_18 + +25     Nonterminal PointsTo, input: [4, 2] + + + +_3_16->_3_18 + + + + + +_3_19 + +26     Nonterminal FlowsTo, input: [2, 4] + + + +_3_17->_3_19 + + + + + +_3_20 + +27     Range , input: [4, 2], rsm: [PointsTo_0, PointsTo_5] + + + +_3_18->_3_20 + + + + + +_3_21 + +28     Range , input: [2, 4], rsm: [FlowsTo_0, FlowsTo_1] + + + +_3_19->_3_21 + + + + + +_3_22 + +29     Terminal 'alloc', input: [4, 2] + + + +_3_20->_3_22 + + + + + +_3_24 + +30     Terminal 'alloc_r', input: [2, 4] + + + +_3_21->_3_24 + + + + + +_3_25 +4     Intermediate input: 1, rsm: PointsTo_0, input: [8, 0] + + + +_3_23->_3_25 + + + + + +_3_26 + +5     Range , input: [8, 1], rsm: [PointsTo_0, PointsTo_0] + + + +_3_25->_3_26 + + + + + +_3_27 + +6     Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5] + + + +_3_25->_3_27 + + + + + +_3_28 +7     Intermediate input: 4, rsm: PointsTo_9, input: [8, 1] + + + +_3_26->_3_28 + + + + + +_3_29 + +8     Terminal 'alloc', input: [1, 0] + + + +_3_27->_3_29 + + + + + +_3_28->_3_2 + + + + + +_3_30 + +9     Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_9] + + + +_3_28->_3_30 + + + + + +_3_30->_3_3 + + + + + +_4_0 + +0     Nonterminal S, input: [8, 12] + + + +_4_1 + +1     Range , input: [8, 12], rsm: [S_0, S_2] + + + +_4_0->_4_1 + + + + + +_4_12 +2     Intermediate input: 10, rsm: S_0, input: [8, 12] + + + +_4_1->_4_12 + + + + + +_4_2 + +10     Range , input: [10, 12], rsm: [PointsTo_0, PointsTo_5] + + + +_4_4 + +12     Terminal 'alloc', input: [10, 12] + + + +_4_2->_4_4 + + + + + +_4_3 + +11     Nonterminal Alias, input: [8, 8] + + + +_4_5 + +13     Range , input: [8, 8], rsm: [Alias_0, Alias_2] + + + +_4_3->_4_5 + + + + + +_4_6 +14     Intermediate input: 0, rsm: Alias_1, input: [8, 8] + + + +_4_5->_4_6 + + + + + +_4_7 + +15     Range , input: [8, 0], rsm: [Alias_0, Alias_1] + + + +_4_6->_4_7 + + + + + +_4_8 + +16     Range , input: [0, 8], rsm: [Alias_1, Alias_2] + + + +_4_6->_4_8 + + + + + +_4_9 + +17     Nonterminal PointsTo, input: [8, 0] + + + +_4_7->_4_9 + + + + + +_4_10 + +18     Nonterminal FlowsTo, input: [0, 8] + + + +_4_8->_4_10 + + + + + +_4_11 + +19     Range , input: [8, 0], rsm: [PointsTo_0, PointsTo_5] + + + +_4_9->_4_11 + + + + + +_4_13 + +20     Range , input: [0, 8], rsm: [FlowsTo_0, FlowsTo_1] + + + +_4_10->_4_13 + + + + + +_4_14 +21     Intermediate input: 1, rsm: PointsTo_0, input: [8, 0] + + + +_4_11->_4_14 + + + + + +_4_23 + +3     Range , input: [8, 10], rsm: [S_0, S_0] + + + +_4_12->_4_23 + + + + + +_4_34 + +4     Range , input: [10, 12], rsm: [S_0, S_2] + + + +_4_12->_4_34 + + + + + +_4_15 +22     Intermediate input: 6, rsm: FlowsTo_1, input: [0, 8] + + + +_4_13->_4_15 + + + + + +_4_16 + +23     Range , input: [8, 1], rsm: [PointsTo_0, PointsTo_0] + + + +_4_14->_4_16 + + + + + +_4_17 + +24     Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5] + + + +_4_14->_4_17 + + + + + +_4_18 + +25     Range , input: [0, 6], rsm: [FlowsTo_0, FlowsTo_1] + + + +_4_15->_4_18 + + + + + +_4_19 + +26     Range , input: [6, 8], rsm: [FlowsTo_1, FlowsTo_1] + + + +_4_15->_4_19 + + + + + +_4_20 +27     Intermediate input: 4, rsm: PointsTo_9, input: [8, 1] + + + +_4_16->_4_20 + + + + + +_4_21 + +28     Terminal 'alloc', input: [1, 0] + + + +_4_17->_4_21 + + + + + +_4_22 +29     Intermediate input: 4, rsm: FlowsTo_9, input: [0, 6] + + + +_4_18->_4_22 + + + + + +_4_24 + +30     Terminal 'assign_r', input: [6, 8] + + + +_4_19->_4_24 + + + + + +_4_25 + +31     Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_9] + + + +_4_20->_4_25 + + + + + +_4_26 + +32     Range , input: [4, 1], rsm: [PointsTo_9, PointsTo_0] + + + +_4_20->_4_26 + + + + + +_4_27 + +33     Range , input: [0, 4], rsm: [FlowsTo_0, FlowsTo_9] + + + +_4_22->_4_27 + + + + + +_4_28 + +34     Range , input: [4, 6], rsm: [FlowsTo_9, FlowsTo_1] + + + +_4_22->_4_28 + + + + + +_4_45 + +5     Terminal 'store_2', input: [8, 10] + + + +_4_23->_4_45 + + + + + +_4_56 +6     Intermediate input: 8, rsm: S_1, input: [8, 10] + + + +_4_23->_4_56 + + + + + +_4_29 +35     Intermediate input: 4, rsm: PointsTo_1, input: [8, 4] + + + +_4_25->_4_29 + + + + + +_4_30 + +36     Terminal 'store_0', input: [4, 1] + + + +_4_26->_4_30 + + + + + +_4_31 +37     Intermediate input: 4, rsm: FlowsTo_2, input: [0, 4] + + + +_4_27->_4_31 + + + + + +_4_32 + +38     Terminal 'load_0_r', input: [4, 6] + + + +_4_28->_4_32 + + + + + +_4_33 + +39     Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_1] + + + +_4_29->_4_33 + + + + + +_4_35 + +40     Range , input: [4, 4], rsm: [PointsTo_1, PointsTo_9] + + + +_4_29->_4_35 + + + + + +_4_36 + +41     Range , input: [0, 4], rsm: [FlowsTo_0, FlowsTo_2] + + + +_4_31->_4_36 + + + + + +_4_37 + +42     Range , input: [4, 4], rsm: [FlowsTo_2, FlowsTo_9] + + + +_4_31->_4_37 + + + + + +_4_38 +43     Intermediate input: 6, rsm: PointsTo_0, input: [8, 4] + + + +_4_33->_4_38 + + + + + +_4_62 + +7     Nonterminal PointsTo, input: [10, 12] + + + +_4_34->_4_62 + + + + + +_4_39 + +44     Nonterminal Alias, input: [4, 4] + + + +_4_35->_4_39 + + + + + +_4_40 +45     Intermediate input: 1, rsm: FlowsTo_1, input: [0, 4] + + + +_4_36->_4_40 + + + + + +_4_41 + +46     Nonterminal Alias, input: [4, 4] + + + +_4_37->_4_41 + + + + + +_4_42 + +47     Range , input: [8, 6], rsm: [PointsTo_0, PointsTo_0] + + + +_4_38->_4_42 + + + + + +_4_43 + +48     Range , input: [6, 4], rsm: [PointsTo_0, PointsTo_1] + + + +_4_38->_4_43 + + + + + +_4_44 + +49     Range , input: [4, 4], rsm: [Alias_0, Alias_2] + + + +_4_39->_4_44 + + + + + +_4_46 + +50     Range , input: [0, 1], rsm: [FlowsTo_0, FlowsTo_1] + + + +_4_40->_4_46 + + + + + +_4_47 + +51     Range , input: [1, 4], rsm: [FlowsTo_1, FlowsTo_2] + + + +_4_40->_4_47 + + + + + +_4_41->_4_44 + + + + + +_4_48 + +52     Terminal 'assign', input: [8, 6] + + + +_4_42->_4_48 + + + + + +_4_49 + +53     Terminal 'load_0', input: [6, 4] + + + +_4_43->_4_49 + + + + + +_4_50 +54     Intermediate input: 2, rsm: Alias_1, input: [4, 4] + + + +_4_44->_4_50 + + + + + +_4_51 + +55     Terminal 'alloc_r', input: [0, 1] + + + +_4_46->_4_51 + + + + + +_4_52 + +56     Terminal 'store_0_r', input: [1, 4] + + + +_4_47->_4_52 + + + + + +_4_53 + +57     Range , input: [4, 2], rsm: [Alias_0, Alias_1] + + + +_4_50->_4_53 + + + + + +_4_54 + +58     Range , input: [2, 4], rsm: [Alias_1, Alias_2] + + + +_4_50->_4_54 + + + + + +_4_55 + +59     Nonterminal PointsTo, input: [4, 2] + + + +_4_53->_4_55 + + + + + +_4_57 + +60     Nonterminal FlowsTo, input: [2, 4] + + + +_4_54->_4_57 + + + + + +_4_58 + +61     Range , input: [4, 2], rsm: [PointsTo_0, PointsTo_5] + + + +_4_55->_4_58 + + + + + +_4_63 + +8     Range , input: [8, 8], rsm: [S_0, S_1] + + + +_4_56->_4_63 + + + + + +_4_64 + +9     Range , input: [8, 10], rsm: [S_1, S_0] + + + +_4_56->_4_64 + + + + + +_4_59 + +62     Range , input: [2, 4], rsm: [FlowsTo_0, FlowsTo_1] + + + +_4_57->_4_59 + + + + + +_4_60 + +63     Terminal 'alloc', input: [4, 2] + + + +_4_58->_4_60 + + + + + +_4_61 + +64     Terminal 'alloc_r', input: [2, 4] + + + +_4_59->_4_61 + + + + + +_4_62->_4_2 + + + + + +_4_63->_4_3 + + + + + +_4_64->_4_45 + + + + + +_5_0 + +0     Nonterminal S, input: [8, 13] + + + +_5_1 + +1     Range , input: [8, 13], rsm: [S_0, S_2] + + + +_5_0->_5_1 + + + + + +_5_12 +2     Intermediate input: 11, rsm: S_0, input: [8, 13] + + + +_5_1->_5_12 + + + + + +_5_2 + +10     Nonterminal Alias, input: [8, 9] + + + +_5_5 + +13     Range , input: [8, 9], rsm: [Alias_0, Alias_2] + + + +_5_2->_5_5 + + + + + +_5_3 + +11     Terminal 'store_3', input: [9, 11] + + + +_5_4 + +12     Terminal 'alloc', input: [11, 13] + + + +_5_6 +14     Intermediate input: 0, rsm: Alias_1, input: [8, 9] + + + +_5_5->_5_6 + + + + + +_5_7 + +15     Range , input: [8, 0], rsm: [Alias_0, Alias_1] + + + +_5_6->_5_7 + + + + + +_5_8 + +16     Range , input: [0, 9], rsm: [Alias_1, Alias_2] + + + +_5_6->_5_8 + + + + + +_5_9 + +17     Nonterminal PointsTo, input: [8, 0] + + + +_5_7->_5_9 + + + + + +_5_10 + +18     Nonterminal FlowsTo, input: [0, 9] + + + +_5_8->_5_10 + + + + + +_5_11 + +19     Range , input: [8, 0], rsm: [PointsTo_0, PointsTo_5] + + + +_5_9->_5_11 + + + + + +_5_13 + +20     Range , input: [0, 9], rsm: [FlowsTo_0, FlowsTo_1] + + + +_5_10->_5_13 + + + + + +_5_14 +21     Intermediate input: 1, rsm: PointsTo_0, input: [8, 0] + + + +_5_11->_5_14 + + + + + +_5_23 + +3     Range , input: [8, 11], rsm: [S_0, S_0] + + + +_5_12->_5_23 + + + + + +_5_34 + +4     Range , input: [11, 13], rsm: [S_0, S_2] + + + +_5_12->_5_34 + + + + + +_5_15 +22     Intermediate input: 7, rsm: FlowsTo_1, input: [0, 9] + + + +_5_13->_5_15 + + + + + +_5_16 + +23     Range , input: [8, 1], rsm: [PointsTo_0, PointsTo_0] + + + +_5_14->_5_16 + + + + + +_5_17 + +24     Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5] + + + +_5_14->_5_17 + + + + + +_5_18 + +25     Range , input: [0, 7], rsm: [FlowsTo_0, FlowsTo_1] + + + +_5_15->_5_18 + + + + + +_5_19 + +26     Range , input: [7, 9], rsm: [FlowsTo_1, FlowsTo_1] + + + +_5_15->_5_19 + + + + + +_5_20 +27     Intermediate input: 4, rsm: PointsTo_9, input: [8, 1] + + + +_5_16->_5_20 + + + + + +_5_21 + +28     Terminal 'alloc', input: [1, 0] + + + +_5_17->_5_21 + + + + + +_5_22 +29     Intermediate input: 5, rsm: FlowsTo_8, input: [0, 7] + + + +_5_18->_5_22 + + + + + +_5_24 + +30     Terminal 'assign_r', input: [7, 9] + + + +_5_19->_5_24 + + + + + +_5_25 + +31     Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_9] + + + +_5_20->_5_25 + + + + + +_5_26 + +32     Range , input: [4, 1], rsm: [PointsTo_9, PointsTo_0] + + + +_5_20->_5_26 + + + + + +_5_27 + +33     Range , input: [0, 5], rsm: [FlowsTo_0, FlowsTo_8] + + + +_5_22->_5_27 + + + + + +_5_28 + +34     Range , input: [5, 7], rsm: [FlowsTo_8, FlowsTo_1] + + + +_5_22->_5_28 + + + + + +_5_45 +5     Intermediate input: 9, rsm: S_1, input: [8, 11] + + + +_5_23->_5_45 + + + + + +_5_29 +35     Intermediate input: 4, rsm: PointsTo_1, input: [8, 4] + + + +_5_25->_5_29 + + + + + +_5_30 + +36     Terminal 'store_0', input: [4, 1] + + + +_5_26->_5_30 + + + + + +_5_31 +37     Intermediate input: 5, rsm: FlowsTo_3, input: [0, 5] + + + +_5_27->_5_31 + + + + + +_5_32 + +38     Terminal 'load_1_r', input: [5, 7] + + + +_5_28->_5_32 + + + + + +_5_33 + +39     Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_1] + + + +_5_29->_5_33 + + + + + +_5_35 + +40     Range , input: [4, 4], rsm: [PointsTo_1, PointsTo_9] + + + +_5_29->_5_35 + + + + + +_5_36 + +41     Range , input: [0, 5], rsm: [FlowsTo_0, FlowsTo_3] + + + +_5_31->_5_36 + + + + + +_5_37 + +42     Range , input: [5, 5], rsm: [FlowsTo_3, FlowsTo_8] + + + +_5_31->_5_37 + + + + + +_5_38 +43     Intermediate input: 6, rsm: PointsTo_0, input: [8, 4] + + + +_5_33->_5_38 + + + + + +_5_56 + +6     Nonterminal PointsTo, input: [11, 13] + + + +_5_34->_5_56 + + + + + +_5_39 + +44     Nonterminal Alias, input: [4, 4] + + + +_5_35->_5_39 + + + + + +_5_40 +45     Intermediate input: 1, rsm: FlowsTo_1, input: [0, 5] + + + +_5_36->_5_40 + + + + + +_5_41 + +46     Nonterminal Alias, input: [5, 5] + + + +_5_37->_5_41 + + + + + +_5_42 + +47     Range , input: [8, 6], rsm: [PointsTo_0, PointsTo_0] + + + +_5_38->_5_42 + + + + + +_5_43 + +48     Range , input: [6, 4], rsm: [PointsTo_0, PointsTo_1] + + + +_5_38->_5_43 + + + + + +_5_44 + +49     Range , input: [4, 4], rsm: [Alias_0, Alias_2] + + + +_5_39->_5_44 + + + + + +_5_46 + +50     Range , input: [0, 1], rsm: [FlowsTo_0, FlowsTo_1] + + + +_5_40->_5_46 + + + + + +_5_47 + +51     Range , input: [1, 5], rsm: [FlowsTo_1, FlowsTo_3] + + + +_5_40->_5_47 + + + + + +_5_48 + +52     Range , input: [5, 5], rsm: [Alias_0, Alias_2] + + + +_5_41->_5_48 + + + + + +_5_49 + +53     Terminal 'assign', input: [8, 6] + + + +_5_42->_5_49 + + + + + +_5_50 + +54     Terminal 'load_0', input: [6, 4] + + + +_5_43->_5_50 + + + + + +_5_51 +55     Intermediate input: 2, rsm: Alias_1, input: [4, 4] + + + +_5_44->_5_51 + + + + + +_5_67 + +7     Range , input: [8, 9], rsm: [S_0, S_1] + + + +_5_45->_5_67 + + + + + +_5_73 + +8     Range , input: [9, 11], rsm: [S_1, S_0] + + + +_5_45->_5_73 + + + + + +_5_52 + +56     Terminal 'alloc_r', input: [0, 1] + + + +_5_46->_5_52 + + + + + +_5_53 + +57     Terminal 'store_1_r', input: [1, 5] + + + +_5_47->_5_53 + + + + + +_5_54 +58     Intermediate input: 3, rsm: Alias_1, input: [5, 5] + + + +_5_48->_5_54 + + + + + +_5_55 + +59     Range , input: [4, 2], rsm: [Alias_0, Alias_1] + + + +_5_51->_5_55 + + + + + +_5_57 + +60     Range , input: [2, 4], rsm: [Alias_1, Alias_2] + + + +_5_51->_5_57 + + + + + +_5_58 + +61     Range , input: [5, 3], rsm: [Alias_0, Alias_1] + + + +_5_54->_5_58 + + + + + +_5_59 + +62     Range , input: [3, 5], rsm: [Alias_1, Alias_2] + + + +_5_54->_5_59 + + + + + +_5_60 + +63     Nonterminal PointsTo, input: [4, 2] + + + +_5_55->_5_60 + + + + + +_5_74 + +9     Range , input: [11, 13], rsm: [PointsTo_0, PointsTo_5] + + + +_5_56->_5_74 + + + + + +_5_61 + +64     Nonterminal FlowsTo, input: [2, 4] + + + +_5_57->_5_61 + + + + + +_5_62 + +65     Nonterminal PointsTo, input: [5, 3] + + + +_5_58->_5_62 + + + + + +_5_63 + +66     Nonterminal FlowsTo, input: [3, 5] + + + +_5_59->_5_63 + + + + + +_5_64 + +67     Range , input: [4, 2], rsm: [PointsTo_0, PointsTo_5] + + + +_5_60->_5_64 + + + + + +_5_65 + +68     Range , input: [2, 4], rsm: [FlowsTo_0, FlowsTo_1] + + + +_5_61->_5_65 + + + + + +_5_66 + +69     Range , input: [5, 3], rsm: [PointsTo_0, PointsTo_5] + + + +_5_62->_5_66 + + + + + +_5_68 + +70     Range , input: [3, 5], rsm: [FlowsTo_0, FlowsTo_1] + + + +_5_63->_5_68 + + + + + +_5_69 + +71     Terminal 'alloc', input: [4, 2] + + + +_5_64->_5_69 + + + + + +_5_70 + +72     Terminal 'alloc_r', input: [2, 4] + + + +_5_65->_5_70 + + + + + +_5_71 + +73     Terminal 'alloc', input: [5, 3] + + + +_5_66->_5_71 + + + + + +_5_67->_5_2 + + + + + +_5_72 + +74     Terminal 'alloc_r', input: [3, 5] + + + +_5_68->_5_72 + + + + + +_5_73->_5_3 + + + + + +_5_74->_5_4 + + + + + diff --git a/cfpq-paths-app/src/main/resources/figures/rsm.dot b/cfpq-paths-app/src/main/resources/figures/rsm.dot new file mode 100644 index 000000000..f1ae35e3b --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/rsm.dot @@ -0,0 +1,106 @@ +digraph g { +S_2 [label = "S_2", shape = doublecircle, color = red] +PointsTo_4 [label = "PointsTo_4", shape = circle, color = black] +PointsTo_3 [label = "PointsTo_3", shape = circle, color = black] +PointsTo_2 [label = "PointsTo_2", shape = circle, color = black] +PointsTo_1 [label = "PointsTo_1", shape = circle, color = black] +FlowsTo_9 [label = "FlowsTo_9", shape = circle, color = black] +FlowsTo_8 [label = "FlowsTo_8", shape = circle, color = black] +S_1 [label = "S_1", shape = circle, color = black] +FlowsTo_5 [label = "FlowsTo_5", shape = circle, color = black] +FlowsTo_4 [label = "FlowsTo_4", shape = circle, color = black] +PointsTo_5 [label = "PointsTo_5", shape = doublecircle, color = red] +FlowsTo_1 [label = "FlowsTo_1", shape = doublecircle, color = red] +FlowsTo_7 [label = "FlowsTo_7", shape = circle, color = black] +FlowsTo_6 [label = "FlowsTo_6", shape = circle, color = black] +PointsTo_9 [label = "PointsTo_9", shape = circle, color = black] +PointsTo_8 [label = "PointsTo_8", shape = circle, color = black] +PointsTo_7 [label = "PointsTo_7", shape = circle, color = black] +FlowsTo_3 [label = "FlowsTo_3", shape = circle, color = black] +S_0 [label = "S_0", shape = circle, color = green] +PointsTo_6 [label = "PointsTo_6", shape = circle, color = black] +FlowsTo_2 [label = "FlowsTo_2", shape = circle, color = black] +Alias_2 [label = "Alias_2", shape = doublecircle, color = red] +FlowsTo_0 [label = "FlowsTo_0", shape = circle, color = green] +Alias_1 [label = "Alias_1", shape = circle, color = black] +PointsTo_0 [label = "PointsTo_0", shape = circle, color = green] +Alias_0 [label = "Alias_0", shape = circle, color = green] +PointsTo_4 -> PointsTo_6 [label = "Alias"] +PointsTo_3 -> PointsTo_7 [label = "Alias"] +PointsTo_2 -> PointsTo_8 [label = "Alias"] +PointsTo_1 -> PointsTo_9 [label = "Alias"] +FlowsTo_9 -> FlowsTo_1 [label = "load_0_r"] +FlowsTo_8 -> FlowsTo_1 [label = "load_1_r"] +S_1 -> S_0 [label = "store_0"] +S_1 -> S_0 [label = "store_1"] +S_1 -> S_0 [label = "store_2"] +S_1 -> S_0 [label = "store_3"] +FlowsTo_5 -> FlowsTo_6 [label = "Alias"] +FlowsTo_4 -> FlowsTo_7 [label = "Alias"] +FlowsTo_1 -> FlowsTo_1 [label = "assign_r"] +FlowsTo_1 -> FlowsTo_2 [label = "store_0_r"] +FlowsTo_1 -> FlowsTo_3 [label = "store_1_r"] +FlowsTo_1 -> FlowsTo_4 [label = "store_2_r"] +FlowsTo_1 -> FlowsTo_5 [label = "store_3_r"] +FlowsTo_7 -> FlowsTo_1 [label = "load_2_r"] +FlowsTo_6 -> FlowsTo_1 [label = "load_3_r"] +PointsTo_9 -> PointsTo_0 [label = "store_0"] +PointsTo_8 -> PointsTo_0 [label = "store_1"] +PointsTo_7 -> PointsTo_0 [label = "store_2"] +FlowsTo_3 -> FlowsTo_8 [label = "Alias"] +S_0 -> S_0 [label = "store_0"] +S_0 -> S_0 [label = "store_1"] +S_0 -> S_0 [label = "store_2"] +S_0 -> S_0 [label = "store_3"] +S_0 -> S_1 [label = "Alias"] +S_0 -> S_2 [label = "PointsTo"] +PointsTo_6 -> PointsTo_0 [label = "store_3"] +FlowsTo_2 -> FlowsTo_9 [label = "Alias"] +FlowsTo_0 -> FlowsTo_1 [label = "alloc_r"] +Alias_1 -> Alias_2 [label = "FlowsTo"] +PointsTo_0 -> PointsTo_0 [label = "assign"] +PointsTo_0 -> PointsTo_1 [label = "load_0"] +PointsTo_0 -> PointsTo_2 [label = "load_1"] +PointsTo_0 -> PointsTo_3 [label = "load_2"] +PointsTo_0 -> PointsTo_4 [label = "load_3"] +PointsTo_0 -> PointsTo_5 [label = "alloc"] +Alias_0 -> Alias_1 [label = "PointsTo"] +subgraph cluster_S { +S_1 +S_2 +S_0 +label = "S" +} +subgraph cluster_FlowsTo { +FlowsTo_9 +FlowsTo_8 +FlowsTo_0 +FlowsTo_5 +FlowsTo_4 +FlowsTo_1 +FlowsTo_7 +FlowsTo_6 +FlowsTo_3 +FlowsTo_2 +label = "FlowsTo" +} +subgraph cluster_Alias { +Alias_2 +Alias_0 +Alias_1 +label = "Alias" +} +subgraph cluster_PointsTo { +PointsTo_4 +PointsTo_3 +PointsTo_2 +PointsTo_1 +PointsTo_5 +PointsTo_0 +PointsTo_9 +PointsTo_8 +PointsTo_7 +PointsTo_6 +label = "PointsTo" +} +} diff --git a/cfpq-paths-app/src/main/resources/figures/rsm.dot.svg b/cfpq-paths-app/src/main/resources/figures/rsm.dot.svg new file mode 100644 index 000000000..096eee3a8 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/figures/rsm.dot.svg @@ -0,0 +1,473 @@ + + + + + + +g + + +cluster_S + +S + + +cluster_FlowsTo + +FlowsTo + + +cluster_Alias + +Alias + + +cluster_PointsTo + +PointsTo + + + +S_2 + + +S_2 + + + +PointsTo_4 + +PointsTo_4 + + + +PointsTo_6 + +PointsTo_6 + + + +PointsTo_4->PointsTo_6 + + +Alias + + + +PointsTo_3 + +PointsTo_3 + + + +PointsTo_7 + +PointsTo_7 + + + +PointsTo_3->PointsTo_7 + + +Alias + + + +PointsTo_2 + +PointsTo_2 + + + +PointsTo_8 + +PointsTo_8 + + + +PointsTo_2->PointsTo_8 + + +Alias + + + +PointsTo_1 + +PointsTo_1 + + + +PointsTo_9 + +PointsTo_9 + + + +PointsTo_1->PointsTo_9 + + +Alias + + + +FlowsTo_9 + +FlowsTo_9 + + + +FlowsTo_1 + + +FlowsTo_1 + + + +FlowsTo_9->FlowsTo_1 + + +load_0_r + + + +FlowsTo_8 + +FlowsTo_8 + + + +FlowsTo_8->FlowsTo_1 + + +load_1_r + + + +S_1 + +S_1 + + + +S_0 + +S_0 + + + +S_1->S_0 + + +store_0 + + + +S_1->S_0 + + +store_1 + + + +S_1->S_0 + + +store_2 + + + +S_1->S_0 + + +store_3 + + + +FlowsTo_5 + +FlowsTo_5 + + + +FlowsTo_6 + +FlowsTo_6 + + + +FlowsTo_5->FlowsTo_6 + + +Alias + + + +FlowsTo_4 + +FlowsTo_4 + + + +FlowsTo_7 + +FlowsTo_7 + + + +FlowsTo_4->FlowsTo_7 + + +Alias + + + +PointsTo_5 + + +PointsTo_5 + + + +FlowsTo_1->FlowsTo_5 + + +store_3_r + + + +FlowsTo_1->FlowsTo_4 + + +store_2_r + + + +FlowsTo_1->FlowsTo_1 + + +assign_r + + + +FlowsTo_3 + +FlowsTo_3 + + + +FlowsTo_1->FlowsTo_3 + + +store_1_r + + + +FlowsTo_2 + +FlowsTo_2 + + + +FlowsTo_1->FlowsTo_2 + + +store_0_r + + + +FlowsTo_7->FlowsTo_1 + + +load_2_r + + + +FlowsTo_6->FlowsTo_1 + + +load_3_r + + + +PointsTo_0 + +PointsTo_0 + + + +PointsTo_9->PointsTo_0 + + +store_0 + + + +PointsTo_8->PointsTo_0 + + +store_1 + + + +PointsTo_7->PointsTo_0 + + +store_2 + + + +FlowsTo_3->FlowsTo_8 + + +Alias + + + +S_0->S_2 + + +PointsTo + + + +S_0->S_1 + + +Alias + + + +S_0->S_0 + + +store_0 + + + +S_0->S_0 + + +store_1 + + + +S_0->S_0 + + +store_2 + + + +S_0->S_0 + + +store_3 + + + +PointsTo_6->PointsTo_0 + + +store_3 + + + +FlowsTo_2->FlowsTo_9 + + +Alias + + + +Alias_2 + + +Alias_2 + + + +FlowsTo_0 + +FlowsTo_0 + + + +FlowsTo_0->FlowsTo_1 + + +alloc_r + + + +Alias_1 + +Alias_1 + + + +Alias_1->Alias_2 + + +FlowsTo + + + +PointsTo_0->PointsTo_4 + + +load_3 + + + +PointsTo_0->PointsTo_3 + + +load_2 + + + +PointsTo_0->PointsTo_2 + + +load_1 + + + +PointsTo_0->PointsTo_1 + + +load_0 + + + +PointsTo_0->PointsTo_5 + + +alloc + + + +PointsTo_0->PointsTo_0 + + +assign + + + +Alias_0 + +Alias_0 + + + +Alias_0->Alias_1 + + +PointsTo + + + diff --git a/cfpq-paths-app/src/main/resources/graph_1.dot b/cfpq-paths-app/src/main/resources/graph_1.dot new file mode 100644 index 000000000..47cc9326e --- /dev/null +++ b/cfpq-paths-app/src/main/resources/graph_1.dot @@ -0,0 +1,27 @@ +digraph { + start -> 1; + 1 -> 0 [label = "alloc"]; + 0 -> 1 [label = "alloc_r"]; + 2 -> 1 [label = "assign"]; + 1 -> 2 [label = "assign_r"]; + 2 -> 3 [label = "store_0"]; + 3 -> 2 [label = "store_0_r"]; + 3 -> 4 [label = "alloc"]; + 4 -> 3 [label = "alloc_r"]; + 5 -> 3 [label = "assign"]; + 3 -> 5 [label = "assign_r"]; + 5 -> 6 [label = "store_1"]; + 6 -> 5 [label = "store_1_r"]; + 6 -> 7 [label = "alloc"]; + 7 -> 6 [label = "alloc_r"]; + + 0[label = "new X()"] + 1[label = "n"] + 2[label = "l"] + 3[label = "y"] + 4[label = "new Y()"] + 5[label = "t"] + 6[label = "z"] + 7[label = "new Z()"] + +} diff --git a/cfpq-paths-app/src/main/resources/graph_2.dot b/cfpq-paths-app/src/main/resources/graph_2.dot new file mode 100644 index 000000000..3067231fa --- /dev/null +++ b/cfpq-paths-app/src/main/resources/graph_2.dot @@ -0,0 +1,25 @@ +digraph { + start -> 0; + 0 -> 1 [label = "alloc"]; + 1 -> 0 [label = "alloc_r"]; + 2 -> 0 [label = "assign"]; + 0 -> 2 [label = "assign_r"]; + 2 -> 1 [label = "pt"]; + 1 -> 2 [label = "pt_r"]; + 2 -> 3 [label = "store_0"]; + 3 -> 2 [label = "store_0_r"]; + 3 -> 4 [label = "alloc"]; + 4 -> 3 [label = "alloc_r"]; + 2 -> 5 [label = "assign"]; + 5 -> 2 [label = "assign_r"]; + 5 -> 2 [label = "load_0"]; + 2 -> 5 [label = "load_0_r"]; + + 0[label = "n"] + 1[label = "new X() // line 1"] + 2[label = "l"] + 3[label = "tmp1 // line 4"] + 4[label = "new X() // line 4"] + 5[label = "tmp2 // line 5"] + +} diff --git a/cfpq-paths-app/src/main/resources/graph_3.dot b/cfpq-paths-app/src/main/resources/graph_3.dot new file mode 100644 index 000000000..f3451bb6a --- /dev/null +++ b/cfpq-paths-app/src/main/resources/graph_3.dot @@ -0,0 +1,20 @@ +digraph { + start -> 0; + 1 -> 0 [label = "assign"]; + 0 -> 1 [label = "assign_r"]; + 1 -> 2 [label = "store_0"]; + 2 -> 1 [label = "store_0_r"]; + 1 -> 2 [label = "assign"]; + 2 -> 1 [label = "assign_r"]; + 2 -> 3 [label = "alloc"]; + 3 -> 2 [label = "alloc_r"]; + 0 -> 4 [label = "alloc"]; + 4 -> 0 [label = "alloc_r"]; + + + 0[label = "n"] + 1[label = "l"] + 2[label = "t" ] + 3[label = "new X() // line 4"] + 4[label = "new X() // line 1"] +} diff --git a/cfpq-paths-app/src/main/resources/graph_4.dot b/cfpq-paths-app/src/main/resources/graph_4.dot new file mode 100644 index 000000000..8ff719da2 --- /dev/null +++ b/cfpq-paths-app/src/main/resources/graph_4.dot @@ -0,0 +1,45 @@ +digraph { + start -> 1; + start -> 8; + 1 -> 0 [label = "alloc"]; + 0 -> 1 [label = "alloc_r"]; + 4 -> 2 [label = "alloc"]; + 2 -> 4 [label = "alloc_r"]; + 5 -> 3 [label = "alloc"]; + 3 -> 5 [label = "alloc_r"]; + 10 -> 12 [label = "alloc"]; + 12 -> 10 [label = "alloc_r"]; + 11 -> 13 [label = "alloc"]; + 13 -> 11 [label = "alloc_r"]; + 8 -> 6 [label = "assign"]; + 6 -> 8 [label = "assign_r"]; + 9 -> 7 [label = "assign"]; + 7 -> 9 [label = "assign_r"]; + 4 -> 1 [label = "store_0"]; + 1 -> 4 [label = "store_0_r"]; + 5 -> 1 [label = "store_1"]; + 1 -> 5 [label = "store_1_r"]; + 8 -> 10 [label = "store_2"]; + 10 -> 8 [label = "store_2_r"]; + 9 -> 11 [label = "store_3"]; + 11 -> 9 [label = "store_3_r"]; + 6 -> 4 [label = "load_0"]; + 4 -> 6 [label = "load_0_r"]; + 7 -> 5 [label = "load_1"]; + 5 -> 7 [label = "load_1_r"]; + + 0[label="new X()"]; + 1[label="n"]; + 2[label="new Z()"]; + 3[label="new U()"]; + 4[label="z"]; + 5[label="u"]; + 6[label="tmp1 // line 6"]; + 7[label="tmp2 // line 8"]; + 8[label="v"]; + 9[label="r"]; + 10[label="tmp3 // line 7"]; + 11[label="tmp4 // line 9"]; + 12[label="new Y()"]; + 13[label="new P()"]; +} diff --git a/settings.gradle.kts b/settings.gradle.kts index a77d71c5f..0055379ac 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -4,4 +4,5 @@ plugins { rootProject.name = "ucfs" include("solver") include("generator") -include("test-shared") \ No newline at end of file +include("test-shared") +include("cfpq-paths-app") diff --git a/solver/src/main/kotlin/org/ucfs/grammar/combinator/extension/StringExtension.kt b/solver/src/main/kotlin/org/ucfs/grammar/combinator/extension/StringExtension.kt index 738cfc41a..8b4154f9e 100644 --- a/solver/src/main/kotlin/org/ucfs/grammar/combinator/extension/StringExtension.kt +++ b/solver/src/main/kotlin/org/ucfs/grammar/combinator/extension/StringExtension.kt @@ -12,6 +12,7 @@ object StringExtension { .fold(initial) { acc: Regexp, i: Term -> Alternative.makeAlternative(acc, i) } } infix operator fun Regexp.times(other: String): Concat = Concat(head = this, Term(other)) + infix operator fun Regexp.times(other: Regexp): Concat = Concat(head = this, other) infix operator fun String.times(other: String): Concat = Concat(head = Term(this), Term(other)) infix operator fun String.times(other: Regexp): Concat = Concat(head = Term(this), other)