Skip to content

Commit

Permalink
toFSA fixed, repeat method for FSA
Browse files Browse the repository at this point in the history
  • Loading branch information
VincenzoArceri committed Aug 21, 2023
1 parent 9d23332 commit 2028460
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import it.unive.lisa.analysis.SemanticDomain.Satisfiability;
import it.unive.lisa.analysis.SemanticException;
import it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain;
import it.unive.lisa.analysis.numeric.Interval;
import it.unive.lisa.analysis.representation.DomainRepresentation;
import it.unive.lisa.analysis.representation.StringRepresentation;
import it.unive.lisa.analysis.string.ContainsCharProvider;
Expand All @@ -21,6 +22,8 @@
import it.unive.lisa.util.datastructures.automaton.Transition;
import it.unive.lisa.util.numeric.IntInterval;
import it.unive.lisa.util.numeric.MathNumber;
import it.unive.lisa.util.numeric.MathNumberConversionException;

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
Expand Down Expand Up @@ -421,4 +424,8 @@ public Satisfiability containsChar(char c) throws SemanticException {
public FSA trim() {
return new FSA(this.a.trim());
}

public FSA repeat(Interval i) throws MathNumberConversionException {
return new FSA(this.a.repeat(i));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -420,8 +420,12 @@ public SimpleAutomaton connectAutomaton(SimpleAutomaton second, SortedSet<State>
}

states.remove(secondMapping.get(second.getInitialState()));
secondMapping.remove(second.getInitialState());

for (Transition<StringSymbol> t : second.getTransitions()) {
if (t.getSource().equals(second.getInitialState()) || t.getDestination().equals(second.getInitialState()) || !secondMapping.containsKey(t.getSource()) || !secondMapping.containsKey(t.getDestination()))
continue;

if (!t.getSource().isInitial() && !t.getDestination().isInitial()) {
delta.add(new Transition<>(secondMapping.get(t.getSource()), secondMapping.get(t.getDestination()),
t.getSymbol()));
Expand All @@ -441,10 +445,9 @@ public SimpleAutomaton connectAutomaton(SimpleAutomaton second, SortedSet<State>
delta.add(new Transition<>(firstMapping.get(s), secondMapping.get(t.getDestination()),
t.getSymbol()));
}
}

}
}

return new SimpleAutomaton(states, delta);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -387,8 +387,8 @@ public FSA toFSA() {
new StringSymbol(t.getSymbol().toString())));
else {
for (char c = 32; c <= 123; c++)
fsaDelta.add(new Transition<>(t.getSource(), t.getSource(), new StringSymbol(c)));
fsaDelta.add(new Transition<>(t.getSource(), t.getSource(), StringSymbol.EPSILON));
fsaDelta.add(new Transition<>(t.getSource(), t.getDestination(), new StringSymbol(c)));
fsaDelta.add(new Transition<>(t.getSource(), t.getDestination(), StringSymbol.EPSILON));
}
}

Expand Down

0 comments on commit 2028460

Please sign in to comment.