| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-06-01 14:36:49 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-06-01 14:36:49 +0200 | 
| commit | d628ee226cb6fc6408794bd9d7f09f86ed37112a (patch) | |
| tree | 930991a83debf8d9207bc07afb7df1ab2ba82c6a /src/hastabel_sol_printer | |
Diffstat (limited to 'src/hastabel_sol_printer')
| -rw-r--r-- | src/hastabel_sol_printer/Main.java | 180 | ||||
| -rw-r--r-- | src/hastabel_sol_printer/Parameters.java | 108 | 
2 files changed, 288 insertions, 0 deletions
diff --git a/src/hastabel_sol_printer/Main.java b/src/hastabel_sol_printer/Main.java new file mode 100644 index 0000000..6b0d906 --- /dev/null +++ b/src/hastabel_sol_printer/Main.java @@ -0,0 +1,180 @@ +package hastabel_sol_printer; + +import hastabel.World; +import hastabel.lang.Formula; +import hastabel.lang.Element; +import hastabel.lang.Predicate; +import hastabel.lang.Type; + +import java.util.Map; +import java.util.HashMap; +import java.util.List; + +import java.util.stream.Collectors; + +import java.io.IOException; +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class Main +{ + +   public static void main (final String... args) +   { +      final Map<String, Map<Element, Element>> str_funs; +      final Map<Element, Element> waveforms; +      final Parameters params; +      final World world; + +      str_funs = new HashMap<String, Map<Element, Element>>(); +      waveforms = new HashMap<Element, Element>(); + +      System.out.println("#### HaStABeL Solutions Pretty Printer ####"); +      System.out.println("# Parsing parameters..."); + +      params = new Parameters(args); + +      if (!params.are_valid()) +      { +         return; +      } + +      world = new World(); + +      System.out.println("# Loading model..."); + +      load_model(world, params); + +      if (!world.is_valid()) +      { +         System.out.println("# Failure."); + +         return; +      } + +      /** FIXME: Waveforms are VHDL specific. **/ +      System.out.println("# Isolating waveforms & string functions."); +      //isolate_waveforms(world, waveforms); +      //string_functions(world, waveforms, str_funs); + +      /* I don't think this is needed */ +      //System.out.println("# Modeling graphs in first-order..."); +      //world.ensure_first_order(); + +      for (final String pred_name: params.get_target_predicates()) +      { +         final String pp_file; + +         pp_file = params.get_pretty_print_file_for(pred_name); + +         if (pp_file == null) +         { +            System.err.println +            ( +               "[E] Could not find pretty print file for predicate \"" +               + pred_name +               + "\"." +            ); +         } +         else +         { +            print_solutions_of(world, pred_name, pp_file); +         } +      } +   } + +   private static void print_solutions_of +   ( +      final World world, +      final String pred_name, +      final String pp_file +   ) +   { +      final List<String> naming; +      final Predicate pred; +      final String pp_template; + +      pred = world.get_predicates_manager().get(pred_name); +      pp_template = null; //file_to_pp_template(pp_file); + +      if (pred == null) +      { +         System.err.println("[E] Could not find predicate \"" + pred + "\"."); + +         return; +      } + +      if (pp_template == null) +      { +         return; +      } + +      naming = pred.get_naming(); + +      for (final List<Element> member: pred.get_members()) +      { +         for (int i = (member.size() - 1); i >= 0; i--) +         { +         } +      } +   } + +   private static void load_file (final World world, final String filename) +   { +      try +      { +         System.out.println("# Loading \"" + filename + "\"..."); +         world.load(filename); +      } +      catch (final IOException ioe) +      { +         System.err.println +         ( +            "[E] IOException when loading \"" +            + filename +            + "\":\n" +            + ioe.getMessage() +         ); + +         world.invalidate(); +      } +   } + +   private static void load_model +   ( +      final World world, +      final Parameters params +   ) +   { +      for (final String level_file: params.get_level_files()) +      { +         load_file(world, level_file); + +         if (!world.is_valid()) +         { +            return; +         } +      } + +      for (final String model_file: params.get_model_files()) +      { +         load_file(world, model_file); + +         if (!world.is_valid()) +         { +            return; +         } +      } +   } + +   private static void isolate_waveforms +   ( +      final World world, +      final Map<Element, Element> waveforms +   ) +   { +      final Predicate is_waveform_of; + +      is_waveform_of = world.get_predicates_manager().get("is_waveform_of"); +   } +} diff --git a/src/hastabel_sol_printer/Parameters.java b/src/hastabel_sol_printer/Parameters.java new file mode 100644 index 0000000..9b70d6e --- /dev/null +++ b/src/hastabel_sol_printer/Parameters.java @@ -0,0 +1,108 @@ +package hastabel_sol_printer; + +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.ArrayList; + +import java.io.File; + +public class Parameters +{ +   private final List<String> level_files; +   private final List<String> model_files; +   private final Map<String, String> pretty_print_files; +   private final List<String> target_predicates; +   private final boolean are_valid; + +   public static void print_usage () +   { +      System.out.println +      ( +         "HaStABeL to IDP\n" +         + "USAGE:\n" +         + "\tjava -jar hastabel_sol_printer.jar <FILES>+\n" +         + "PARAMETERS:\n" +         + "\t- <FILES>\tList of files to be loaded.\n" +         + "NOTES:\n" +         + "\t- Property files have a \".pro\" extension.\n" +         + "\t- Model files have a \".mod\" extension.\n" +         + "\t- Level files have a \".lvl\" extension.\n" +         + "\t- Pretty Printing template files have a \".pp\" extension.\n" +         + "\t- The files may be given in any order." +         + "\t- Only content relevant to what is in the \".sol.mod\" and " +         + "\".sol.lvl\" files will be printer." +      ); +   } + +   public Parameters (final String... args) +   { +      boolean has_error; + +      level_files = new ArrayList<String>(); +      model_files = new ArrayList<String>(); +      pretty_print_files = new HashMap<String, String>(); +      target_predicates = new ArrayList<String>(); + +      has_error = false; + +      for (int i = 0; i < args.length; ++i) +      { +         if (args[i].endsWith(".sol.mod")) +          { +            target_predicates.add("???" /* TODO: get pred name from filename */); +            model_files.add(args[i]); +         } +         else if (args[i].endsWith(".lvl")) +         { +            level_files.add(args[i]); +         } +         else if (args[i].endsWith(".mod")) +          { +            model_files.add(args[i]); +         } +         else if (args[i].endsWith(".pp")) +         { +            pretty_print_files.put("???", args[i]); +         } +         else +         { +            System.err.println +            ( +               "[E] Unknown file type \"" +               + args[i] +               + "\"." +            ); + +            has_error = true; +         } +      } + +      are_valid = !has_error; +   } + +   public List<String> get_level_files () +   { +      return level_files; +   } + +   public String get_pretty_print_file_for (final String str) +   { +      return pretty_print_files.get(str); +   } + +   public List<String> get_model_files () +   { +      return model_files; +   } + +   public List<String> get_target_predicates () +   { +      return target_predicates; +   } + +   public boolean are_valid () +   { +      return are_valid; +   } +}  | 


