From 45b091f8a44c422d89f9d3bcaf25e5df91da31a7 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Thu, 20 Jul 2017 18:07:47 +0200 Subject: Fixes stupid mistakes, adds some nodes. --- ast-to-instr/src/VHDLCSNode.java | 261 ++++++++++++++++++++++++++++++++++++- ast-to-instr/src/VHDLISNode.java | 9 +- ast-to-instr/src/VHDLProcess.java | 1 + ast-to-instr/src/VHDLSSASNode.java | 6 +- ast-to-instr/src/VHDLWNode.java | 139 +++++++++++++++++++- 5 files changed, 401 insertions(+), 15 deletions(-) (limited to 'ast-to-instr') diff --git a/ast-to-instr/src/VHDLCSNode.java b/ast-to-instr/src/VHDLCSNode.java index de11c7b..8c30795 100644 --- a/ast-to-instr/src/VHDLCSNode.java +++ b/ast-to-instr/src/VHDLCSNode.java @@ -9,16 +9,31 @@ import java.util.ArrayList; import java.util.Collection; /* If Statement Node */ -public class VHDLISNode extends VHDLNode +public class VHDLCSNode extends VHDLNode { - private static final XPathExpression XPE_FIND_SUB_NODES; + private static final XPathExpression XPE_FIND_SOURCES; + private static final XPathExpression XPE_FIND_OTHERS_BRANCH; + private static final XPathExpression XPE_FIND_WHEN_BRANCHES; static { - XPE_FIND_SUB_NODES = XMLManager.compile_or_die("./el"); + XPE_FIND_SOURCES = XMLManager.compile_or_die + ( + "./expression//named_entity" + ); + + XPE_FIND_OTHERS_BRANCH = XMLManager.compile_or_die + ( + "./case_statement_alternative_chain/el[@kind=\"choice_by_others\"]" + ); + + XPE_FIND_WHEN_BRANCHES = XMLManager.compile_or_die + ( + "./case_statement_alternative_chain/el[@kind=\"choice_by_expression\"]" + ); } - public VHDLISNode + public VHDLCSNode ( final IDs parent_id, final Node xml_node, @@ -40,8 +55,244 @@ public class VHDLISNode extends VHDLNode @Override public Collection parse () throws XPathExpressionException + { + final Collection result; + final String xml_id; + final IDs local_id; + + result = new ArrayList(); + + xml_id = XMLManager.get_attribute(xml_node, "id"); + + local_id = IDs.get_id_from_xml_id(xml_id, "node"); + + /** Functions ***********************************************************/ + handle_function_label(local_id); + handle_function_kind(local_id); + handle_function_depth(local_id); + handle_function_expression(local_id); + + /** Predicates **********************************************************/ + handle_predicate_has_option(local_id); + handle_predicate_expr_reads(local_id); + + /** Children ************************************************************/ + result.addAll(handle_when_branches(local_id)); + result.addAll(handle_others_branch(local_id)); + + return result; + } + + /***************************************************************************/ + /** Functions **************************************************************/ + /***************************************************************************/ + private void handle_function_label + ( + final IDs local_id + ) + { + Functions.add_entry + ( + "label", + local_id, + Strings.get_id_from_string + ( + XMLManager.get_attribute(xml_node, "label") + ) + ); + } + + private void handle_function_kind + ( + final IDs local_id + ) + { + Functions.add_entry + ( + "kind", + local_id, + Strings.get_id_from_string("case") + ); + } + + private void handle_function_depth + ( + final IDs local_id + ) + { + Functions.add_entry + ( + "depth", + local_id, + Strings.get_id_from_string + ( + Integer.toString(depth) + ) + ); + } + + private void handle_function_expression + ( + final IDs local_id + ) { /* TODO */ - return null; + } + + /***************************************************************************/ + /** Predicates *************************************************************/ + /***************************************************************************/ + private void handle_predicate_has_option + ( + final IDs local_id + ) + { + for (final String s: attributes) + { + Predicates.add_entry + ( + "has_option", + local_id, + Strings.get_id_from_string(s) + ); + } + } + + private void handle_predicate_expr_reads + ( + final IDs local_id + ) + throws XPathExpressionException + { + final NodeList named_entities; + final int named_entities_count; + + named_entities = + (NodeList) XPE_FIND_SOURCES.evaluate + ( + xml_node, + XPathConstants.NODESET + ); + + named_entities_count = named_entities.getLength(); + + for (int i = 0; i < named_entities_count; ++i) + { + final String ref; + + ref = XMLManager.get_attribute(named_entities.item(0), "ref"); + + if (!Main.node_is_function_or_literal(ref)) + { + Predicates.add_entry + ( + "expr_reads", + local_id, + Waveforms.get_associated_waveform_id + ( + IDs.get_id_from_xml_id(ref, (String) null) + ) + ); + } + } + } + + /***************************************************************************/ + /** Children ***************************************************************/ + /***************************************************************************/ + private Collection handle_when_branches + ( + final IDs local_id + ) + throws XPathExpressionException + { + final Collection result; + final NodeList when_branches; + final int when_branches_length; + + result = new ArrayList(); + + when_branches = + (NodeList) XPE_FIND_WHEN_BRANCHES.evaluate + ( + xml_node, + XPathConstants.NODESET + ); + + + when_branches_length = when_branches.getLength(); + + for (int i = 0; i < when_branches_length; ++i) + { + result.add + ( + new VHDLWNode + ( + parent_id, + when_branches.item(i), + next_node, + (depth + 1), + new String[0] + ) + ); + } + + return result; + } + + private Collection handle_others_branch + ( + final IDs local_id + ) + throws XPathExpressionException + { + final Collection result; + final Node others_branch; + + result = new ArrayList(); + + others_branch = + (Node) XPE_FIND_OTHERS_BRANCH.evaluate + ( + xml_node, + XPathConstants.NODE + ); + + if (others_branch == (Node) null) + { + if (next_node == (IDs) null) + { + Predicates.add_entry + ( + "is_final", + local_id + ); + } + else + { + Predicates.add_entry + ( + "node_connect", + local_id, + next_node + ); + } + } + else + { + result.add + ( + new VHDLWNode + ( + parent_id, + others_branch, + next_node, + (depth + 1), + new String[] {"WHEN_OTHERS"} + ) + ); + } + + return result; } } diff --git a/ast-to-instr/src/VHDLISNode.java b/ast-to-instr/src/VHDLISNode.java index 66eb52a..9bf7810 100644 --- a/ast-to-instr/src/VHDLISNode.java +++ b/ast-to-instr/src/VHDLISNode.java @@ -11,15 +11,16 @@ import java.util.Collection; /* If Statement Node */ public class VHDLISNode extends VHDLNode { - private static final XPathExpression XPE_FIND_CONDITION; private static final XPathExpression XPE_FIND_NAMED_ENTITIES; private static final XPathExpression XPE_FIND_TRUE_BRANCH; private static final XPathExpression XPE_FIND_ELSE_BRANCH; static { - XPE_FIND_CONDITION = XMLManager.compile_or_die("./condition"); - XPE_FIND_NAMED_ENTITIES = XMLManager.compile_or_die(".//named_entity"); + XPE_FIND_NAMED_ENTITIES = XMLManager.compile_or_die + ( + "./condition//named_entity" + ); XPE_FIND_TRUE_BRANCH = XMLManager.compile_or_die ( @@ -121,7 +122,7 @@ public class VHDLISNode extends VHDLNode { Functions.add_entry ( - "kind", + "depth", local_id, Strings.get_id_from_string ( diff --git a/ast-to-instr/src/VHDLProcess.java b/ast-to-instr/src/VHDLProcess.java index 36634fe..4f4ef73 100644 --- a/ast-to-instr/src/VHDLProcess.java +++ b/ast-to-instr/src/VHDLProcess.java @@ -465,6 +465,7 @@ public class VHDLProcess extends ParsableXML ( final IDs local_id ) + throws XPathExpressionException { final Node start_node; final Collection result; diff --git a/ast-to-instr/src/VHDLSSASNode.java b/ast-to-instr/src/VHDLSSASNode.java index 3e61396..dd7d9cd 100644 --- a/ast-to-instr/src/VHDLSSASNode.java +++ b/ast-to-instr/src/VHDLSSASNode.java @@ -105,7 +105,7 @@ public class VHDLSSASNode extends VHDLNode ( "kind", local_id, - Strings.get_id_from_string("if") + Strings.get_id_from_string("signal_assignement") ); } @@ -116,7 +116,7 @@ public class VHDLSSASNode extends VHDLNode { Functions.add_entry ( - "kind", + "depth", local_id, Strings.get_id_from_string ( @@ -266,7 +266,7 @@ public class VHDLSSASNode extends VHDLNode /***************************************************************************/ /** Children ***************************************************************/ /***************************************************************************/ - public void handle_next_node + private void handle_next_node ( final IDs local_id ) diff --git a/ast-to-instr/src/VHDLWNode.java b/ast-to-instr/src/VHDLWNode.java index de11c7b..ac23be8 100644 --- a/ast-to-instr/src/VHDLWNode.java +++ b/ast-to-instr/src/VHDLWNode.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import java.util.Collection; /* If Statement Node */ -public class VHDLISNode extends VHDLNode +public class VHDLWNode extends VHDLNode { private static final XPathExpression XPE_FIND_SUB_NODES; @@ -18,7 +18,7 @@ public class VHDLISNode extends VHDLNode XPE_FIND_SUB_NODES = XMLManager.compile_or_die("./el"); } - public VHDLISNode + public VHDLWNode ( final IDs parent_id, final Node xml_node, @@ -40,8 +40,141 @@ public class VHDLISNode extends VHDLNode @Override public Collection parse () throws XPathExpressionException + { + final Collection result; + final String xml_id; + final IDs local_id; + + result = new ArrayList(); + + xml_id = XMLManager.get_attribute(xml_node, "id"); + + local_id = IDs.get_id_from_xml_id(xml_id, "node"); + + /** Functions ***********************************************************/ + handle_function_label(local_id); + handle_function_kind(local_id); + handle_function_depth(local_id); + handle_function_expression(local_id); + + /** Predicates **********************************************************/ + handle_predicate_has_option(local_id); + handle_predicate_expr_reads(local_id); + + return result; + } + + /***************************************************************************/ + /** Functions **************************************************************/ + /***************************************************************************/ + private void handle_function_label + ( + final IDs local_id + ) + { + Functions.add_entry + ( + "label", + local_id, + Strings.get_id_from_string + ( + XMLManager.get_attribute(xml_node, "label") + ) + ); + } + + private void handle_function_kind + ( + final IDs local_id + ) + { + Functions.add_entry + ( + "kind", + local_id, + Strings.get_id_from_string("when") + ); + } + + private void handle_function_depth + ( + final IDs local_id + ) + { + Functions.add_entry + ( + "depth", + local_id, + Strings.get_id_from_string + ( + Integer.toString(depth) + ) + ); + } + + private void handle_function_expression + ( + final IDs local_id + ) { /* TODO */ - return null; + } + + /***************************************************************************/ + /** Predicates *************************************************************/ + /***************************************************************************/ + private void handle_predicate_has_option + ( + final IDs local_id + ) + { + for (final String s: attributes) + { + Predicates.add_entry + ( + "has_option", + local_id, + Strings.get_id_from_string(s) + ); + } + } + + private void handle_predicate_expr_reads + ( + final IDs local_id + ) + throws XPathExpressionException + { + final NodeList named_entities; + final int named_entities_count; + + named_entities = + (NodeList) XPE_FIND_SOURCES.evaluate + ( + xml_node, + XPathConstants.NODESET + ); + + named_entities_count = named_entities.getLength(); + + for (int i = 0; i < named_entities_count; ++i) + { + final String ref; + + ref = XMLManager.get_attribute(named_entities.item(0), "ref"); + + if (!Main.node_is_function_or_literal(ref)) + { + Predicates.add_entry + ( + "expr_reads", + local_id, + Waveforms.get_associated_waveform_id + ( + IDs.get_id_from_xml_id(ref, (String) null) + ) + ); + } + } } } -- cgit v1.2.3-70-g09d2