From 9b7c8cd0088f06d09bc723d4a6eaddf07da31521 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Fri, 25 May 2018 19:49:26 +0200 Subject: IDP structure and vocabulary support jokers. --- src/hastabel2idp/IDP.java | 214 +++++++++++++++++++++++++++++++--------------- 1 file 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> relevant_signatures; + final Collection> 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> relevant_signatures + final List signature ) { - for (final List 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> relevant_signatures + final Collection> relevant_signatures, + final Collection> partial_signatures ) { for (final List signature: relevant_signatures) { - boolean is_first_member; + add_predicate_signature_to_vocabulary + ( + vocabulary, + predicate, + signature + ); + } + + for (final List 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 signature, + final boolean is_partial + ) + { + boolean is_first_member; + final Collection> 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 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 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> relevant_signatures, + final Collection> partial_signatures + ) + { + for (final List signature: relevant_signatures) + { + add_predicate_signature_to_structure + ( + structure, + predicate, + signature, + false + ); + } - structure.insert_newline(); - structure.write(" }"); - structure.insert_newline(); + for (final List signature: partial_signatures) + { + add_predicate_signature_to_structure + ( + structure, + predicate, + signature, + true + ); } } -- cgit v1.2.3-70-g09d2