| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-07-21 13:20:16 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-07-21 13:20:16 +0200 | 
| commit | 008d9c6d2a5e7028dc06b8398846ff60999b8732 (patch) | |
| tree | 538e628bf5934cc0aced3e4670cb96a8e7c4bb92 | |
| parent | 878705688b42837b615067f0a479f31614910f38 (diff) | |
Working on the components. Found error in scripts.
| -rw-r--r-- | ast-to-instr/src/VHDLComponent.java | 118 | ||||
| -rwxr-xr-x | instr-scripts/structural_level.py | 4 | 
2 files changed, 118 insertions, 4 deletions
| diff --git a/ast-to-instr/src/VHDLComponent.java b/ast-to-instr/src/VHDLComponent.java index 37a03a0..a9f2cae 100644 --- a/ast-to-instr/src/VHDLComponent.java +++ b/ast-to-instr/src/VHDLComponent.java @@ -9,12 +9,19 @@ import java.util.Stack;  public class VHDLComponent extends ParsableXML  { +   private static final XPathExpression XPE_FIND_INST_UNIT; +   private static final XPathExpression XPE_FIND_BASE_NAME; +     private static final XPathExpression XPE_FIND_PORT_MAPS;     private static final XPathExpression XPE_FIND_REAL_PORTS; +     private static final XPathExpression XPE_FIND_GENERIC_MAPS;     static     { +      XPE_FIND_INST_UNIT = XMLManager.compile_or_die("./instantiated_unit"); +      XPE_FIND_BASE_NAME = XMLManager.compile_or_die("./base_name"); +        XPE_FIND_PORT_MAPS =           XMLManager.compile_or_die           ( @@ -27,7 +34,6 @@ public class VHDLComponent extends ParsableXML              "./port_chain/el[@kind=\"interface_signal_declaration\"]"           ); -      /* TODO */        XPE_FIND_GENERIC_MAPS = null; /* TODO */     } @@ -79,12 +85,120 @@ public class VHDLComponent extends ParsableXML        Predicates.add_entry("belongs_to_architecture", local_id, parent_id);     } +   private Node find_entity_from_internal_ref (Node current_node) +   throws XPathExpressionException +   { +      XPathExpression current_query; + +      /* +       * Get the item containing the reference to the internal description +       * of this component. +       */ +      current_node = +         (Node) XPE_FIND_BASE_NAME.evaluate +         ( +            current_node, +            XPathConstants.NODE +         ); + +      /* Get the referenced component declaration. */ +      current_query = +         XMLManager.compile_or_die +         ( +            "./../../declaration_chain/el[@kind=\"component_declaration\"]" +            + "[@id=\"" +            + XMLManager.get_attribute(current_node, "ref") +            + "\"]" +         ); +      current_node = +         (Node) current_query.evaluate +         ( +            xml_node, +            XPathConstants.NODE +         ); + +      /* Actually get the entity. */ +      current_query = +         XMLManager.compile_or_die +         ( +            ".//library_unit[@kind=\"entity_declaration\"][@identifier=\"" +            + XMLManager.get_attribute(current_node, "identifier") +            + "\"]" +         ); + +      return +         (Node) current_query.evaluate +         ( +            current_node, +            XPathConstants.NODE +         ); +   } +     private void handle_link_to_entity     (        final IDs local_id     ) +   throws XPathExpressionException     { -      /* TODO */ +      final String kind; +      Node current_node; + +      current_node = +         (Node) XPE_FIND_INST_UNIT.evaluate +         ( +            xml_node, +            XPathConstants.NODE +         ); + +      kind = XMLManager.get_attribute(current_node, "kind"); + +      if (kind.equals("simple_name")) +      { +         current_node = find_entity_from_internal_ref(current_node); +      } +      else if (kind.equals("entity_aspect_entity")) +      { +         /* TODO */ +         //current_node = find_entity_from_external_ref(current_node); +      } +      else +      { +         System.err.println +         ( +            "[E] Unsupported component instantiation type for element " +            + local_id.get_value() +            + " (XML_ID: " +            + XMLManager.get_attribute(xml_node, "id") +            + ")." +         ); + +         return; +      } + +      if (current_node == (Node) null) +      { +         System.err.println +         ( +            "[E] Could not find any entity for the component instantiation " +            + local_id.get_value() +            + " (XML_ID: " +            + XMLManager.get_attribute(xml_node, "id") +            + ")." +         ); + +         return; +      } + +      Predicates.add_entry +      ( +         "is_component_of", +         local_id, +         IDs.get_id_from_xml_id +         ( +            XMLManager.get_attribute(current_node, "id"), +            "entity" +         ) +      );     }     /***************************************************************************/ diff --git a/instr-scripts/structural_level.py b/instr-scripts/structural_level.py index e645d57..4f6f8e9 100755 --- a/instr-scripts/structural_level.py +++ b/instr-scripts/structural_level.py @@ -234,9 +234,9 @@ def handle_component_external_ref (      inst_list_output.write(          "(is_component_of " -        + component.attrib.get("id") +        + id_manager.get_id_from_xml(component.attrib.get("id"))          + " " -        + linked_entity_id +        + id_manager.get_id_from_xml(linked_entity_id)          + ")\n"      ) | 


