blob: 52c3a8e56c8bfb2e841d6a8300033b9ab600a70d (
plain)
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
 | import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import java.util.Collection;
import java.util.Stack;
public class Main
{
   private static final XPathExpression XPE_FIND_ALL_VHDL_FILES;
   private static Parameters PARAMETERS;
   static
   {
      XPE_FIND_ALL_VHDL_FILES =
         XMLManager.compile_or_die
            (
               "./*/*/el[@kind=\"design_file\"][@file]"
         );
   }
   public static void main (final String... args)
   {
      final Document root;
      final Collection<Node> vhdl_files;
      PARAMETERS = new Parameters(args);
      if (!PARAMETERS.are_valid())
      {
         return;
      }
      try
      {
         root = XMLManager.get_document(PARAMETERS.get_xml_file());
      }
      catch (final Exception e)
      {
         System.err.println
         (
            "[E] Could not load XML file \""
            + PARAMETERS.get_xml_file()
            + "\":"
         );
         e.printStackTrace();
         return;
      }
      try
      {
         vhdl_files =
            XMLManager.node_list_to_node_collection
            (
               (NodeList) XPE_FIND_ALL_VHDL_FILES.evaluate
               (
                  root,
                  XPathConstants.NODESET
               )
            );
      }
      catch (final XPathExpressionException xpee)
      {
         System.err.println
         (
            "[E] Something went wrong when looking for the VHDL files:"
         );
         xpee.printStackTrace();
         return;
      }
   }
   private static void parse_content (final Collection<Node> vhdl_files)
   {
      /* Stack highly recommended over FIFO (you don't want to grow large). */
      final Stack<ParsableXML> waiting_list;
      waiting_list = new Stack<ParsableXML>();
      for (final Node f: vhdl_files)
      {
         waiting_list.push(new VHDLFile(null, f));
      }
      while (!waiting_list.isEmpty())
      {
         final Collection<ParsableXML> children;
         try
         {
            children = waiting_list.pop().parse();
         }
         catch (final XPathExpressionException xpee)
         {
            System.err.println
            (
               "[E] Something went wrong while parsing the XML file:"
            );
            xpee.printStackTrace();
            return;
         }
         for (final ParsableXML c: children)
         {
            waiting_list.push(c);
         }
      }
   }
}
 |