removed r which was breaking the code v2

This commit is contained in:
Nicolas Amaya
2025-12-13 23:28:36 -07:00
parent 8579c0bfc0
commit 35b5447c7d

View File

@@ -88,13 +88,15 @@ public class PDG {
} }
/** /**
* Extract variable definitions from a statement simple pattern matching for Java 1.4 * Extract variable definitions from a statement simple pattern matching for
* Java 1.4
*/ */
private Set<String> extractDefs(String statement) { private Set<String> extractDefs(String statement) {
Set<String> vars = new HashSet<>(); Set<String> vars = new HashSet<>();
// Skip special nodes // Skip special nodes
if (statement.startsWith("*")) return vars; if (statement.startsWith("*"))
return vars;
if (statement.contains("=") && !statement.contains("==")) { if (statement.contains("=") && !statement.contains("==")) {
String[] parts = statement.split("="); String[] parts = statement.split("=");
@@ -119,13 +121,15 @@ public class PDG {
String[] initParts = forParts[0].split("="); String[] initParts = forParts[0].split("=");
if (initParts.length > 0) { if (initParts.length > 0) {
String var = initParts[0].trim().replaceAll("[^a-zA-Z0-9_]", ""); String var = initParts[0].trim().replaceAll("[^a-zA-Z0-9_]", "");
if (!var.isEmpty()) vars.add(var); if (!var.isEmpty())
vars.add(var);
} }
} }
String update = forParts[forParts.length - 1]; String update = forParts[forParts.length - 1];
if (update.contains("++") || update.contains("--")) { if (update.contains("++") || update.contains("--")) {
String var = update.replaceAll("[^a-zA-Z0-9_]", ""); String var = update.replaceAll("[^a-zA-Z0-9_]", "");
if (!var.isEmpty()) vars.add(var); if (!var.isEmpty())
vars.add(var);
} }
} }
} }
@@ -139,14 +143,15 @@ public class PDG {
private Set<String> extractUses(String statement) { private Set<String> extractUses(String statement) {
Set<String> vars = new HashSet<>(); Set<String> vars = new HashSet<>();
if (statement.startsWith("*")) return vars; if (statement.startsWith("*"))
return vars;
String[] tokens = statement.split("[\\s+\\-*/=<>!&|(){}\\[\\];,.]"); String[] tokens = statement.split("[\\s+\\-*/=<>!&|(){}\\[\\];,.]");
for (String token : tokens) { for (String token : tokens) {
token = token.trim(); token = token.trim();
if (!token.isEmpty() && if (!token.isEmpty() &&
Character.isJavaIdentifierStart(token.charAt(0)) && Character.isJavaIdentifierStart(token.charAt(0)) &&
!isKeyword(token) && !isKeyword(token) &&
!token.matches("\\d+")) { r !token.matches("\\d+")) {
vars.add(token); vars.add(token);
} }
} }
@@ -160,11 +165,10 @@ public class PDG {
*/ */
private boolean isKeyword(String word) { private boolean isKeyword(String word) {
Set<String> keywords = new HashSet<>(Arrays.asList( Set<String> keywords = new HashSet<>(Arrays.asList(
"if", "else", "while", "for", "do", "return", "break", "continue", "if", "else", "while", "for", "do", "return", "break", "continue",
"int", "double", "float", "char", "boolean", "void", "String", "int", "double", "float", "char", "boolean", "void", "String",
"new", "null", "true", "false", "class", "public", "private", "new", "null", "true", "false", "class", "public", "private",
"static", "final", "this", "super", "try", "catch", "throw", "throws" "static", "final", "this", "super", "try", "catch", "throw", "throws"));
));
return keywords.contains(word); return keywords.contains(word);
} }
@@ -219,10 +223,13 @@ public class PDG {
} }
private boolean mapsEqual(Map<String, Set<String>> m1, Map<String, Set<String>> m2) { private boolean mapsEqual(Map<String, Set<String>> m1, Map<String, Set<String>> m2) {
if (m1.size() != m2.size()) return false; if (m1.size() != m2.size())
return false;
for (String key : m1.keySet()) { for (String key : m1.keySet()) {
if (!m2.containsKey(key)) return false; if (!m2.containsKey(key))
if (!m1.get(key).equals(m2.get(key))) return false; return false;
if (!m1.get(key).equals(m2.get(key)))
return false;
} }
return true; return true;
} }
@@ -235,7 +242,6 @@ public class PDG {
return count; return count;
} }
public Set<String> getDependencies(String nodeLabel) { public Set<String> getDependencies(String nodeLabel) {
Set<String> all = new HashSet<>(); Set<String> all = new HashSet<>();
if (controlDeps.containsKey(nodeLabel)) { if (controlDeps.containsKey(nodeLabel)) {
@@ -277,27 +283,27 @@ public class PDG {
return nodes; return nodes;
} }
public void printPDG() { public void printPDG() {
System.out.println("CONTROL DEPENDENCIES:"); System.out.println("CONTROL DEPENDENCIES:");
for (Map.Entry<String, Set<String>> entry : controlDeps.entrySet()) { for (Map.Entry<String, Set<String>> entry : controlDeps.entrySet()) {
if (!entry.getValue().isEmpty()) { if (!entry.getValue().isEmpty()) {
System.out.println(" " + entry.getKey()); System.out.println(" " + entry.getKey());
for (String dep : entry.getValue()) { for (String dep : entry.getValue()) {
System.out.println(" <- " + dep); System.out.println(" <- " + dep);
} }
} }
} }
System.out.println("\nDATA DEPENDENCIES:"); System.out.println("\nDATA DEPENDENCIES:");
for (Map.Entry<String, Set<String>> entry : dataDeps.entrySet()) { for (Map.Entry<String, Set<String>> entry : dataDeps.entrySet()) {
if (!entry.getValue().isEmpty()) { if (!entry.getValue().isEmpty()) {
System.out.println(" " + entry.getKey()); System.out.println(" " + entry.getKey());
for (String dep : entry.getValue()) { for (String dep : entry.getValue()) {
System.out.println(" <- " + dep); System.out.println(" <- " + dep);
} }
} }
} }
} }
public Map<String, Set<String>> getControlDependencies() { public Map<String, Set<String>> getControlDependencies() {
return new HashMap<>(controlDeps); return new HashMap<>(controlDeps);