From 79c0dd3c98b8522d37eb12515b1c7e2794414615 Mon Sep 17 00:00:00 2001 From: Vladimir Kutuev Date: Wed, 11 Feb 2026 01:47:48 +0300 Subject: [PATCH 01/22] Add Regexp-Regexp Concat operator for Grammar DSL --- .../org/ucfs/grammar/combinator/extension/StringExtension.kt | 1 + 1 file changed, 1 insertion(+) 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) From 36a33ce238c64b4d6e421a75db1561b893084bef Mon Sep 17 00:00:00 2001 From: Vladimir Kutuev Date: Wed, 11 Feb 2026 01:54:30 +0300 Subject: [PATCH 02/22] Add paths extraction app --- cfpq-app/build.gradle.kts | 21 +++++++ cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 70 +++++++++++++++++++++ cfpq-app/src/main/resources/graph_1.dot | 12 ++++ settings.gradle.kts | 3 +- 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 cfpq-app/build.gradle.kts create mode 100644 cfpq-app/src/main/kotlin/me/vkutuev/Main.kt create mode 100644 cfpq-app/src/main/resources/graph_1.dot diff --git a/cfpq-app/build.gradle.kts b/cfpq-app/build.gradle.kts new file mode 100644 index 000000000..d7c338601 --- /dev/null +++ b/cfpq-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 = "me.vkutuev.MainKt" +} diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt new file mode 100644 index 000000000..282703535 --- /dev/null +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -0,0 +1,70 @@ +package me.vkutuev + +import org.ucfs.grammar.combinator.Grammar +import org.ucfs.grammar.combinator.extension.StringExtension.many +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.many +import org.ucfs.input.DotParser +import org.ucfs.input.InputGraph +import org.ucfs.input.TerminalInputLabel +import org.ucfs.parser.Gll +import org.ucfs.sppf.node.* + +data class Input(val graphDot: String, val grammar: Grammar) + +class RequestGrammar : Grammar() { + val S by Nt().asStart() + val R by Nt(many("assign_r" or "load_0_r" or "load_1_r")) + + init { + S /= many("assign") * many(R * ("store_0" or "store_1")) * "pt" + } +} + +fun getInput(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 OutEgde(val start: Int, val symbol: String, val end: Int) + +fun getPathFromSppf(node: RangeSppfNode): List { + when (val nodeType = node.type) { + is TerminalType<*> -> { + val range = node.inputRange ?: throw RuntimeException("Null inputRange for TerminalType node of SPPF") + return listOf(OutEgde(range.from, nodeType.terminal.toString(), range.to)) + } + + is NonterminalType if nodeType.startState.nonterminal.name == "R" -> { + val range = node.inputRange ?: throw RuntimeException("Null inputRange for R Nonterminal node of SPPF") + return listOf(OutEgde(range.from, "R", range.to)) + } + + is EpsilonNonterminalType -> { + return emptyList() + } + + is EmptyType -> { + throw RuntimeException("SPPF cannot contain EmptyRange") + } + + else -> { + return node.children.flatMap { getPathFromSppf(it) } + } + } +} + +fun main() { + val graph = getInput("graph_1.dot") + val grammar = RequestGrammar() + val gll = Gll.gll(grammar.rsm, graph) + val sppf = gll.parse() + println("Result length ${sppf.size}") + sppf.forEach { + println(getPathFromSppf(it).toString()) + } +} diff --git a/cfpq-app/src/main/resources/graph_1.dot b/cfpq-app/src/main/resources/graph_1.dot new file mode 100644 index 000000000..171c4f28d --- /dev/null +++ b/cfpq-app/src/main/resources/graph_1.dot @@ -0,0 +1,12 @@ +digraph { + start -> 1; + 1 -> 0 [label = "pt"]; + 2 -> 1 [label = "assign"]; + 1 -> 2 [label = "assign_r"]; + 2 -> 3 [label = "store_0"]; + 3 -> 4 [label = "pt"]; + 5 -> 3 [label = "assign"]; + 3 -> 5 [label = "assign_r"]; + 5 -> 6 [label = "store_1"]; + 6 -> 7 [label = "pt"]; +} diff --git a/settings.gradle.kts b/settings.gradle.kts index a77d71c5f..3e92e4f30 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-app") From 5ece2aeceb656906bf6bed7db170632e992c7be5 Mon Sep 17 00:00:00 2001 From: Vladimir Kutuev Date: Wed, 11 Feb 2026 02:51:36 +0300 Subject: [PATCH 03/22] Add more examples --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 50 ++++++++++++++++----- cfpq-app/src/main/resources/graph_2.dot | 12 +++++ cfpq-app/src/main/resources/graph_3.dot | 9 ++++ 3 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 cfpq-app/src/main/resources/graph_2.dot create mode 100644 cfpq-app/src/main/resources/graph_3.dot diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index 282703535..2c28510b5 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -10,11 +10,15 @@ 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 +import kotlin.collections.flatten data class Input(val graphDot: String, val grammar: Grammar) -class RequestGrammar : Grammar() { +class PointsToGrammar : Grammar() { val S by Nt().asStart() val R by Nt(many("assign_r" or "load_0_r" or "load_1_r")) @@ -23,7 +27,7 @@ class RequestGrammar : Grammar() { } } -fun getInput(name: String): InputGraph { +fun readGraph(name: String): InputGraph { val dotGraph = object {}.javaClass.getResource("/$name")?.readText() ?: throw RuntimeException("File $name not found in resources") val dotParser = DotParser() @@ -32,7 +36,10 @@ fun getInput(name: String): InputGraph { data class OutEgde(val start: Int, val symbol: String, val end: Int) -fun getPathFromSppf(node: RangeSppfNode): List { +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") @@ -52,19 +59,40 @@ fun getPathFromSppf(node: RangeSppfNode): List { 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 + } + return subPaths.filterNotNull().flatten() + } + + is Range -> { + node.children.forEach { + getPathFromSppf(it, maxDepth - 1)?.let { path -> + return@getPathFromSppf path + } + } + return null + } + else -> { - return node.children.flatMap { getPathFromSppf(it) } + println("Type of node is ${node.type.javaClass}") + throw RuntimeException("Unknown RangeType in SPPF") } } } fun main() { - val graph = getInput("graph_1.dot") - val grammar = RequestGrammar() - val gll = Gll.gll(grammar.rsm, graph) - val sppf = gll.parse() - println("Result length ${sppf.size}") - sppf.forEach { - println(getPathFromSppf(it).toString()) + listOf("graph_1.dot", "graph_2.dot", "graph_3.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 { + println(getPathFromSppf(it, maxDepth = 10).toString()) + } + println() } } diff --git a/cfpq-app/src/main/resources/graph_2.dot b/cfpq-app/src/main/resources/graph_2.dot new file mode 100644 index 000000000..69bb715ea --- /dev/null +++ b/cfpq-app/src/main/resources/graph_2.dot @@ -0,0 +1,12 @@ +digraph { + start -> 0; + 0 -> 1 [label = "pt"]; + 2 -> 0 [label = "assign"]; + 0 -> 2 [label = "assign_r"]; + 2 -> 3 [label = "store_0"]; + 3 -> 4 [label = "pt"]; + 2 -> 5 [label = "assign"]; + 5 -> 2 [label = "assign_r"]; + 5 -> 2 [label = "load_0"]; + 2 -> 5 [label = "load_0_r"]; +} diff --git a/cfpq-app/src/main/resources/graph_3.dot b/cfpq-app/src/main/resources/graph_3.dot new file mode 100644 index 000000000..7684868c8 --- /dev/null +++ b/cfpq-app/src/main/resources/graph_3.dot @@ -0,0 +1,9 @@ +digraph { + start -> 0; + 1 -> 0 [label = "assign"]; + 0 -> 1 [label = "assign_r"]; + 1 -> 2 [label = "store_0"]; + 1 -> 2 [label = "assign"]; + 2 -> 1 [label = "assign_r"]; + 2 -> 3 [label = "pt"]; +} From 38dd6a033fda1268f108c3c6db4e3e0e00025d28 Mon Sep 17 00:00:00 2001 From: Vladimir Kutuev Date: Wed, 11 Feb 2026 03:02:15 +0300 Subject: [PATCH 04/22] Optimize imports in path extractor --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index 2c28510b5..9f721bbff 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -10,11 +10,7 @@ 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 -import kotlin.collections.flatten data class Input(val graphDot: String, val grammar: Grammar) From 8672268026d53d3f8e6b7152a35725e7d56f8aaf Mon Sep 17 00:00:00 2001 From: Vladimir Kutuev Date: Wed, 11 Feb 2026 03:05:10 +0300 Subject: [PATCH 05/22] Remove unneeded class in path extractor --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index 9f721bbff..176e8b261 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -12,8 +12,6 @@ import org.ucfs.input.TerminalInputLabel import org.ucfs.parser.Gll import org.ucfs.sppf.node.* -data class Input(val graphDot: String, val grammar: Grammar) - class PointsToGrammar : Grammar() { val S by Nt().asStart() val R by Nt(many("assign_r" or "load_0_r" or "load_1_r")) From 573f321ef96b08220a1282034512a5993d60ed43 Mon Sep 17 00:00:00 2001 From: Vladimir Kutuev Date: Wed, 11 Feb 2026 11:51:55 +0300 Subject: [PATCH 06/22] Add sppf saving to path extractor --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index 176e8b261..6f83a5df8 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -10,7 +10,10 @@ 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() @@ -77,6 +80,17 @@ fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List? { } } +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").forEach { graphName -> val graph = readGraph(graphName) @@ -88,5 +102,6 @@ fun main() { println(getPathFromSppf(it, maxDepth = 10).toString()) } println() + saveSppf(graphName, sppf) } } From 7e7ea1156cfd35c24197a65cfaf5dc00914cda4c Mon Sep 17 00:00:00 2001 From: gsv Date: Wed, 11 Feb 2026 15:40:17 +0300 Subject: [PATCH 07/22] Corrected grammar. More examples. --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 9 ++--- cfpq-app/src/main/resources/graph_2.dot | 8 +++++ cfpq-app/src/main/resources/graph_4.dot | 37 +++++++++++++++++++++ 3 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 cfpq-app/src/main/resources/graph_4.dot diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index 6f83a5df8..43bb861ae 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -5,6 +5,7 @@ import org.ucfs.grammar.combinator.extension.StringExtension.many 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.input.DotParser import org.ucfs.input.InputGraph @@ -17,10 +18,10 @@ import java.nio.file.Path class PointsToGrammar : Grammar() { val S by Nt().asStart() - val R by Nt(many("assign_r" or "load_0_r" or "load_1_r")) + val R by Nt(Option("pt" * "pt_r")) init { - S /= many("assign") * many(R * ("store_0" or "store_1")) * "pt" + S /= R * many("assign_r" * ("store_0" or "store_1" or "store_2" or "store_3")) * "pt" } } @@ -92,14 +93,14 @@ fun saveSppf(name: String, sppf: Set>) { } fun main() { - listOf("graph_1.dot", "graph_2.dot", "graph_3.dot").forEach { graphName -> + 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 { - println(getPathFromSppf(it, maxDepth = 10).toString()) + println(getPathFromSppf(it, maxDepth = 100).toString()) } println() saveSppf(graphName, sppf) diff --git a/cfpq-app/src/main/resources/graph_2.dot b/cfpq-app/src/main/resources/graph_2.dot index 69bb715ea..5d854d177 100644 --- a/cfpq-app/src/main/resources/graph_2.dot +++ b/cfpq-app/src/main/resources/graph_2.dot @@ -1,12 +1,20 @@ digraph { start -> 0; 0 -> 1 [label = "pt"]; + 1 -> 0 [label = "pt_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 -> 4 [label = "pt"]; + 4 -> 3 [label = "pt"]; 2 -> 5 [label = "assign"]; 5 -> 2 [label = "assign_r"]; 5 -> 2 [label = "load_0"]; 2 -> 5 [label = "load_0_r"]; + 2 -> 4 [label = "pt"]; + 4 -> 2 [label = "pt"]; + 5 -> 4 [label = "pt"]; + 4 -> 5 [label = "pt"]; } diff --git a/cfpq-app/src/main/resources/graph_4.dot b/cfpq-app/src/main/resources/graph_4.dot new file mode 100644 index 000000000..f622ad4ad --- /dev/null +++ b/cfpq-app/src/main/resources/graph_4.dot @@ -0,0 +1,37 @@ +digraph { + start -> 1; + start -> 8; + 1 -> 0 [label = "alloc"]; + 1 -> 0 [label = "pt"]; + 0 -> 1 [label = "pt_r"]; + 4 -> 2 [label = "alloc"]; + 4 -> 2 [label = "pt"]; + 2 -> 4 [label = "pt_r"]; + 5 -> 3 [label = "alloc"]; + 5 -> 3 [label = "pt"]; + 3 -> 5 [label = "pt_r"]; + 10 -> 12 [label = "alloc"]; + 10 -> 12 [label = "pt"]; + 12 -> 10 [label = "pt_r"]; + 11 -> 13 [label = "alloc"]; + 11 -> 13 [label = "pt"]; + 13 -> 11 [label = "pt_r"]; + 8 -> 6 [label = "assign"]; + 6 -> 8 [label = "assign_r"]; + 9 -> 7 [label = "assign"]; + 7 -> 9 [label = "assign_r"]; + 4 -> 1 [label = "store_0"]; + 5 -> 1 [label = "store_1"]; + 8 -> 10 [label = "store_2"]; + 9 -> 11 [label = "store_3"]; + 6 -> 4 [label = "load_0"]; + 7 -> 5 [label = "load_1"]; + 6 -> 0 [label = "pt"]; + 0 -> 6 [label = "pt_r"]; + 8 -> 0 [label = "pt"]; + 0 -> 8 [label = "pt_r"]; + 7 -> 0 [label = "pt"]; + 0 -> 7 [label = "pt_r"]; + 9 -> 0 [label = "pt"]; + 0 -> 9 [label = "pt_r"]; +} From 0f275893417796fa084a3521ec8380e5251d7c5e Mon Sep 17 00:00:00 2001 From: gsv Date: Wed, 11 Feb 2026 16:52:22 +0300 Subject: [PATCH 08/22] Multiple paths from loops. --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 28 ++++++++++++--------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index 43bb861ae..a7b827efa 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -34,19 +34,19 @@ fun readGraph(name: String): InputGraph { data class OutEgde(val start: Int, val symbol: String, val end: Int) -fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List? { +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(OutEgde(range.from, nodeType.terminal.toString(), range.to)) + return listOf(listOf(OutEgde(range.from, nodeType.terminal.toString(), range.to))) } is NonterminalType if nodeType.startState.nonterminal.name == "R" -> { val range = node.inputRange ?: throw RuntimeException("Null inputRange for R Nonterminal node of SPPF") - return listOf(OutEgde(range.from, "R", range.to)) + return listOf(listOf(OutEgde(range.from, "R", range.to))) } is EpsilonNonterminalType -> { @@ -62,16 +62,18 @@ fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List? { if (subPaths.any { it == null }) { return null } - return subPaths.filterNotNull().flatten() + val paths = subPaths.filterNotNull().fold(listOf(listOf())) { acc, lst -> + acc.flatMap { list -> lst.map { element -> list + element } } + } + return paths } is Range -> { - node.children.forEach { - getPathFromSppf(it, maxDepth - 1)?.let { path -> - return@getPathFromSppf path - } - } - return null + val paths = node.children.map { + getPathFromSppf(it, maxDepth - 1)?.filterNotNull() + }.filterNotNull().flatten() + if (paths.isEmpty()){return null} + return paths } else -> { @@ -94,13 +96,15 @@ fun saveSppf(name: String, sppf: Set>) { fun main() { listOf("graph_1.dot", "graph_2.dot", "graph_3.dot", "graph_4.dot").forEach { graphName -> + //listOf("graph_3.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 { - println(getPathFromSppf(it, maxDepth = 100).toString()) + sppf.forEach { getPathFromSppf(it, maxDepth = 30)?.forEach{ + println(it.toString()) + } } println() saveSppf(graphName, sppf) From 38072c46eb0a7bd4fa55bc2e0b91b1bb81921842 Mon Sep 17 00:00:00 2001 From: gsv Date: Wed, 11 Feb 2026 17:03:48 +0300 Subject: [PATCH 09/22] Corrected grammar. Corrected examples. --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 4 ++-- cfpq-app/src/main/resources/graph_2.dot | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index a7b827efa..85a68c000 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -18,10 +18,10 @@ import java.nio.file.Path class PointsToGrammar : Grammar() { val S by Nt().asStart() - val R by Nt(Option("pt" * "pt_r")) + val R by Nt(Option("pt" * "pt_r") * many("assign_r")) init { - S /= R * many("assign_r" * ("store_0" or "store_1" or "store_2" or "store_3")) * "pt" + S /= many( R * ("store_0" or "store_1" or "store_2" or "store_3")) * "pt" } } diff --git a/cfpq-app/src/main/resources/graph_2.dot b/cfpq-app/src/main/resources/graph_2.dot index 5d854d177..362b85f7d 100644 --- a/cfpq-app/src/main/resources/graph_2.dot +++ b/cfpq-app/src/main/resources/graph_2.dot @@ -8,13 +8,13 @@ digraph { 1 -> 2 [label = "pt_r"]; 2 -> 3 [label = "store_0"]; 3 -> 4 [label = "pt"]; - 4 -> 3 [label = "pt"]; + 4 -> 3 [label = "pt_r"]; 2 -> 5 [label = "assign"]; 5 -> 2 [label = "assign_r"]; 5 -> 2 [label = "load_0"]; 2 -> 5 [label = "load_0_r"]; 2 -> 4 [label = "pt"]; - 4 -> 2 [label = "pt"]; + 4 -> 2 [label = "pt_r"]; 5 -> 4 [label = "pt"]; - 4 -> 5 [label = "pt"]; + 4 -> 5 [label = "pt_r"]; } From 0cc147c579de1b9ec9d98f90c1f441ba6d2f9e5f Mon Sep 17 00:00:00 2001 From: gsv Date: Wed, 11 Feb 2026 18:01:38 +0300 Subject: [PATCH 10/22] Brief readme. --- cfpq-app/README.md | 69 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 cfpq-app/README.md diff --git a/cfpq-app/README.md b/cfpq-app/README.md new file mode 100644 index 000000000..f3bbd2b5a --- /dev/null +++ b/cfpq-app/README.md @@ -0,0 +1,69 @@ +>[!CAUTION] +>For demo purposes only! +>Do not expect big graphs to be processed successfully (in reasonable time or without out-of-memory errors). + +Requirements: 11 java + +To run (from project root): + +```bash +./gradlew :cfpq-app:run +``` + +Input graphs: src/main/resources/ +We assume that points-to analysis is performed as a first step, so points-to edges (```pt``` and ```pt_r```) are explicitly represented in the input graphs. + +Grammar and SPPF traversal: src/main/kotlin/me/vkutuev/Main.kt +SPPF 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. + +>[!NOTE] +> We implemented a very naive path extraction algorithm solely to demonstrate SPPF traversal. + +## Examples + +Code snippet for related graphs. + +Graph 1: +```java +val n = new X() +val y = new Y() +val z = new Z() +val l = n +val t = y +z.u = y +t.v = z +``` + +Graph 2: +```java +val n = new X() +val l = n +while (...){ + val t = new X() + l.next = t + l = t +} +``` + +Graph 3: +```java +val n = new X() +val l = n +while (...){ + l.next = new X() + l = l.next +} +``` + +Graph 4: +```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() +``` \ No newline at end of file From dc6ab72baf553f9e012767cf16ad22e30b0b9266 Mon Sep 17 00:00:00 2001 From: gsv Date: Wed, 11 Feb 2026 18:01:59 +0300 Subject: [PATCH 11/22] Small code cleanup. --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 23 ++++++++++----------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index 85a68c000..4652abac5 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -32,21 +32,22 @@ fun readGraph(name: String): InputGraph { return dotParser.parseDot(dotGraph) } -data class OutEgde(val start: Int, val symbol: String, val end: Int) +data class OutEdge(val start: Int, val symbol: String, val end: Int) -fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List>? { +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(OutEgde(range.from, nodeType.terminal.toString(), range.to))) + return listOf(listOf(OutEdge(range.from, nodeType.terminal.toString(), range.to))) } + //Do not extract subpaths for non-terminal R because they are useless. is NonterminalType if nodeType.startState.nonterminal.name == "R" -> { val range = node.inputRange ?: throw RuntimeException("Null inputRange for R Nonterminal node of SPPF") - return listOf(listOf(OutEgde(range.from, "R", range.to))) + return listOf(listOf(OutEdge(range.from, "R", range.to))) } is EpsilonNonterminalType -> { @@ -62,7 +63,7 @@ fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List if (subPaths.any { it == null }) { return null } - val paths = subPaths.filterNotNull().fold(listOf(listOf())) { acc, lst -> + val paths = subPaths.filterNotNull().fold(listOf(listOf())) { acc, lst -> acc.flatMap { list -> lst.map { element -> list + element } } } return paths @@ -72,8 +73,10 @@ fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List val paths = node.children.map { getPathFromSppf(it, maxDepth - 1)?.filterNotNull() }.filterNotNull().flatten() - if (paths.isEmpty()){return null} - return paths + if (paths.isEmpty()) { + return null + } + return paths } else -> { @@ -96,16 +99,12 @@ fun saveSppf(name: String, sppf: Set>) { fun main() { listOf("graph_1.dot", "graph_2.dot", "graph_3.dot", "graph_4.dot").forEach { graphName -> - //listOf("graph_3.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()) - } - } + sppf.forEach { getPathFromSppf(it, maxDepth = 30)?.forEach { println(it.toString()) } } println() saveSppf(graphName, sppf) } From 77f2a5e4070ad05212851dbcfc55c51e3f1775a8 Mon Sep 17 00:00:00 2001 From: gsv Date: Wed, 11 Feb 2026 15:40:17 +0300 Subject: [PATCH 12/22] Corrected grammar. More examples. --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 9 ++--- cfpq-app/src/main/resources/graph_2.dot | 8 +++++ cfpq-app/src/main/resources/graph_4.dot | 37 +++++++++++++++++++++ 3 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 cfpq-app/src/main/resources/graph_4.dot diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index 6f83a5df8..43bb861ae 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -5,6 +5,7 @@ import org.ucfs.grammar.combinator.extension.StringExtension.many 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.input.DotParser import org.ucfs.input.InputGraph @@ -17,10 +18,10 @@ import java.nio.file.Path class PointsToGrammar : Grammar() { val S by Nt().asStart() - val R by Nt(many("assign_r" or "load_0_r" or "load_1_r")) + val R by Nt(Option("pt" * "pt_r")) init { - S /= many("assign") * many(R * ("store_0" or "store_1")) * "pt" + S /= R * many("assign_r" * ("store_0" or "store_1" or "store_2" or "store_3")) * "pt" } } @@ -92,14 +93,14 @@ fun saveSppf(name: String, sppf: Set>) { } fun main() { - listOf("graph_1.dot", "graph_2.dot", "graph_3.dot").forEach { graphName -> + 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 { - println(getPathFromSppf(it, maxDepth = 10).toString()) + println(getPathFromSppf(it, maxDepth = 100).toString()) } println() saveSppf(graphName, sppf) diff --git a/cfpq-app/src/main/resources/graph_2.dot b/cfpq-app/src/main/resources/graph_2.dot index 69bb715ea..5d854d177 100644 --- a/cfpq-app/src/main/resources/graph_2.dot +++ b/cfpq-app/src/main/resources/graph_2.dot @@ -1,12 +1,20 @@ digraph { start -> 0; 0 -> 1 [label = "pt"]; + 1 -> 0 [label = "pt_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 -> 4 [label = "pt"]; + 4 -> 3 [label = "pt"]; 2 -> 5 [label = "assign"]; 5 -> 2 [label = "assign_r"]; 5 -> 2 [label = "load_0"]; 2 -> 5 [label = "load_0_r"]; + 2 -> 4 [label = "pt"]; + 4 -> 2 [label = "pt"]; + 5 -> 4 [label = "pt"]; + 4 -> 5 [label = "pt"]; } diff --git a/cfpq-app/src/main/resources/graph_4.dot b/cfpq-app/src/main/resources/graph_4.dot new file mode 100644 index 000000000..f622ad4ad --- /dev/null +++ b/cfpq-app/src/main/resources/graph_4.dot @@ -0,0 +1,37 @@ +digraph { + start -> 1; + start -> 8; + 1 -> 0 [label = "alloc"]; + 1 -> 0 [label = "pt"]; + 0 -> 1 [label = "pt_r"]; + 4 -> 2 [label = "alloc"]; + 4 -> 2 [label = "pt"]; + 2 -> 4 [label = "pt_r"]; + 5 -> 3 [label = "alloc"]; + 5 -> 3 [label = "pt"]; + 3 -> 5 [label = "pt_r"]; + 10 -> 12 [label = "alloc"]; + 10 -> 12 [label = "pt"]; + 12 -> 10 [label = "pt_r"]; + 11 -> 13 [label = "alloc"]; + 11 -> 13 [label = "pt"]; + 13 -> 11 [label = "pt_r"]; + 8 -> 6 [label = "assign"]; + 6 -> 8 [label = "assign_r"]; + 9 -> 7 [label = "assign"]; + 7 -> 9 [label = "assign_r"]; + 4 -> 1 [label = "store_0"]; + 5 -> 1 [label = "store_1"]; + 8 -> 10 [label = "store_2"]; + 9 -> 11 [label = "store_3"]; + 6 -> 4 [label = "load_0"]; + 7 -> 5 [label = "load_1"]; + 6 -> 0 [label = "pt"]; + 0 -> 6 [label = "pt_r"]; + 8 -> 0 [label = "pt"]; + 0 -> 8 [label = "pt_r"]; + 7 -> 0 [label = "pt"]; + 0 -> 7 [label = "pt_r"]; + 9 -> 0 [label = "pt"]; + 0 -> 9 [label = "pt_r"]; +} From 85a5231080502ff88e1d984e25b482e5c8a2893d Mon Sep 17 00:00:00 2001 From: gsv Date: Wed, 11 Feb 2026 16:52:22 +0300 Subject: [PATCH 13/22] Multiple paths from loops. --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 28 ++++++++++++--------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index 43bb861ae..a7b827efa 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -34,19 +34,19 @@ fun readGraph(name: String): InputGraph { data class OutEgde(val start: Int, val symbol: String, val end: Int) -fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List? { +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(OutEgde(range.from, nodeType.terminal.toString(), range.to)) + return listOf(listOf(OutEgde(range.from, nodeType.terminal.toString(), range.to))) } is NonterminalType if nodeType.startState.nonterminal.name == "R" -> { val range = node.inputRange ?: throw RuntimeException("Null inputRange for R Nonterminal node of SPPF") - return listOf(OutEgde(range.from, "R", range.to)) + return listOf(listOf(OutEgde(range.from, "R", range.to))) } is EpsilonNonterminalType -> { @@ -62,16 +62,18 @@ fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List? { if (subPaths.any { it == null }) { return null } - return subPaths.filterNotNull().flatten() + val paths = subPaths.filterNotNull().fold(listOf(listOf())) { acc, lst -> + acc.flatMap { list -> lst.map { element -> list + element } } + } + return paths } is Range -> { - node.children.forEach { - getPathFromSppf(it, maxDepth - 1)?.let { path -> - return@getPathFromSppf path - } - } - return null + val paths = node.children.map { + getPathFromSppf(it, maxDepth - 1)?.filterNotNull() + }.filterNotNull().flatten() + if (paths.isEmpty()){return null} + return paths } else -> { @@ -94,13 +96,15 @@ fun saveSppf(name: String, sppf: Set>) { fun main() { listOf("graph_1.dot", "graph_2.dot", "graph_3.dot", "graph_4.dot").forEach { graphName -> + //listOf("graph_3.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 { - println(getPathFromSppf(it, maxDepth = 100).toString()) + sppf.forEach { getPathFromSppf(it, maxDepth = 30)?.forEach{ + println(it.toString()) + } } println() saveSppf(graphName, sppf) From 03b25824087ade54e81f36c351bc7fbdad6e2439 Mon Sep 17 00:00:00 2001 From: gsv Date: Wed, 11 Feb 2026 17:03:48 +0300 Subject: [PATCH 14/22] Corrected grammar. Corrected examples. --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 4 ++-- cfpq-app/src/main/resources/graph_2.dot | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index a7b827efa..85a68c000 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -18,10 +18,10 @@ import java.nio.file.Path class PointsToGrammar : Grammar() { val S by Nt().asStart() - val R by Nt(Option("pt" * "pt_r")) + val R by Nt(Option("pt" * "pt_r") * many("assign_r")) init { - S /= R * many("assign_r" * ("store_0" or "store_1" or "store_2" or "store_3")) * "pt" + S /= many( R * ("store_0" or "store_1" or "store_2" or "store_3")) * "pt" } } diff --git a/cfpq-app/src/main/resources/graph_2.dot b/cfpq-app/src/main/resources/graph_2.dot index 5d854d177..362b85f7d 100644 --- a/cfpq-app/src/main/resources/graph_2.dot +++ b/cfpq-app/src/main/resources/graph_2.dot @@ -8,13 +8,13 @@ digraph { 1 -> 2 [label = "pt_r"]; 2 -> 3 [label = "store_0"]; 3 -> 4 [label = "pt"]; - 4 -> 3 [label = "pt"]; + 4 -> 3 [label = "pt_r"]; 2 -> 5 [label = "assign"]; 5 -> 2 [label = "assign_r"]; 5 -> 2 [label = "load_0"]; 2 -> 5 [label = "load_0_r"]; 2 -> 4 [label = "pt"]; - 4 -> 2 [label = "pt"]; + 4 -> 2 [label = "pt_r"]; 5 -> 4 [label = "pt"]; - 4 -> 5 [label = "pt"]; + 4 -> 5 [label = "pt_r"]; } From b813da6cff31c24c645c8c37e80abc0b9ca3c876 Mon Sep 17 00:00:00 2001 From: gsv Date: Wed, 11 Feb 2026 18:01:38 +0300 Subject: [PATCH 15/22] Brief readme. --- cfpq-app/README.md | 69 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 cfpq-app/README.md diff --git a/cfpq-app/README.md b/cfpq-app/README.md new file mode 100644 index 000000000..f3bbd2b5a --- /dev/null +++ b/cfpq-app/README.md @@ -0,0 +1,69 @@ +>[!CAUTION] +>For demo purposes only! +>Do not expect big graphs to be processed successfully (in reasonable time or without out-of-memory errors). + +Requirements: 11 java + +To run (from project root): + +```bash +./gradlew :cfpq-app:run +``` + +Input graphs: src/main/resources/ +We assume that points-to analysis is performed as a first step, so points-to edges (```pt``` and ```pt_r```) are explicitly represented in the input graphs. + +Grammar and SPPF traversal: src/main/kotlin/me/vkutuev/Main.kt +SPPF 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. + +>[!NOTE] +> We implemented a very naive path extraction algorithm solely to demonstrate SPPF traversal. + +## Examples + +Code snippet for related graphs. + +Graph 1: +```java +val n = new X() +val y = new Y() +val z = new Z() +val l = n +val t = y +z.u = y +t.v = z +``` + +Graph 2: +```java +val n = new X() +val l = n +while (...){ + val t = new X() + l.next = t + l = t +} +``` + +Graph 3: +```java +val n = new X() +val l = n +while (...){ + l.next = new X() + l = l.next +} +``` + +Graph 4: +```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() +``` \ No newline at end of file From 19c1444bbc5831f3331096a6e16e698069987161 Mon Sep 17 00:00:00 2001 From: gsv Date: Wed, 11 Feb 2026 18:01:59 +0300 Subject: [PATCH 16/22] Small code cleanup. --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 23 ++++++++++----------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index 85a68c000..4652abac5 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -32,21 +32,22 @@ fun readGraph(name: String): InputGraph { return dotParser.parseDot(dotGraph) } -data class OutEgde(val start: Int, val symbol: String, val end: Int) +data class OutEdge(val start: Int, val symbol: String, val end: Int) -fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List>? { +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(OutEgde(range.from, nodeType.terminal.toString(), range.to))) + return listOf(listOf(OutEdge(range.from, nodeType.terminal.toString(), range.to))) } + //Do not extract subpaths for non-terminal R because they are useless. is NonterminalType if nodeType.startState.nonterminal.name == "R" -> { val range = node.inputRange ?: throw RuntimeException("Null inputRange for R Nonterminal node of SPPF") - return listOf(listOf(OutEgde(range.from, "R", range.to))) + return listOf(listOf(OutEdge(range.from, "R", range.to))) } is EpsilonNonterminalType -> { @@ -62,7 +63,7 @@ fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List if (subPaths.any { it == null }) { return null } - val paths = subPaths.filterNotNull().fold(listOf(listOf())) { acc, lst -> + val paths = subPaths.filterNotNull().fold(listOf(listOf())) { acc, lst -> acc.flatMap { list -> lst.map { element -> list + element } } } return paths @@ -72,8 +73,10 @@ fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List val paths = node.children.map { getPathFromSppf(it, maxDepth - 1)?.filterNotNull() }.filterNotNull().flatten() - if (paths.isEmpty()){return null} - return paths + if (paths.isEmpty()) { + return null + } + return paths } else -> { @@ -96,16 +99,12 @@ fun saveSppf(name: String, sppf: Set>) { fun main() { listOf("graph_1.dot", "graph_2.dot", "graph_3.dot", "graph_4.dot").forEach { graphName -> - //listOf("graph_3.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()) - } - } + sppf.forEach { getPathFromSppf(it, maxDepth = 30)?.forEach { println(it.toString()) } } println() saveSppf(graphName, sppf) } From ff151983aeee133bf6e47629639e0817faab9da0 Mon Sep 17 00:00:00 2001 From: gsv Date: Fri, 20 Feb 2026 10:40:15 +0300 Subject: [PATCH 17/22] Fix examples. Not finished. --- cfpq-app/README.md | 17 +++++++++-------- cfpq-app/src/main/resources/graph_1.dot | 15 +++++++++++++++ cfpq-app/src/main/resources/graph_2.dot | 9 +++++++++ cfpq-app/src/main/resources/graph_3.dot | 11 +++++++++++ cfpq-app/src/main/resources/graph_4.dot | 11 ++++++----- 5 files changed, 50 insertions(+), 13 deletions(-) diff --git a/cfpq-app/README.md b/cfpq-app/README.md index f3bbd2b5a..564750d1f 100644 --- a/cfpq-app/README.md +++ b/cfpq-app/README.md @@ -30,18 +30,18 @@ val y = new Y() val z = new Z() val l = n val t = y -z.u = y +l.u = y t.v = z ``` + Graph 2: ```java val n = new X() val l = n -while (...){ - val t = new X() - l.next = t - l = t +while (...){ + l.next = new X() + l = l.next } ``` @@ -49,9 +49,10 @@ Graph 3: ```java val n = new X() val l = n -while (...){ - l.next = new X() - l = l.next +while (...){ + val t = new X() + l.next = t + l = t } ``` diff --git a/cfpq-app/src/main/resources/graph_1.dot b/cfpq-app/src/main/resources/graph_1.dot index 171c4f28d..1dfb32c0f 100644 --- a/cfpq-app/src/main/resources/graph_1.dot +++ b/cfpq-app/src/main/resources/graph_1.dot @@ -1,12 +1,27 @@ digraph { start -> 1; 1 -> 0 [label = "pt"]; + 0 -> 1 [label = "pt_r"]; 2 -> 1 [label = "assign"]; 1 -> 2 [label = "assign_r"]; 2 -> 3 [label = "store_0"]; + 3 -> 2 [label = "store_0_r"]; 3 -> 4 [label = "pt"]; + 4 -> 3 [label = "pt_r"]; 5 -> 3 [label = "assign"]; 3 -> 5 [label = "assign_r"]; 5 -> 6 [label = "store_1"]; + 6 -> 5 [label = "store_1_r"]; 6 -> 7 [label = "pt"]; + 7 -> 6 [label = "pt_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-app/src/main/resources/graph_2.dot b/cfpq-app/src/main/resources/graph_2.dot index 362b85f7d..56dee54b1 100644 --- a/cfpq-app/src/main/resources/graph_2.dot +++ b/cfpq-app/src/main/resources/graph_2.dot @@ -7,6 +7,7 @@ digraph { 2 -> 1 [label = "pt"]; 1 -> 2 [label = "pt_r"]; 2 -> 3 [label = "store_0"]; + 3 -> 2 [label = "store_0_r"]; 3 -> 4 [label = "pt"]; 4 -> 3 [label = "pt_r"]; 2 -> 5 [label = "assign"]; @@ -17,4 +18,12 @@ digraph { 4 -> 2 [label = "pt_r"]; 5 -> 4 [label = "pt"]; 4 -> 5 [label = "pt_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-app/src/main/resources/graph_3.dot b/cfpq-app/src/main/resources/graph_3.dot index 7684868c8..ee7945d40 100644 --- a/cfpq-app/src/main/resources/graph_3.dot +++ b/cfpq-app/src/main/resources/graph_3.dot @@ -3,7 +3,18 @@ digraph { 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 = "pt"]; + 3 -> 2 [label = "pt_r"]; + 0 -> 4 [label = "pt"]; + 4 -> 0 [label = "pt_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-app/src/main/resources/graph_4.dot b/cfpq-app/src/main/resources/graph_4.dot index f622ad4ad..a7bdd0be2 100644 --- a/cfpq-app/src/main/resources/graph_4.dot +++ b/cfpq-app/src/main/resources/graph_4.dot @@ -1,19 +1,14 @@ digraph { start -> 1; start -> 8; - 1 -> 0 [label = "alloc"]; 1 -> 0 [label = "pt"]; 0 -> 1 [label = "pt_r"]; - 4 -> 2 [label = "alloc"]; 4 -> 2 [label = "pt"]; 2 -> 4 [label = "pt_r"]; - 5 -> 3 [label = "alloc"]; 5 -> 3 [label = "pt"]; 3 -> 5 [label = "pt_r"]; - 10 -> 12 [label = "alloc"]; 10 -> 12 [label = "pt"]; 12 -> 10 [label = "pt_r"]; - 11 -> 13 [label = "alloc"]; 11 -> 13 [label = "pt"]; 13 -> 11 [label = "pt_r"]; 8 -> 6 [label = "assign"]; @@ -21,11 +16,17 @@ digraph { 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"]; 6 -> 0 [label = "pt"]; 0 -> 6 [label = "pt_r"]; 8 -> 0 [label = "pt"]; From 5ca7f8a29631ffada5f92746b1a2e842de2dd91c Mon Sep 17 00:00:00 2001 From: gsv Date: Fri, 20 Feb 2026 14:04:48 +0300 Subject: [PATCH 18/22] Added explicit Points-to analysis --- cfpq-app/src/main/kotlin/me/vkutuev/Main.kt | 37 +++++++++++++----- cfpq-app/src/main/resources/graph_1.dot | 12 +++--- cfpq-app/src/main/resources/graph_2.dot | 16 +++----- cfpq-app/src/main/resources/graph_3.dot | 8 ++-- cfpq-app/src/main/resources/graph_4.dot | 43 ++++++++++++--------- 5 files changed, 68 insertions(+), 48 deletions(-) diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt index 4652abac5..a13f0e0a6 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt @@ -7,6 +7,7 @@ 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 @@ -18,10 +19,20 @@ import java.nio.file.Path class PointsToGrammar : Grammar() { val S by Nt().asStart() - val R by Nt(Option("pt" * "pt_r") * many("assign_r")) - + 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 { - S /= many( R * ("store_0" or "store_1" or "store_2" or "store_3")) * "pt" + Alias /= PointsTo * FlowsTo + S /= many( Option(Alias) * ("store_0" or "store_1" or "store_2" or "store_3")) * PointsTo } } @@ -32,7 +43,9 @@ fun readGraph(name: String): InputGraph { return dotParser.parseDot(dotGraph) } -data class OutEdge(val start: Int, val symbol: String, val end: Int) +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) { @@ -44,14 +57,20 @@ fun getPathFromSppf(node: RangeSppfNode, maxDepth: Int): List return listOf(listOf(OutEdge(range.from, nodeType.terminal.toString(), range.to))) } - //Do not extract subpaths for non-terminal R because they are useless. - is NonterminalType if nodeType.startState.nonterminal.name == "R" -> { - val range = node.inputRange ?: throw RuntimeException("Null inputRange for R Nonterminal node of SPPF") - return listOf(listOf(OutEdge(range.from, "R", 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 emptyList() + return listOf(emptyList()) } is EmptyType -> { diff --git a/cfpq-app/src/main/resources/graph_1.dot b/cfpq-app/src/main/resources/graph_1.dot index 1dfb32c0f..47cc9326e 100644 --- a/cfpq-app/src/main/resources/graph_1.dot +++ b/cfpq-app/src/main/resources/graph_1.dot @@ -1,19 +1,19 @@ digraph { start -> 1; - 1 -> 0 [label = "pt"]; - 0 -> 1 [label = "pt_r"]; + 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 = "pt"]; - 4 -> 3 [label = "pt_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 = "pt"]; - 7 -> 6 [label = "pt_r"]; + 6 -> 7 [label = "alloc"]; + 7 -> 6 [label = "alloc_r"]; 0[label = "new X()"] 1[label = "n"] diff --git a/cfpq-app/src/main/resources/graph_2.dot b/cfpq-app/src/main/resources/graph_2.dot index 56dee54b1..c0eb6626f 100644 --- a/cfpq-app/src/main/resources/graph_2.dot +++ b/cfpq-app/src/main/resources/graph_2.dot @@ -1,24 +1,18 @@ digraph { start -> 0; - 0 -> 1 [label = "pt"]; - 1 -> 0 [label = "pt_r"]; + 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 = "pt"]; - 4 -> 3 [label = "pt_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"]; - 2 -> 4 [label = "pt"]; - 4 -> 2 [label = "pt_r"]; - 5 -> 4 [label = "pt"]; - 4 -> 5 [label = "pt_r"]; - + 0[label = "n"] 1[label = "new X() // line 1"] 2[label = "l"] diff --git a/cfpq-app/src/main/resources/graph_3.dot b/cfpq-app/src/main/resources/graph_3.dot index ee7945d40..f3451bb6a 100644 --- a/cfpq-app/src/main/resources/graph_3.dot +++ b/cfpq-app/src/main/resources/graph_3.dot @@ -6,10 +6,10 @@ digraph { 2 -> 1 [label = "store_0_r"]; 1 -> 2 [label = "assign"]; 2 -> 1 [label = "assign_r"]; - 2 -> 3 [label = "pt"]; - 3 -> 2 [label = "pt_r"]; - 0 -> 4 [label = "pt"]; - 4 -> 0 [label = "pt_r"]; + 2 -> 3 [label = "alloc"]; + 3 -> 2 [label = "alloc_r"]; + 0 -> 4 [label = "alloc"]; + 4 -> 0 [label = "alloc_r"]; 0[label = "n"] diff --git a/cfpq-app/src/main/resources/graph_4.dot b/cfpq-app/src/main/resources/graph_4.dot index a7bdd0be2..8ff719da2 100644 --- a/cfpq-app/src/main/resources/graph_4.dot +++ b/cfpq-app/src/main/resources/graph_4.dot @@ -1,16 +1,16 @@ digraph { start -> 1; start -> 8; - 1 -> 0 [label = "pt"]; - 0 -> 1 [label = "pt_r"]; - 4 -> 2 [label = "pt"]; - 2 -> 4 [label = "pt_r"]; - 5 -> 3 [label = "pt"]; - 3 -> 5 [label = "pt_r"]; - 10 -> 12 [label = "pt"]; - 12 -> 10 [label = "pt_r"]; - 11 -> 13 [label = "pt"]; - 13 -> 11 [label = "pt_r"]; + 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"]; @@ -27,12 +27,19 @@ digraph { 4 -> 6 [label = "load_0_r"]; 7 -> 5 [label = "load_1"]; 5 -> 7 [label = "load_1_r"]; - 6 -> 0 [label = "pt"]; - 0 -> 6 [label = "pt_r"]; - 8 -> 0 [label = "pt"]; - 0 -> 8 [label = "pt_r"]; - 7 -> 0 [label = "pt"]; - 0 -> 7 [label = "pt_r"]; - 9 -> 0 [label = "pt"]; - 0 -> 9 [label = "pt_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()"]; } From 9d28557c8a142a1d2e4af3673c45fd2388a098e1 Mon Sep 17 00:00:00 2001 From: gsv Date: Fri, 20 Feb 2026 14:05:21 +0300 Subject: [PATCH 19/22] Draft of updated readme. --- cfpq-app/README.md | 96 +- .../src/main/resources/figures/graph_1.dot | 27 + .../main/resources/figures/graph_1.dot.svg | 171 + .../main/resources/figures/graph_1_sppf.dot | 176 + .../resources/figures/graph_1_sppf.dot.svg | 967 +++++ .../src/main/resources/figures/graph_2.dot | 23 + .../main/resources/figures/graph_2.dot.svg | 145 + .../main/resources/figures/graph_2_sppf.dot | 177 + .../resources/figures/graph_2_sppf.dot.svg | 1002 +++++ .../src/main/resources/figures/graph_3.dot | 20 + .../main/resources/figures/graph_3.dot.svg | 125 + .../main/resources/figures/graph_3_sppf.dot | 95 + .../resources/figures/graph_3_sppf.dot.svg | 520 +++ .../src/main/resources/figures/graph_4.dot | 45 + .../main/resources/figures/graph_4.dot.svg | 297 ++ .../main/resources/figures/graph_4_sppf.dot | 573 +++ .../resources/figures/graph_4_sppf.dot.svg | 3255 +++++++++++++++++ 17 files changed, 7705 insertions(+), 9 deletions(-) create mode 100644 cfpq-app/src/main/resources/figures/graph_1.dot create mode 100644 cfpq-app/src/main/resources/figures/graph_1.dot.svg create mode 100644 cfpq-app/src/main/resources/figures/graph_1_sppf.dot create mode 100644 cfpq-app/src/main/resources/figures/graph_1_sppf.dot.svg create mode 100644 cfpq-app/src/main/resources/figures/graph_2.dot create mode 100644 cfpq-app/src/main/resources/figures/graph_2.dot.svg create mode 100644 cfpq-app/src/main/resources/figures/graph_2_sppf.dot create mode 100644 cfpq-app/src/main/resources/figures/graph_2_sppf.dot.svg create mode 100644 cfpq-app/src/main/resources/figures/graph_3.dot create mode 100644 cfpq-app/src/main/resources/figures/graph_3.dot.svg create mode 100644 cfpq-app/src/main/resources/figures/graph_3_sppf.dot create mode 100644 cfpq-app/src/main/resources/figures/graph_3_sppf.dot.svg create mode 100644 cfpq-app/src/main/resources/figures/graph_4.dot create mode 100644 cfpq-app/src/main/resources/figures/graph_4.dot.svg create mode 100644 cfpq-app/src/main/resources/figures/graph_4_sppf.dot create mode 100644 cfpq-app/src/main/resources/figures/graph_4_sppf.dot.svg diff --git a/cfpq-app/README.md b/cfpq-app/README.md index 564750d1f..798c7a297 100644 --- a/cfpq-app/README.md +++ b/cfpq-app/README.md @@ -10,10 +10,12 @@ To run (from project root): ./gradlew :cfpq-app:run ``` -Input graphs: src/main/resources/ -We assume that points-to analysis is performed as a first step, so points-to edges (```pt``` and ```pt_r```) are explicitly represented in the input graphs. +Input graphs: ```src/main/resources/``` + +Grammar and code for paths extraction: ```src/main/kotlin/me/vkutuev/Main.kt``` + +SPPF traversal -Grammar and SPPF traversal: src/main/kotlin/me/vkutuev/Main.kt SPPF 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. >[!NOTE] @@ -21,9 +23,11 @@ SPPF is a derivation-tree-like structure that represents **all** possible paths ## Examples -Code snippet for related graphs. -Graph 1: + + +### Example 1 +Code snippet: ```java val n = new X() val y = new Y() @@ -34,8 +38,26 @@ l.u = y t.v = z ``` +Respective graph: + +![Graph for example 1](./src/main/resources/figures/graph_1.dot.svg) + +![SPPF for example 1](./src/main/resources/figures/graph_1_sppf.dot.svg) + +Paths: +[(1-PointsTo->0)] + +[(1-Alias->2), (2-store_0->3), (3-Alias->5), (5-store_1->6), (6-PointsTo->7)] + +[(1-Alias->2), (2-store_0->3), (3-PointsTo->4)] + + +Trivial. Will be omitted in further examples -Graph 2: + +### Example 2 + +Code snippet: ```java val n = new X() val l = n @@ -45,7 +67,28 @@ while (...){ } ``` -Graph 3: +![Graph for example 2](./src/main/resources/figures/graph_2.dot.svg) +![SPPF for example 2](./src/main/resources/figures/graph_2_sppf.dot.svg) + +Paths: + +[(0-Alias->2), (2-store_0->3), (3-PointsTo->4)] + +[(0-Alias->2), (2-store_0->3), (3-Alias->2), (2-store_0->3), (3-PointsTo->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)] + +[(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)] + +[(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)] + +[(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)] + + + +### Example 3 + +Code snippet: ```java val n = new X() val l = n @@ -56,7 +99,28 @@ while (...){ } ``` -Graph 4: +![Graph for example 3](./src/main/resources/figures/graph_3.dot.svg) +![SPPF for example 3](./src/main/resources/figures/graph_3_sppf.dot.svg) + +Paths: + +[(0-Alias->1), (1-store_0->2), (2-PointsTo->3)] + +[(0-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-PointsTo->3)] + +[(0-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-PointsTo->3)] + +[(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)] + +[(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)] + +[(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)] + + +### Example 4 + +Code snippet: + ```java val n = new X() val z = new Z() @@ -67,4 +131,18 @@ val v = z.x v.p = new Y() val r = u.y r.q = new P() -``` \ No newline at end of file +``` + +![Graph for example 4](./src/main/resources/figures/graph_4.dot.svg) + +Paths: + +[(1-Alias->9), (9-store_3->11), (11-PointsTo->13)] + +[(1-Alias->8), (8-store_2->10), (10-PointsTo->12)] + +[(8-Alias->9), (9-store_3->11), (11-PointsTo->13)] + +[(8-store_2->10), (10-PointsTo->12)] + +[(8-Alias->8), (8-store_2->10), (10-PointsTo->12)] diff --git a/cfpq-app/src/main/resources/figures/graph_1.dot b/cfpq-app/src/main/resources/figures/graph_1.dot new file mode 100644 index 000000000..db6f85581 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/graph_1.dot.svg b/cfpq-app/src/main/resources/figures/graph_1.dot.svg new file mode 100644 index 000000000..9c58204f4 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/graph_1_sppf.dot b/cfpq-app/src/main/resources/figures/graph_1_sppf.dot new file mode 100644 index 000000000..25b11c79e --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/graph_1_sppf.dot.svg b/cfpq-app/src/main/resources/figures/graph_1_sppf.dot.svg new file mode 100644 index 000000000..76a662962 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/graph_2.dot b/cfpq-app/src/main/resources/figures/graph_2.dot new file mode 100644 index 000000000..6fb4ab2f6 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/graph_2.dot.svg b/cfpq-app/src/main/resources/figures/graph_2.dot.svg new file mode 100644 index 000000000..83e62d0a1 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/graph_2_sppf.dot b/cfpq-app/src/main/resources/figures/graph_2_sppf.dot new file mode 100644 index 000000000..698d1aa4d --- /dev/null +++ b/cfpq-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] +_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] +_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] +_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] +_1_32 [label = "38 Range , input: [4, 5], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_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] +_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] +_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] +_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] +_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] +_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] +_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] +_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-app/src/main/resources/figures/graph_2_sppf.dot.svg b/cfpq-app/src/main/resources/figures/graph_2_sppf.dot.svg new file mode 100644 index 000000000..e08b8b8d7 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/graph_3.dot b/cfpq-app/src/main/resources/figures/graph_3.dot new file mode 100644 index 000000000..f3451bb6a --- /dev/null +++ b/cfpq-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 = "n"] + 1[label = "l"] + 2[label = "t" ] + 3[label = "new X() // line 4"] + 4[label = "new X() // line 1"] +} diff --git a/cfpq-app/src/main/resources/figures/graph_3.dot.svg b/cfpq-app/src/main/resources/figures/graph_3.dot.svg new file mode 100644 index 000000000..60c083f66 --- /dev/null +++ b/cfpq-app/src/main/resources/figures/graph_3.dot.svg @@ -0,0 +1,125 @@ + + + + + + +%393 + + + +start + +start + + + +0 + +n + + + +start->0 + + + + + +1 + +l + + + +0->1 + + +assign_r + + + +4 + +new X() // line 1 + + + +0->4 + + +alloc + + + +1->0 + + +assign + + + +2 + +t + + + +1->2 + + +store_0 + + + +1->2 + + +assign + + + +2->1 + + +store_0_r + + + +2->1 + + +assign_r + + + +3 + +new X() // line 4 + + + +2->3 + + +alloc + + + +3->2 + + +alloc_r + + + +4->0 + + +alloc_r + + + diff --git a/cfpq-app/src/main/resources/figures/graph_3_sppf.dot b/cfpq-app/src/main/resources/figures/graph_3_sppf.dot new file mode 100644 index 000000000..8e5c79e34 --- /dev/null +++ b/cfpq-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] +_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] +_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] +_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] +_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-app/src/main/resources/figures/graph_3_sppf.dot.svg b/cfpq-app/src/main/resources/figures/graph_3_sppf.dot.svg new file mode 100644 index 000000000..1c917358d --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/graph_4.dot b/cfpq-app/src/main/resources/figures/graph_4.dot new file mode 100644 index 000000000..8ff719da2 --- /dev/null +++ b/cfpq-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="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/cfpq-app/src/main/resources/figures/graph_4.dot.svg b/cfpq-app/src/main/resources/figures/graph_4.dot.svg new file mode 100644 index 000000000..9c065edf8 --- /dev/null +++ b/cfpq-app/src/main/resources/figures/graph_4.dot.svg @@ -0,0 +1,297 @@ + + + + + + +%503 + + + +start + +start + + + +1 + +n + + + +start->1 + + + + + +8 + +v + + + +start->8 + + + + + +0 + +new X() + + + +1->0 + + +alloc + + + +4 + +z + + + +1->4 + + +store_0_r + + + +5 + +u + + + +1->5 + + +store_1_r + + + +10 + +tmp3 // line 7 + + + +8->10 + + +store_2 + + + +6 + +tmp1 // line 6 + + + +8->6 + + +assign + + + +0->1 + + +alloc_r + + + +4->1 + + +store_0 + + + +2 + +new Z() + + + +4->2 + + +alloc + + + +4->6 + + +load_0_r + + + +2->4 + + +alloc_r + + + +5->1 + + +store_1 + + + +3 + +new U() + + + +5->3 + + +alloc + + + +7 + +tmp2 // line 8 + + + +5->7 + + +load_1_r + + + +3->5 + + +alloc_r + + + +10->8 + + +store_2_r + + + +12 + +new Y() + + + +10->12 + + +alloc + + + +12->10 + + +alloc_r + + + +11 + +tmp4 // line 9 + + + +13 + +new P() + + + +11->13 + + +alloc + + + +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-app/src/main/resources/figures/graph_4_sppf.dot b/cfpq-app/src/main/resources/figures/graph_4_sppf.dot new file mode 100644 index 000000000..d7983d9c2 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/graph_4_sppf.dot.svg b/cfpq-app/src/main/resources/figures/graph_4_sppf.dot.svg new file mode 100644 index 000000000..31a6dd901 --- /dev/null +++ b/cfpq-app/src/main/resources/figures/graph_4_sppf.dot.svg @@ -0,0 +1,3255 @@ + + + + + + +g + + +cluster_5 + + + +cluster_2 + + + +cluster_4 + + + +cluster_0 + + + +cluster_1 + + + +cluster_3 + + + + +_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 + + + + + From cb70a3c7da5e9e3afb3597928eef21587877983e Mon Sep 17 00:00:00 2001 From: gsv Date: Fri, 20 Feb 2026 17:03:48 +0300 Subject: [PATCH 20/22] Impreved readme: detailed description of examples --- cfpq-app/README.md | 164 +++- .../src/main/resources/figures/graph_2.dot | 12 +- .../main/resources/figures/graph_2.dot.svg | 110 +-- .../main/resources/figures/graph_2_sppf.dot | 24 +- .../resources/figures/graph_2_sppf.dot.svg | 18 +- .../src/main/resources/figures/graph_3.dot | 10 +- .../main/resources/figures/graph_3.dot.svg | 94 +-- .../main/resources/figures/graph_3_sppf.dot | 8 +- .../resources/figures/graph_3_sppf.dot.svg | 6 +- .../src/main/resources/figures/graph_4.dot | 28 +- .../main/resources/figures/graph_4.dot.svg | 230 +++--- .../resources/figures/graph_4_sppf.dot.svg | 774 +++++++++--------- 12 files changed, 788 insertions(+), 690 deletions(-) diff --git a/cfpq-app/README.md b/cfpq-app/README.md index 798c7a297..adb2d55c0 100644 --- a/cfpq-app/README.md +++ b/cfpq-app/README.md @@ -2,29 +2,72 @@ >For demo purposes only! >Do not expect big graphs to be processed successfully (in reasonable time or without out-of-memory errors). -Requirements: 11 java +This demo is based on UCFS, which, for a given grammar represented as an RSM, a graph, and start vertices, produces an SPPF. -To run (from project root): +**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/``` +**Input graphs:** ```src/main/resources/``` -Grammar and code for paths extraction: ```src/main/kotlin/me/vkutuev/Main.kt``` - -SPPF traversal - -SPPF 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. +**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: @@ -42,18 +85,28 @@ 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) -Paths: -[(1-PointsTo->0)] +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. -[(1-Alias->2), (2-store_0->3), (3-Alias->5), (5-store_1->6), (6-PointsTo->7)] -[(1-Alias->2), (2-store_0->3), (3-PointsTo->4)] +Respective paths: +* [(1-PointsTo->0)] + + This path is trivial. Such paths will be omitted in further examples. -Trivial. 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 @@ -67,24 +120,41 @@ while (...){ } ``` +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) -Paths: +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)] -[(0-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-PointsTo->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)] -[(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)] +* [(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)] -[(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 = 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)] +* [(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 @@ -99,22 +169,39 @@ while (...){ } ``` +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) -Paths: +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)] +* [(0-Alias->1), (1-store_0->2), (2-PointsTo->3)] -[(0-Alias->1), (1-store_0->2), (2-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-Alias->1), (1-store_0->2), (2-PointsTo->3)] +* [(0-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-PointsTo->3)] -[(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 = 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)] +* [(0-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-Alias->1), (1-store_0->2), (2-PointsTo->3)] -[(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 = 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 @@ -132,17 +219,28 @@ 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) -Paths: +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)] -[(1-Alias->9), (9-store_3->11), (11-PointsTo->13)] + ```v.q = new P() ``` -[(1-Alias->8), (8-store_2->10), (10-PointsTo->12)] +* [(8-store_2->10), (10-PointsTo->12)] -[(8-Alias->9), (9-store_3->11), (11-PointsTo->13)] + ```v.p = new Y() ``` -[(8-store_2->10), (10-PointsTo->12)] +* [(8-Alias->8), (8-store_2->10), (10-PointsTo->12)] -[(8-Alias->8), (8-store_2->10), (10-PointsTo->12)] + ```v.p = new Y() ``` diff --git a/cfpq-app/src/main/resources/figures/graph_2.dot b/cfpq-app/src/main/resources/figures/graph_2.dot index 6fb4ab2f6..89921de33 100644 --- a/cfpq-app/src/main/resources/figures/graph_2.dot +++ b/cfpq-app/src/main/resources/figures/graph_2.dot @@ -13,11 +13,11 @@ digraph { 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"] + 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-app/src/main/resources/figures/graph_2.dot.svg b/cfpq-app/src/main/resources/figures/graph_2.dot.svg index 83e62d0a1..823dd0988 100644 --- a/cfpq-app/src/main/resources/figures/graph_2.dot.svg +++ b/cfpq-app/src/main/resources/figures/graph_2.dot.svg @@ -4,142 +4,142 @@ - + %191 - + start - -start + +start 0 - -0: n + +0 | n start->0 - - + + 1 - -1: new X() // line 1 + +1 | new X() // line 1 0->1 - - -alloc + + +alloc 2 - -2: l + +2 | l 0->2 - - -assign_r + + +assign_r 1->0 - - -alloc_r + + +alloc_r 2->0 - - -assign + + +assign 3 - -3: tmp1 // line 4 + +3 | tmp1 // line 4 2->3 - - -store_0 + + +store_0 5 - -5: tmp2 // line 5 + +5 | tmp2 // line 5 2->5 - - -assign + + +assign 2->5 - - -load_0_r + + +load_0_r 3->2 - - -store_0_r + + +store_0_r 4 - -4: new X() // line 4 + +4 | new X() // line 4 3->4 - - -alloc + + +alloc 4->3 - - -alloc_r + + +alloc_r 5->2 - - -assign_r + + +assign_r 5->2 - - -load_0 + + +load_0 diff --git a/cfpq-app/src/main/resources/figures/graph_2_sppf.dot b/cfpq-app/src/main/resources/figures/graph_2_sppf.dot index 698d1aa4d..7ac8ed0b9 100644 --- a/cfpq-app/src/main/resources/figures/graph_2_sppf.dot +++ b/cfpq-app/src/main/resources/figures/graph_2_sppf.dot @@ -24,39 +24,39 @@ _1_16 [label = "23 Intermediate input: 4, rsm: Alias_1, input: [3, 2]", shap _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] +_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] +_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] +_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] -_1_32 [label = "38 Range , input: [4, 5], rsm: [FlowsTo_0, FlowsTo_1]", shape = ellipse] +_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] +_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] +_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] +_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] +_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] +_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] +_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] +_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] diff --git a/cfpq-app/src/main/resources/figures/graph_2_sppf.dot.svg b/cfpq-app/src/main/resources/figures/graph_2_sppf.dot.svg index e08b8b8d7..144bea2ab 100644 --- a/cfpq-app/src/main/resources/figures/graph_2_sppf.dot.svg +++ b/cfpq-app/src/main/resources/figures/graph_2_sppf.dot.svg @@ -6,7 +6,7 @@ - + g @@ -252,7 +252,7 @@ _1_20 - + 27     Range , input: [4, 2], rsm: [Alias_1, Alias_2] @@ -299,7 +299,7 @@ _1_25 - + 31     Nonterminal FlowsTo, input: [4, 2] @@ -358,7 +358,7 @@ _1_28 - + 34     Range , input: [4, 2], rsm: [FlowsTo_0, FlowsTo_1] @@ -405,7 +405,7 @@ _1_32 - + 38     Range , input: [4, 5], rsm: [FlowsTo_0, FlowsTo_1] @@ -464,7 +464,7 @@ _1_37 - + 42     Range , input: [4, 2], rsm: [FlowsTo_0, FlowsTo_9] @@ -523,7 +523,7 @@ _1_42 - + 47     Range , input: [2, 2], rsm: [FlowsTo_2, FlowsTo_9] @@ -546,7 +546,7 @@ _1_44 - + 49     Nonterminal Alias, input: [2, 2] @@ -582,7 +582,7 @@ _1_48 - + 52     Range , input: [2, 2], rsm: [Alias_0, Alias_2] diff --git a/cfpq-app/src/main/resources/figures/graph_3.dot b/cfpq-app/src/main/resources/figures/graph_3.dot index f3451bb6a..e2e5b2c09 100644 --- a/cfpq-app/src/main/resources/figures/graph_3.dot +++ b/cfpq-app/src/main/resources/figures/graph_3.dot @@ -12,9 +12,9 @@ digraph { 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"] + 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-app/src/main/resources/figures/graph_3.dot.svg b/cfpq-app/src/main/resources/figures/graph_3.dot.svg index 60c083f66..3beaf3825 100644 --- a/cfpq-app/src/main/resources/figures/graph_3.dot.svg +++ b/cfpq-app/src/main/resources/figures/graph_3.dot.svg @@ -4,122 +4,122 @@ - + %393 - + start - -start + +start 0 - -n + +0 | n start->0 - - + + 1 - -l + +1 | l 0->1 - - -assign_r + + +assign_r 4 - -new X() // line 1 + +4 | new X() // line 1 0->4 - - -alloc + + +alloc 1->0 - - -assign + + +assign 2 - -t + +2 | t 1->2 - - -store_0 + + +store_0 1->2 - - -assign + + +assign 2->1 - - -store_0_r + + +store_0_r 2->1 - - -assign_r + + +assign_r 3 - -new X() // line 4 + +3 | new X() // line 4 2->3 - - -alloc + + +alloc 3->2 - - -alloc_r + + +alloc_r 4->0 - - -alloc_r + + +alloc_r diff --git a/cfpq-app/src/main/resources/figures/graph_3_sppf.dot b/cfpq-app/src/main/resources/figures/graph_3_sppf.dot index 8e5c79e34..0a0877649 100644 --- a/cfpq-app/src/main/resources/figures/graph_3_sppf.dot +++ b/cfpq-app/src/main/resources/figures/graph_3_sppf.dot @@ -6,7 +6,7 @@ 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] +_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] @@ -26,7 +26,7 @@ _0_19 [label = "26 Range , input: [2, 3], rsm: [Alias_0, Alias_1]", shape = _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] +_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] @@ -40,9 +40,9 @@ _0_33 [label = "39 Range , input: [2, 1], rsm: [FlowsTo_1, FlowsTo_1]", shap _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] +_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] +_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 diff --git a/cfpq-app/src/main/resources/figures/graph_3_sppf.dot.svg b/cfpq-app/src/main/resources/figures/graph_3_sppf.dot.svg index 1c917358d..547d50c85 100644 --- a/cfpq-app/src/main/resources/figures/graph_3_sppf.dot.svg +++ b/cfpq-app/src/main/resources/figures/graph_3_sppf.dot.svg @@ -6,7 +6,7 @@ - + g @@ -80,7 +80,7 @@ _0_23 - + 3     Range , input: [0, 2], rsm: [S_0, S_0] @@ -465,7 +465,7 @@ _0_39 - + 7     Range , input: [0, 1], rsm: [S_0, S_1] diff --git a/cfpq-app/src/main/resources/figures/graph_4.dot b/cfpq-app/src/main/resources/figures/graph_4.dot index 8ff719da2..a8936f86d 100644 --- a/cfpq-app/src/main/resources/figures/graph_4.dot +++ b/cfpq-app/src/main/resources/figures/graph_4.dot @@ -28,18 +28,18 @@ digraph { 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()"]; + 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-app/src/main/resources/figures/graph_4.dot.svg b/cfpq-app/src/main/resources/figures/graph_4.dot.svg index 9c065edf8..5a55bc680 100644 --- a/cfpq-app/src/main/resources/figures/graph_4.dot.svg +++ b/cfpq-app/src/main/resources/figures/graph_4.dot.svg @@ -4,294 +4,294 @@ - + %503 - + start - -start + +start 1 - -n + +1 | n start->1 - - + + 8 - -v + +8 | v start->8 - - + + 0 - -new X() + +0 | new X() 1->0 - - -alloc + + +alloc 4 - -z + +4 | z 1->4 - - -store_0_r + + +store_0_r 5 - -u + +5 | u 1->5 - - -store_1_r + + +store_1_r 10 - -tmp3 // line 7 + +10 | tmp3 // line 7 8->10 - - -store_2 + + +store_2 6 - -tmp1 // line 6 + +6 | tmp1 // line 6 8->6 - - -assign + + +assign 0->1 - - -alloc_r + + +alloc_r 4->1 - - -store_0 + + +store_0 2 - -new Z() + +2 | new Z() 4->2 - - -alloc + + +alloc 4->6 - - -load_0_r + + +load_0_r 2->4 - - -alloc_r + + +alloc_r 5->1 - - -store_1 + + +store_1 3 - -new U() + +3 | new U() 5->3 - - -alloc + + +alloc 7 - -tmp2 // line 8 + +7 | tmp2 // line 8 5->7 - - -load_1_r + + +load_1_r 3->5 - - -alloc_r + + +alloc_r 10->8 - - -store_2_r + + +store_2_r 12 - -new Y() + +12 | new Y() 10->12 - - -alloc + + +alloc 12->10 - - -alloc_r + + +alloc_r 11 - -tmp4 // line 9 + +11 | tmp4 // line 9 13 - -new P() + +13 | new P() 11->13 - - -alloc + + +alloc 9 - -r + +9 | r 11->9 - - -store_3_r + + +store_3_r 13->11 - - -alloc_r + + +alloc_r 6->8 - - -assign_r + + +assign_r 6->4 - - -load_0 + + +load_0 9->11 - - -store_3 + + +store_3 9->7 - - -assign + + +assign 7->5 - - -load_1 + + +load_1 7->9 - - -assign_r + + +assign_r diff --git a/cfpq-app/src/main/resources/figures/graph_4_sppf.dot.svg b/cfpq-app/src/main/resources/figures/graph_4_sppf.dot.svg index 31a6dd901..f7bf293fd 100644 --- a/cfpq-app/src/main/resources/figures/graph_4_sppf.dot.svg +++ b/cfpq-app/src/main/resources/figures/graph_4_sppf.dot.svg @@ -9,18 +9,10 @@ g - -cluster_5 - - cluster_2 - -cluster_4 - - cluster_0 @@ -33,6 +25,14 @@ cluster_3 + +cluster_5 + + + +cluster_4 + + _0_0 @@ -664,191 +664,191 @@ _2_0 - -0     Nonterminal S, input: [1, 13] + +0     Nonterminal S, input: [1, 13] _2_1 - -1     Range , input: [1, 13], rsm: [S_0, S_2] + +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     Intermediate input: 11, rsm: S_0, input: [1, 13] _2_1->_2_12 - - + + _2_2 - -10     Nonterminal Alias, input: [1, 9] + +10     Nonterminal Alias, input: [1, 9] _2_5 - -13     Range , input: [1, 9], rsm: [Alias_0, Alias_2] + +13     Range , input: [1, 9], rsm: [Alias_0, Alias_2] _2_2->_2_5 - - + + _2_3 - -11     Terminal 'store_3', input: [9, 11] + +11     Terminal 'store_3', input: [9, 11] _2_4 - -12     Terminal 'alloc', input: [11, 13] + +12     Terminal 'alloc', input: [11, 13] _2_6 -14     Intermediate input: 0, rsm: Alias_1, input: [1, 9] +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] + +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] + +16     Range , input: [0, 9], rsm: [Alias_1, Alias_2] _2_6->_2_8 - - + + _2_9 - -17     Nonterminal PointsTo, input: [1, 0] + +17     Nonterminal PointsTo, input: [1, 0] _2_7->_2_9 - - + + _2_10 - -18     Nonterminal FlowsTo, input: [0, 9] + +18     Nonterminal FlowsTo, input: [0, 9] _2_8->_2_10 - - + + _2_11 - -19     Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5] + +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] + +20     Range , input: [0, 9], rsm: [FlowsTo_0, FlowsTo_1] _2_10->_2_13 - - + + _2_14 - -21     Terminal 'alloc', input: [1, 0] + +21     Terminal 'alloc', input: [1, 0] _2_11->_2_14 - - + + _2_23 - -3     Range , input: [1, 11], rsm: [S_0, S_0] + +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] + +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] +22     Intermediate input: 7, rsm: FlowsTo_1, input: [0, 9] _2_13->_2_15 - - + + @@ -859,8 +859,8 @@ _2_15->_2_16 - - + + @@ -871,8 +871,8 @@ _2_15->_2_17 - - + + @@ -971,13 +971,13 @@ _2_44 -5     Intermediate input: 9, rsm: S_1, input: [1, 11] +5     Intermediate input: 9, rsm: S_1, input: [1, 11] _2_23->_2_44 - - + + @@ -1076,14 +1076,14 @@ _2_45 - -6     Nonterminal PointsTo, input: [11, 13] + +6     Nonterminal PointsTo, input: [11, 13] _2_34->_2_45 - - + + @@ -1184,56 +1184,56 @@ _2_46 - -7     Range , input: [1, 9], rsm: [S_0, S_1] + +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] + +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] + +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 - - + + @@ -1599,513 +1599,513 @@ _4_0 - -0     Nonterminal S, input: [8, 12] + +0     Nonterminal S, input: [8, 12] _4_1 - -1     Range , input: [8, 12], rsm: [S_0, S_2] + +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] +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] + +10     Range , input: [10, 12], rsm: [PointsTo_0, PointsTo_5] _4_4 - -12     Terminal 'alloc', input: [10, 12] + +12     Terminal 'alloc', input: [10, 12] _4_2->_4_4 - - + + _4_3 - -11     Nonterminal Alias, input: [8, 8] + +11     Nonterminal Alias, input: [8, 8] _4_5 - -13     Range , input: [8, 8], rsm: [Alias_0, Alias_2] + +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] +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] + +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] + +16     Range , input: [0, 8], rsm: [Alias_1, Alias_2] _4_6->_4_8 - - + + _4_9 - -17     Nonterminal PointsTo, input: [8, 0] + +17     Nonterminal PointsTo, input: [8, 0] _4_7->_4_9 - - + + _4_10 - -18     Nonterminal FlowsTo, input: [0, 8] + +18     Nonterminal FlowsTo, input: [0, 8] _4_8->_4_10 - - + + _4_11 - -19     Range , input: [8, 0], rsm: [PointsTo_0, PointsTo_5] + +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] + +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] +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] + +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     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] +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] + +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] + +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] + +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] + +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] +27     Intermediate input: 4, rsm: PointsTo_9, input: [8, 1] _4_16->_4_20 - - + + _4_21 - -28     Terminal 'alloc', input: [1, 0] + +28     Terminal 'alloc', input: [1, 0] _4_17->_4_21 - - + + _4_22 -29     Intermediate input: 4, rsm: FlowsTo_9, input: [0, 6] +29     Intermediate input: 4, rsm: FlowsTo_9, input: [0, 6] _4_18->_4_22 - - + + _4_24 - -30     Terminal 'assign_r', input: [6, 8] + +30     Terminal 'assign_r', input: [6, 8] _4_19->_4_24 - - + + _4_25 - -31     Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_9] + +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] + +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] + +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] + +34     Range , input: [4, 6], rsm: [FlowsTo_9, FlowsTo_1] _4_22->_4_28 - - + + _4_45 - -5     Terminal 'store_2', input: [8, 10] + +5     Terminal 'store_2', input: [8, 10] _4_23->_4_45 - - + + _4_56 -6     Intermediate input: 8, rsm: S_1, input: [8, 10] +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] +35     Intermediate input: 4, rsm: PointsTo_1, input: [8, 4] _4_25->_4_29 - - + + _4_30 - -36     Terminal 'store_0', input: [4, 1] + +36     Terminal 'store_0', input: [4, 1] _4_26->_4_30 - - + + _4_31 -37     Intermediate input: 4, rsm: FlowsTo_2, input: [0, 4] +37     Intermediate input: 4, rsm: FlowsTo_2, input: [0, 4] _4_27->_4_31 - - + + _4_32 - -38     Terminal 'load_0_r', input: [4, 6] + +38     Terminal 'load_0_r', input: [4, 6] _4_28->_4_32 - - + + _4_33 - -39     Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_1] + +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] + +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] + +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] + +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] +43     Intermediate input: 6, rsm: PointsTo_0, input: [8, 4] _4_33->_4_38 - - + + _4_62 - -7     Nonterminal PointsTo, input: [10, 12] + +7     Nonterminal PointsTo, input: [10, 12] _4_34->_4_62 - - + + _4_39 - -44     Nonterminal Alias, input: [4, 4] + +44     Nonterminal Alias, input: [4, 4] _4_35->_4_39 - - + + _4_40 -45     Intermediate input: 1, rsm: FlowsTo_1, input: [0, 4] +45     Intermediate input: 1, rsm: FlowsTo_1, input: [0, 4] _4_36->_4_40 - - + + _4_41 - -46     Nonterminal Alias, input: [4, 4] + +46     Nonterminal Alias, input: [4, 4] _4_37->_4_41 - - + + @@ -2116,8 +2116,8 @@ _4_38->_4_42 - - + + @@ -2128,8 +2128,8 @@ _4_38->_4_43 - - + + @@ -2140,8 +2140,8 @@ _4_39->_4_44 - - + + @@ -2152,8 +2152,8 @@ _4_40->_4_46 - - + + @@ -2164,14 +2164,14 @@ _4_40->_4_47 - - + + _4_41->_4_44 - - + + @@ -2295,26 +2295,26 @@ _4_63 - -8     Range , input: [8, 8], rsm: [S_0, S_1] + +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] + +9     Range , input: [8, 10], rsm: [S_1, S_0] _4_56->_4_64 - - + + @@ -2355,20 +2355,20 @@ _4_62->_4_2 - - + + _4_63->_4_3 - - + + _4_64->_4_45 - - + + @@ -2443,85 +2443,85 @@ _5_7 - -15     Range , input: [8, 0], rsm: [Alias_0, Alias_1] + +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] + +16     Range , input: [0, 9], rsm: [Alias_1, Alias_2] _5_6->_5_8 - - + + _5_9 - -17     Nonterminal PointsTo, input: [8, 0] + +17     Nonterminal PointsTo, input: [8, 0] _5_7->_5_9 - - + + _5_10 - -18     Nonterminal FlowsTo, input: [0, 9] + +18     Nonterminal FlowsTo, input: [0, 9] _5_8->_5_10 - - + + _5_11 - -19     Range , input: [8, 0], rsm: [PointsTo_0, PointsTo_5] + +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] + +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] +21     Intermediate input: 1, rsm: PointsTo_0, input: [8, 0] _5_11->_5_14 - - + + @@ -2550,37 +2550,37 @@ _5_15 -22     Intermediate input: 7, rsm: FlowsTo_1, input: [0, 9] +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] + +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] + +24     Range , input: [1, 0], rsm: [PointsTo_0, PointsTo_5] _5_14->_5_17 - - + + @@ -2591,8 +2591,8 @@ _5_15->_5_18 - - + + @@ -2603,31 +2603,31 @@ _5_15->_5_19 - - + + _5_20 -27     Intermediate input: 4, rsm: PointsTo_9, input: [8, 1] +27     Intermediate input: 4, rsm: PointsTo_9, input: [8, 1] _5_16->_5_20 - - + + _5_21 - -28     Terminal 'alloc', input: [1, 0] + +28     Terminal 'alloc', input: [1, 0] _5_17->_5_21 - - + + @@ -2655,26 +2655,26 @@ _5_25 - -31     Range , input: [8, 4], rsm: [PointsTo_0, PointsTo_9] + +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] + +32     Range , input: [4, 1], rsm: [PointsTo_9, PointsTo_0] _5_20->_5_26 - - + + @@ -2714,25 +2714,25 @@ _5_29 -35     Intermediate input: 4, rsm: PointsTo_1, input: [8, 4] +35     Intermediate input: 4, rsm: PointsTo_1, input: [8, 4] _5_25->_5_29 - - + + _5_30 - -36     Terminal 'store_0', input: [4, 1] + +36     Terminal 'store_0', input: [4, 1] _5_26->_5_30 - - + + @@ -2766,8 +2766,8 @@ _5_29->_5_33 - - + + @@ -2778,8 +2778,8 @@ _5_29->_5_35 - - + + @@ -3032,26 +3032,26 @@ _5_55 - -59     Range , input: [4, 2], rsm: [Alias_0, Alias_1] + +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] + +60     Range , input: [2, 4], rsm: [Alias_1, Alias_2] _5_51->_5_57 - - + + @@ -3080,14 +3080,14 @@ _5_60 - -63     Nonterminal PointsTo, input: [4, 2] + +63     Nonterminal PointsTo, input: [4, 2] _5_55->_5_60 - - + + @@ -3104,14 +3104,14 @@ _5_61 - -64     Nonterminal FlowsTo, input: [2, 4] + +64     Nonterminal FlowsTo, input: [2, 4] _5_57->_5_61 - - + + @@ -3140,26 +3140,26 @@ _5_64 - -67     Range , input: [4, 2], rsm: [PointsTo_0, PointsTo_5] + +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] + +68     Range , input: [2, 4], rsm: [FlowsTo_0, FlowsTo_1] _5_61->_5_65 - - + + @@ -3188,26 +3188,26 @@ _5_69 - -71     Terminal 'alloc', input: [4, 2] + +71     Terminal 'alloc', input: [4, 2] _5_64->_5_69 - - + + _5_70 - -72     Terminal 'alloc_r', input: [2, 4] + +72     Terminal 'alloc_r', input: [2, 4] _5_65->_5_70 - - + + From cb8c88e375f17d4feb37c03d1cf418eb0c6c6ac7 Mon Sep 17 00:00:00 2001 From: gsv Date: Fri, 20 Feb 2026 17:06:31 +0300 Subject: [PATCH 21/22] Missed figures --- .../resources/figures/Epsilon_example.dot | 3 + .../resources/figures/Epsilon_example.dot.svg | 19 + .../figures/Intermediate_example.dot | 4 + .../figures/Intermediate_example.dot.svg | 18 + .../resources/figures/Nonterm_example.dot | 4 + .../resources/figures/Nonterm_example.dot.svg | 19 + .../main/resources/figures/Range_example.dot | 4 + .../resources/figures/Range_example.dot.svg | 19 + .../resources/figures/Terminal_example.dot | 4 + .../figures/Terminal_example.dot.svg | 19 + cfpq-app/src/main/resources/figures/rsm.dot | 106 ++++ .../src/main/resources/figures/rsm.dot.svg | 473 ++++++++++++++++++ 12 files changed, 692 insertions(+) create mode 100644 cfpq-app/src/main/resources/figures/Epsilon_example.dot create mode 100644 cfpq-app/src/main/resources/figures/Epsilon_example.dot.svg create mode 100644 cfpq-app/src/main/resources/figures/Intermediate_example.dot create mode 100644 cfpq-app/src/main/resources/figures/Intermediate_example.dot.svg create mode 100644 cfpq-app/src/main/resources/figures/Nonterm_example.dot create mode 100644 cfpq-app/src/main/resources/figures/Nonterm_example.dot.svg create mode 100644 cfpq-app/src/main/resources/figures/Range_example.dot create mode 100644 cfpq-app/src/main/resources/figures/Range_example.dot.svg create mode 100644 cfpq-app/src/main/resources/figures/Terminal_example.dot create mode 100644 cfpq-app/src/main/resources/figures/Terminal_example.dot.svg create mode 100644 cfpq-app/src/main/resources/figures/rsm.dot create mode 100644 cfpq-app/src/main/resources/figures/rsm.dot.svg diff --git a/cfpq-app/src/main/resources/figures/Epsilon_example.dot b/cfpq-app/src/main/resources/figures/Epsilon_example.dot new file mode 100644 index 000000000..fe56a9c3e --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/Epsilon_example.dot.svg b/cfpq-app/src/main/resources/figures/Epsilon_example.dot.svg new file mode 100644 index 000000000..e39d541be --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/Intermediate_example.dot b/cfpq-app/src/main/resources/figures/Intermediate_example.dot new file mode 100644 index 000000000..12323b224 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/Intermediate_example.dot.svg b/cfpq-app/src/main/resources/figures/Intermediate_example.dot.svg new file mode 100644 index 000000000..8487bffd2 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/Nonterm_example.dot b/cfpq-app/src/main/resources/figures/Nonterm_example.dot new file mode 100644 index 000000000..b65f1ef17 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/Nonterm_example.dot.svg b/cfpq-app/src/main/resources/figures/Nonterm_example.dot.svg new file mode 100644 index 000000000..b4e60e705 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/Range_example.dot b/cfpq-app/src/main/resources/figures/Range_example.dot new file mode 100644 index 000000000..aa8f56187 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/Range_example.dot.svg b/cfpq-app/src/main/resources/figures/Range_example.dot.svg new file mode 100644 index 000000000..e1b36d3f1 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/Terminal_example.dot b/cfpq-app/src/main/resources/figures/Terminal_example.dot new file mode 100644 index 000000000..b64dea439 --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/Terminal_example.dot.svg b/cfpq-app/src/main/resources/figures/Terminal_example.dot.svg new file mode 100644 index 000000000..9947cddfd --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/rsm.dot b/cfpq-app/src/main/resources/figures/rsm.dot new file mode 100644 index 000000000..f1ae35e3b --- /dev/null +++ b/cfpq-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-app/src/main/resources/figures/rsm.dot.svg b/cfpq-app/src/main/resources/figures/rsm.dot.svg new file mode 100644 index 000000000..096eee3a8 --- /dev/null +++ b/cfpq-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 + + + From 7ddd261f6be475538c56fed2cb11f0ce02d44911 Mon Sep 17 00:00:00 2001 From: Vladimir Kutuev Date: Sun, 8 Mar 2026 23:07:51 +0300 Subject: [PATCH 22/22] Fix module and packages names --- {cfpq-app => cfpq-paths-app}/README.md | 0 {cfpq-app => cfpq-paths-app}/build.gradle.kts | 2 +- .../src/main/kotlin/org/ucfs/paths}/Main.kt | 3 +-- .../src/main/resources/figures/Epsilon_example.dot | 0 .../src/main/resources/figures/Epsilon_example.dot.svg | 0 .../src/main/resources/figures/Intermediate_example.dot | 0 .../src/main/resources/figures/Intermediate_example.dot.svg | 0 .../src/main/resources/figures/Nonterm_example.dot | 0 .../src/main/resources/figures/Nonterm_example.dot.svg | 0 .../src/main/resources/figures/Range_example.dot | 0 .../src/main/resources/figures/Range_example.dot.svg | 0 .../src/main/resources/figures/Terminal_example.dot | 0 .../src/main/resources/figures/Terminal_example.dot.svg | 0 .../src/main/resources/figures/graph_1.dot | 0 .../src/main/resources/figures/graph_1.dot.svg | 0 .../src/main/resources/figures/graph_1_sppf.dot | 0 .../src/main/resources/figures/graph_1_sppf.dot.svg | 0 .../src/main/resources/figures/graph_2.dot | 0 .../src/main/resources/figures/graph_2.dot.svg | 0 .../src/main/resources/figures/graph_2_sppf.dot | 0 .../src/main/resources/figures/graph_2_sppf.dot.svg | 0 .../src/main/resources/figures/graph_3.dot | 0 .../src/main/resources/figures/graph_3.dot.svg | 0 .../src/main/resources/figures/graph_3_sppf.dot | 0 .../src/main/resources/figures/graph_3_sppf.dot.svg | 0 .../src/main/resources/figures/graph_4.dot | 0 .../src/main/resources/figures/graph_4.dot.svg | 0 .../src/main/resources/figures/graph_4_sppf.dot | 0 .../src/main/resources/figures/graph_4_sppf.dot.svg | 0 .../src/main/resources/figures/rsm.dot | 0 .../src/main/resources/figures/rsm.dot.svg | 0 {cfpq-app => cfpq-paths-app}/src/main/resources/graph_1.dot | 0 {cfpq-app => cfpq-paths-app}/src/main/resources/graph_2.dot | 0 {cfpq-app => cfpq-paths-app}/src/main/resources/graph_3.dot | 0 {cfpq-app => cfpq-paths-app}/src/main/resources/graph_4.dot | 0 settings.gradle.kts | 2 +- 36 files changed, 3 insertions(+), 4 deletions(-) rename {cfpq-app => cfpq-paths-app}/README.md (100%) rename {cfpq-app => cfpq-paths-app}/build.gradle.kts (85%) rename {cfpq-app/src/main/kotlin/me/vkutuev => cfpq-paths-app/src/main/kotlin/org/ucfs/paths}/Main.kt (98%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/Epsilon_example.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/Epsilon_example.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/Intermediate_example.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/Intermediate_example.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/Nonterm_example.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/Nonterm_example.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/Range_example.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/Range_example.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/Terminal_example.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/Terminal_example.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_1.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_1.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_1_sppf.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_1_sppf.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_2.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_2.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_2_sppf.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_2_sppf.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_3.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_3.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_3_sppf.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_3_sppf.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_4.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_4.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_4_sppf.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/graph_4_sppf.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/rsm.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/figures/rsm.dot.svg (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/graph_1.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/graph_2.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/graph_3.dot (100%) rename {cfpq-app => cfpq-paths-app}/src/main/resources/graph_4.dot (100%) diff --git a/cfpq-app/README.md b/cfpq-paths-app/README.md similarity index 100% rename from cfpq-app/README.md rename to cfpq-paths-app/README.md diff --git a/cfpq-app/build.gradle.kts b/cfpq-paths-app/build.gradle.kts similarity index 85% rename from cfpq-app/build.gradle.kts rename to cfpq-paths-app/build.gradle.kts index d7c338601..4ff9a58b9 100644 --- a/cfpq-app/build.gradle.kts +++ b/cfpq-paths-app/build.gradle.kts @@ -17,5 +17,5 @@ kotlin { } application { - mainClass = "me.vkutuev.MainKt" + mainClass = "org.ucfs.paths.MainKt" } diff --git a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt b/cfpq-paths-app/src/main/kotlin/org/ucfs/paths/Main.kt similarity index 98% rename from cfpq-app/src/main/kotlin/me/vkutuev/Main.kt rename to cfpq-paths-app/src/main/kotlin/org/ucfs/paths/Main.kt index a13f0e0a6..9c36d45f6 100644 --- a/cfpq-app/src/main/kotlin/me/vkutuev/Main.kt +++ b/cfpq-paths-app/src/main/kotlin/org/ucfs/paths/Main.kt @@ -1,7 +1,6 @@ -package me.vkutuev +package org.ucfs.paths import org.ucfs.grammar.combinator.Grammar -import org.ucfs.grammar.combinator.extension.StringExtension.many import org.ucfs.grammar.combinator.extension.StringExtension.or import org.ucfs.grammar.combinator.extension.StringExtension.times import org.ucfs.grammar.combinator.regexp.Nt diff --git a/cfpq-app/src/main/resources/figures/Epsilon_example.dot b/cfpq-paths-app/src/main/resources/figures/Epsilon_example.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/Epsilon_example.dot rename to cfpq-paths-app/src/main/resources/figures/Epsilon_example.dot diff --git a/cfpq-app/src/main/resources/figures/Epsilon_example.dot.svg b/cfpq-paths-app/src/main/resources/figures/Epsilon_example.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/Epsilon_example.dot.svg rename to cfpq-paths-app/src/main/resources/figures/Epsilon_example.dot.svg diff --git a/cfpq-app/src/main/resources/figures/Intermediate_example.dot b/cfpq-paths-app/src/main/resources/figures/Intermediate_example.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/Intermediate_example.dot rename to cfpq-paths-app/src/main/resources/figures/Intermediate_example.dot diff --git a/cfpq-app/src/main/resources/figures/Intermediate_example.dot.svg b/cfpq-paths-app/src/main/resources/figures/Intermediate_example.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/Intermediate_example.dot.svg rename to cfpq-paths-app/src/main/resources/figures/Intermediate_example.dot.svg diff --git a/cfpq-app/src/main/resources/figures/Nonterm_example.dot b/cfpq-paths-app/src/main/resources/figures/Nonterm_example.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/Nonterm_example.dot rename to cfpq-paths-app/src/main/resources/figures/Nonterm_example.dot diff --git a/cfpq-app/src/main/resources/figures/Nonterm_example.dot.svg b/cfpq-paths-app/src/main/resources/figures/Nonterm_example.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/Nonterm_example.dot.svg rename to cfpq-paths-app/src/main/resources/figures/Nonterm_example.dot.svg diff --git a/cfpq-app/src/main/resources/figures/Range_example.dot b/cfpq-paths-app/src/main/resources/figures/Range_example.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/Range_example.dot rename to cfpq-paths-app/src/main/resources/figures/Range_example.dot diff --git a/cfpq-app/src/main/resources/figures/Range_example.dot.svg b/cfpq-paths-app/src/main/resources/figures/Range_example.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/Range_example.dot.svg rename to cfpq-paths-app/src/main/resources/figures/Range_example.dot.svg diff --git a/cfpq-app/src/main/resources/figures/Terminal_example.dot b/cfpq-paths-app/src/main/resources/figures/Terminal_example.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/Terminal_example.dot rename to cfpq-paths-app/src/main/resources/figures/Terminal_example.dot diff --git a/cfpq-app/src/main/resources/figures/Terminal_example.dot.svg b/cfpq-paths-app/src/main/resources/figures/Terminal_example.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/Terminal_example.dot.svg rename to cfpq-paths-app/src/main/resources/figures/Terminal_example.dot.svg diff --git a/cfpq-app/src/main/resources/figures/graph_1.dot b/cfpq-paths-app/src/main/resources/figures/graph_1.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_1.dot rename to cfpq-paths-app/src/main/resources/figures/graph_1.dot diff --git a/cfpq-app/src/main/resources/figures/graph_1.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_1.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_1.dot.svg rename to cfpq-paths-app/src/main/resources/figures/graph_1.dot.svg diff --git a/cfpq-app/src/main/resources/figures/graph_1_sppf.dot b/cfpq-paths-app/src/main/resources/figures/graph_1_sppf.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_1_sppf.dot rename to cfpq-paths-app/src/main/resources/figures/graph_1_sppf.dot diff --git a/cfpq-app/src/main/resources/figures/graph_1_sppf.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_1_sppf.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_1_sppf.dot.svg rename to cfpq-paths-app/src/main/resources/figures/graph_1_sppf.dot.svg diff --git a/cfpq-app/src/main/resources/figures/graph_2.dot b/cfpq-paths-app/src/main/resources/figures/graph_2.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_2.dot rename to cfpq-paths-app/src/main/resources/figures/graph_2.dot diff --git a/cfpq-app/src/main/resources/figures/graph_2.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_2.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_2.dot.svg rename to cfpq-paths-app/src/main/resources/figures/graph_2.dot.svg diff --git a/cfpq-app/src/main/resources/figures/graph_2_sppf.dot b/cfpq-paths-app/src/main/resources/figures/graph_2_sppf.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_2_sppf.dot rename to cfpq-paths-app/src/main/resources/figures/graph_2_sppf.dot diff --git a/cfpq-app/src/main/resources/figures/graph_2_sppf.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_2_sppf.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_2_sppf.dot.svg rename to cfpq-paths-app/src/main/resources/figures/graph_2_sppf.dot.svg diff --git a/cfpq-app/src/main/resources/figures/graph_3.dot b/cfpq-paths-app/src/main/resources/figures/graph_3.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_3.dot rename to cfpq-paths-app/src/main/resources/figures/graph_3.dot diff --git a/cfpq-app/src/main/resources/figures/graph_3.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_3.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_3.dot.svg rename to cfpq-paths-app/src/main/resources/figures/graph_3.dot.svg diff --git a/cfpq-app/src/main/resources/figures/graph_3_sppf.dot b/cfpq-paths-app/src/main/resources/figures/graph_3_sppf.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_3_sppf.dot rename to cfpq-paths-app/src/main/resources/figures/graph_3_sppf.dot diff --git a/cfpq-app/src/main/resources/figures/graph_3_sppf.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_3_sppf.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_3_sppf.dot.svg rename to cfpq-paths-app/src/main/resources/figures/graph_3_sppf.dot.svg diff --git a/cfpq-app/src/main/resources/figures/graph_4.dot b/cfpq-paths-app/src/main/resources/figures/graph_4.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_4.dot rename to cfpq-paths-app/src/main/resources/figures/graph_4.dot diff --git a/cfpq-app/src/main/resources/figures/graph_4.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_4.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_4.dot.svg rename to cfpq-paths-app/src/main/resources/figures/graph_4.dot.svg diff --git a/cfpq-app/src/main/resources/figures/graph_4_sppf.dot b/cfpq-paths-app/src/main/resources/figures/graph_4_sppf.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_4_sppf.dot rename to cfpq-paths-app/src/main/resources/figures/graph_4_sppf.dot diff --git a/cfpq-app/src/main/resources/figures/graph_4_sppf.dot.svg b/cfpq-paths-app/src/main/resources/figures/graph_4_sppf.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/graph_4_sppf.dot.svg rename to cfpq-paths-app/src/main/resources/figures/graph_4_sppf.dot.svg diff --git a/cfpq-app/src/main/resources/figures/rsm.dot b/cfpq-paths-app/src/main/resources/figures/rsm.dot similarity index 100% rename from cfpq-app/src/main/resources/figures/rsm.dot rename to cfpq-paths-app/src/main/resources/figures/rsm.dot diff --git a/cfpq-app/src/main/resources/figures/rsm.dot.svg b/cfpq-paths-app/src/main/resources/figures/rsm.dot.svg similarity index 100% rename from cfpq-app/src/main/resources/figures/rsm.dot.svg rename to cfpq-paths-app/src/main/resources/figures/rsm.dot.svg diff --git a/cfpq-app/src/main/resources/graph_1.dot b/cfpq-paths-app/src/main/resources/graph_1.dot similarity index 100% rename from cfpq-app/src/main/resources/graph_1.dot rename to cfpq-paths-app/src/main/resources/graph_1.dot diff --git a/cfpq-app/src/main/resources/graph_2.dot b/cfpq-paths-app/src/main/resources/graph_2.dot similarity index 100% rename from cfpq-app/src/main/resources/graph_2.dot rename to cfpq-paths-app/src/main/resources/graph_2.dot diff --git a/cfpq-app/src/main/resources/graph_3.dot b/cfpq-paths-app/src/main/resources/graph_3.dot similarity index 100% rename from cfpq-app/src/main/resources/graph_3.dot rename to cfpq-paths-app/src/main/resources/graph_3.dot diff --git a/cfpq-app/src/main/resources/graph_4.dot b/cfpq-paths-app/src/main/resources/graph_4.dot similarity index 100% rename from cfpq-app/src/main/resources/graph_4.dot rename to cfpq-paths-app/src/main/resources/graph_4.dot diff --git a/settings.gradle.kts b/settings.gradle.kts index 3e92e4f30..0055379ac 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -5,4 +5,4 @@ rootProject.name = "ucfs" include("solver") include("generator") include("test-shared") -include("cfpq-app") +include("cfpq-paths-app")