| summaryrefslogtreecommitdiff | 
diff options
| -rw-r--r-- | src/hastabel2idp/IDP.java | 214 | 
1 files changed, 147 insertions, 67 deletions
diff --git a/src/hastabel2idp/IDP.java b/src/hastabel2idp/IDP.java index 3e00b64..641d65f 100644 --- a/src/hastabel2idp/IDP.java +++ b/src/hastabel2idp/IDP.java @@ -7,7 +7,6 @@ import hastabel.lang.Type;  import hastabel.lang.Element;  import java.util.Collection; -import java.util.Set;  import java.util.List;  public class IDP @@ -63,12 +62,26 @@ public class IDP        {           if (predicate.is_used())           { -            final Set<List<Type>> relevant_signatures; +            final Collection<List<Type>> relevant_signatures, partial_signatures;              relevant_signatures = predicate.get_relevant_signatures(); - -            add_predicate_to_vocabulary(vocabulary, predicate, relevant_signatures); -            add_predicate_to_structure(structure, predicate, relevant_signatures); +            partial_signatures = predicate.get_partial_signatures(); + +            add_predicate_to_vocabulary +            ( +               vocabulary, +               predicate, +               relevant_signatures, +               partial_signatures +            ); + +            add_predicate_to_structure +            ( +               structure, +               predicate, +               relevant_signatures, +               partial_signatures +            );           }        } @@ -130,102 +143,169 @@ public class IDP        structure.insert_newline();     } -   private static void add_predicate_to_vocabulary +   private static void add_predicate_signature_to_vocabulary     (        final OutputFile vocabulary,        final Predicate predicate, -      final Set<List<Type>> relevant_signatures +      final List<Type> signature     )     { -      for (final List<Type> signature: relevant_signatures) -      { -         boolean is_first; +      boolean is_first; -         is_first = true; +      is_first = true; -         vocabulary.write("   "); -         vocabulary.write(predicate.get_name()); -         vocabulary.write(signature_to_suffix(signature)); -         vocabulary.write("("); +      vocabulary.write("   "); +      vocabulary.write(predicate.get_name()); +      vocabulary.write(signature_to_suffix(signature)); +      vocabulary.write("("); -         for (final Type sig_type:signature) +      for (final Type sig_type: signature) +      { +         if (sig_type == null)           { -            if (is_first) -            { -               is_first = false; -            } -            else -            { -               vocabulary.write(", "); -            } +            continue; +         } -            vocabulary.write(sig_type.get_name()); +         if (is_first) +         { +            is_first = false; +         } +         else +         { +            vocabulary.write(", ");           } -         vocabulary.write(")"); -         vocabulary.insert_newline(); +         vocabulary.write(sig_type.get_name());        } + +      vocabulary.write(")"); +      vocabulary.insert_newline();     } -   private static void add_predicate_to_structure +   private static void add_predicate_to_vocabulary     ( -      final OutputFile structure, +      final OutputFile vocabulary,        final Predicate predicate, -      final Set<List<Type>> relevant_signatures +      final Collection<List<Type>> relevant_signatures, +      final Collection<List<Type>> partial_signatures     )     {        for (final List<Type> signature: relevant_signatures)        { -         boolean is_first_member; +         add_predicate_signature_to_vocabulary +         ( +            vocabulary, +            predicate, +            signature +         ); +      } + +      for (final List<Type> signature: partial_signatures) +      { +         add_predicate_signature_to_vocabulary +         ( +            vocabulary, +            predicate, +            signature +         ); +      } +   } + +   private static void add_predicate_signature_to_structure +   ( +      final OutputFile structure, +      final Predicate predicate, +      final List<Type> signature, +      final boolean is_partial +   ) +   { +      boolean is_first_member; +      final Collection<List<Element>> relevant_members; -         structure.write("   "); -         structure.write(predicate.get_name()); -         structure.write(signature_to_suffix(signature)); -         structure.write("={"); -         structure.insert_newline(); +      structure.write("   "); +      structure.write(predicate.get_name()); +      structure.write(signature_to_suffix(signature)); +      structure.write("={"); +      structure.insert_newline(); -         is_first_member = true; +      is_first_member = true; -         for -         ( -            final List<Element> member: -               predicate.get_relevant_members(signature) -         ) -         { -            boolean is_first_member_param; +      if (is_partial) +      { +         relevant_members = predicate.get_relevant_partial_members(signature); +      } +      else +      { +         relevant_members = predicate.get_relevant_members(signature); +      } + +      for (final List<Element> member: relevant_members) +      { +         boolean is_first_member_param; -            is_first_member_param = true; +         is_first_member_param = true; -            if (is_first_member) +         if (is_first_member) +         { +            is_first_member = false; +            structure.write("      "); +         } +         else +         { +            structure.write(";"); +            structure.insert_newline(); +            structure.write("      "); +         } + +         for (final Element member_param: member) +         { +            if (is_first_member_param)              { -               is_first_member = false; -               structure.write("      "); +               is_first_member_param = false;              }              else              { -               structure.write(";"); -               structure.insert_newline(); -               structure.write("      "); +               structure.write(", ");              } -            for (final Element member_param: member) -            { -               if (is_first_member_param) -               { -                  is_first_member_param = false; -               } -               else -               { -                  structure.write(", "); -               } - -               structure.write(member_param.get_name()); -            } +            structure.write(member_param.get_name());           } +      } + +      structure.insert_newline(); +      structure.write("   }"); +      structure.insert_newline(); + +   } + +   private static void add_predicate_to_structure +   ( +      final OutputFile structure, +      final Predicate predicate, +      final Collection<List<Type>> relevant_signatures, +      final Collection<List<Type>> partial_signatures +   ) +   { +      for (final List<Type> signature: relevant_signatures) +      { +         add_predicate_signature_to_structure +         ( +            structure, +            predicate, +            signature, +            false +         ); +      } -         structure.insert_newline(); -         structure.write("   }"); -         structure.insert_newline(); +      for (final List<Type> signature: partial_signatures) +      { +         add_predicate_signature_to_structure +         ( +            structure, +            predicate, +            signature, +            true +         );        }     }  | 


