| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/hastabel2idp/HastabelResult.java')
| -rw-r--r-- | src/hastabel2idp/HastabelResult.java | 132 | 
1 files changed, 132 insertions, 0 deletions
| diff --git a/src/hastabel2idp/HastabelResult.java b/src/hastabel2idp/HastabelResult.java new file mode 100644 index 0000000..7b40e2d --- /dev/null +++ b/src/hastabel2idp/HastabelResult.java @@ -0,0 +1,132 @@ +package hastabel2idp; + +import hastabel2idp.OutputFile; + +import hastabel.lang.Type; + +import java.util.List; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class HastabelResult +{ +   private final OutputFile model, level; + +   public HastabelResult (final Parameters params) +   { +      model = +         OutputFile.new_output_file +         ( +            params.get_output_dir() +            + "99_" +            + params.get_property_name() +            + ".sol.mod" +         ); + +      level = +         OutputFile.new_output_file +         ( +            params.get_output_dir() +            + "99_" +            + params.get_property_name() +            + ".sol.lvl" +         ); +   } + +   public void add_solution +   ( +      final String predicate, +      final List<Type> signature, +      final String idp_solution +   ) +   { +      add_solution_to_level(predicate, signature); +      add_solution_to_model(predicate, idp_solution); +      level.write(predicate); +   } + +   private void add_solution_to_level +   ( +      final String predicate, +      final List<Type> signature +   ) +   { +      boolean is_first; + +      is_first = true; + +      level.write("add_predicate "); +      level.write(predicate); +      level.write("("); + +      for (final Type type: signature) +      { +         if (is_first) +         { +            is_first = false; +         } +         else +         { +            level.write(", "); +         } + +         level.write(type.get_name()); +      } + +      level.write(")"); +      level.insert_newline(); +   } + +   private void add_solution_to_model +   ( +      final String predicate, +      final String idp_solution +   ) +   { +      final Pattern pattern; +      final Matcher matcher; + +      pattern = Pattern.compile(predicate + " = \\{(.*)\\}"); +      matcher = pattern.matcher(idp_solution); + +      if (matcher.find()) +      { +         final String[] solutions; + +         solutions = matcher.group(1).split(";"); + +         System.out.println("# " + solutions.length + " solutions found."); + +         for (final String solution: solutions) +         { +            boolean is_first; + +            is_first = true; + +            model.write(predicate); +            model.write("("); + +            for (final String param: solution.split(",")) +            { +               if (is_first) +               { +                  is_first = false; +               } +               else +               { +                  model.write(", "); +               } +               model.write(param.trim()); +            } + +            model.write(")"); +            model.insert_newline(); +         } +      } +      else +      { +         System.out.println("# No solutions found."); +      } +   } +} | 


