| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-07-31 15:05:30 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-07-31 15:05:30 +0200 | 
| commit | 067f596822b80b2786ce2bb895a593d479516cad (patch) | |
| tree | 52c7fed0824edd09545f9577e5f08f206ee7b628 /instr-to-kodkod/src/StringManager.java | |
| parent | 05fbf26dbb1b1f19e3ef76a0d0789806fa7be12c (diff) | |
First shot at the handling of regular expressions.
Diffstat (limited to 'instr-to-kodkod/src/StringManager.java')
| -rw-r--r-- | instr-to-kodkod/src/StringManager.java | 47 | 
1 files changed, 45 insertions, 2 deletions
| 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<String, String> TO_ID; +   private final Collection<Pattern> 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<String, String>(); +      regexes = new ArrayList<Pattern>(); +        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<Map.Entry<String, String>> candidates; + +      candidates = TO_ID.entrySet(); + +      for (final Pattern p: regexes) +      { +         for (final Map.Entry<String, String> 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); | 


