From 067f596822b80b2786ce2bb895a593d479516cad Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Mon, 31 Jul 2017 15:05:30 +0200 Subject: First shot at the handling of regular expressions. --- instr-to-kodkod/src/StringManager.java | 47 ++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'instr-to-kodkod/src/StringManager.java') diff --git a/instr-to-kodkod/src/StringManager.java b/instr-to-kodkod/src/StringManager.java index 247d8e3..9d73dd6 100644 --- a/instr-to-kodkod/src/StringManager.java +++ b/instr-to-kodkod/src/StringManager.java @@ -1,11 +1,17 @@ -import kodkod.ast.Relation; - +import java.util.ArrayList; +import java.util.Collection; import java.util.Map; import java.util.HashMap; +import java.util.Set; + +import java.util.regex.Pattern; + +import kodkod.ast.Relation; public class StringManager { private final Map TO_ID; + private final Collection regexes; private final VHDLType string_type; private final String anon_string_prefix; private int anon_string_count; @@ -18,6 +24,8 @@ public class StringManager public StringManager () { TO_ID = new HashMap(); + regexes = new ArrayList(); + string_type = Main.get_model().get_string_type(); anon_string_prefix = "_string_"; /* TODO: use a program param. */ anon_string_count = 0; @@ -45,6 +53,41 @@ public class StringManager return string_type.get_member_as_relation(id); } + public Relation get_regex_as_relation + ( + final String str + ) + { + regexes.add(Pattern.compile(str)); + + return get_string_as_relation(str); + } + + public void populate_regex_predicate (final VHDLPredicate rp) + { + final Set> candidates; + + candidates = TO_ID.entrySet(); + + for (final Pattern p: regexes) + { + for (final Map.Entry c: candidates) + { + if (p.matcher(c.getKey()).matches()) + { + rp.add_member + ( + new String[] + { + c.getValue(), + TO_ID.get(p.pattern()) + } + ); + } + } + } + } + private void add_mapping (String str, final String id) { str = cleanup_string(str); -- cgit v1.2.3-70-g09d2