summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-05-25 19:49:26 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-05-25 19:49:26 +0200
commit9b7c8cd0088f06d09bc723d4a6eaddf07da31521 (patch)
treea100c08002e032c2808d2d944e49d66e8732b5ec
parentce631dbbec6ffa518dd2e3511a77ec4fecb836d7 (diff)
IDP structure and vocabulary support jokers.
-rw-r--r--src/hastabel2idp/IDP.java214
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
+ );
}
}