summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-07-21 13:20:16 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-07-21 13:20:16 +0200
commit008d9c6d2a5e7028dc06b8398846ff60999b8732 (patch)
tree538e628bf5934cc0aced3e4670cb96a8e7c4bb92
parent878705688b42837b615067f0a479f31614910f38 (diff)
Working on the components. Found error in scripts.
-rw-r--r--ast-to-instr/src/VHDLComponent.java118
-rwxr-xr-xinstr-scripts/structural_level.py4
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"
)