From 87a748e02b82ea15695de17c7532122a62628dfc Mon Sep 17 00:00:00 2001 From: VincenzoArceri Date: Tue, 22 Aug 2023 15:09:31 +0200 Subject: [PATCH] Fixed empty string replacement --- .../it/unive/lisa/analysis/string/tarsis/StringReplacer.java | 4 +++- .../java/it/unive/lisa/analysis/string/tarsis/Tarsis.java | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisa/lisa-analyses/src/main/java/it/unive/lisa/analysis/string/tarsis/StringReplacer.java b/lisa/lisa-analyses/src/main/java/it/unive/lisa/analysis/string/tarsis/StringReplacer.java index 07c7ef706..69f9ac7a0 100644 --- a/lisa/lisa-analyses/src/main/java/it/unive/lisa/analysis/string/tarsis/StringReplacer.java +++ b/lisa/lisa-analyses/src/main/java/it/unive/lisa/analysis/string/tarsis/StringReplacer.java @@ -122,7 +122,8 @@ public RegexAutomaton replace(String toReplace, RegexAutomaton str, boolean must } private RegexAutomaton emptyStringReplace(RegexAutomaton str) { - AtomicInteger counter = new AtomicInteger(); + int maxId = origin.getStates().stream().mapToInt(s -> s.getId()).max().getAsInt(); + AtomicInteger counter = new AtomicInteger(maxId + 1); SortedSet states = new TreeSet<>(); SortedSet> delta = new TreeSet<>(); @@ -132,6 +133,7 @@ private RegexAutomaton emptyStringReplace(RegexAutomaton str) { Map mapper = new HashMap<>(); origin.getStates().forEach(s -> mapper.put(s, new State(s.getId(), s.isInitial(), false))); states.addAll(mapper.values()); + Function maker = s -> new State(counter.getAndIncrement(), false, false); diff --git a/lisa/lisa-analyses/src/main/java/it/unive/lisa/analysis/string/tarsis/Tarsis.java b/lisa/lisa-analyses/src/main/java/it/unive/lisa/analysis/string/tarsis/Tarsis.java index e23610b42..ea2591e7a 100644 --- a/lisa/lisa-analyses/src/main/java/it/unive/lisa/analysis/string/tarsis/Tarsis.java +++ b/lisa/lisa-analyses/src/main/java/it/unive/lisa/analysis/string/tarsis/Tarsis.java @@ -354,6 +354,9 @@ public Tarsis concat(Tarsis other) { * @return the domain instance containing the replaced automaton */ public Tarsis replace(Tarsis search, Tarsis repl) { + if (isBottom() || search.isBottom() || repl.isBottom()) + return bottom(); + try { return new Tarsis(this.a.replace(search.a, repl.a)); } catch (CyclicAutomatonException e) {