Bitstream Interpretation Library (BIL)  0.1
XDLRCParserImp.hpp
Go to the documentation of this file.
1 
6 #pragma once
7 #ifndef BIL_XDLRCPARSERIMP_HPP
8 #define BIL_XDLRCPARSERIMP_HPP
9 
10 #include <map>
11 #include <set>
12 #include <util/StreamTokenizer.hpp>
13 #include <xdlrc/model/Device.hpp>
14 
15 
16 namespace bil { namespace xdlrcparser_detail {
17 
18  typedef std::map<std::string, size_t> tileMap_t;
19  typedef std::map<std::string, size_t> tileTypeMap_t;
20  typedef std::map<std::string, size_t> wireMap_t;
21  typedef std::set<PIP> pipSet_t;
22  typedef std::map<std::string, size_t> primitiveTypeMap_t;
23  typedef std::map<std::string, size_t> pinMap_t;
24 
25  struct TileTypeEx {
29  };
30 
31 
38  public:
39 
41 
42  void parseFirstPass(StreamTokenizer& tokenizer, Device& device);
43  void parseSecondPass();
44 
45  private:
46 
48  XDLRCParserImp& operator=(const XDLRCParserImp&);
49 
50  void clearAll();
51  void resetTempPointers();
52  void setupSyntax();
53 
54  void parse1stTiles();
55  void parse1stTile();
56  void parse1stPrimitiveSite();
57  void parse1stWire();
58  void parse1stPIP();
59  void parse1stPrimitiveDefs();
60  void parse1stPrimitiveDef();
61  void parse1stPin();
62  void parse1stElement();
63 
64  void parse2ndTiles();
65  void parse2ndTile();
66  void parse2ndPrimitiveSite();
67  void parse2ndPrimitiveSiteSkip();
68  void parse2ndWire();
69  void parse2ndPIP();
70 
71  void parseTileSummary();
72  void parseSummary();
73 
74  void addTile(const char* tileName);
75  void addTileType(const char* typeName);
76  void addWire(const char* wireName);
77  void addConnection(WireConnection& connection);
78  void addPIP(const PIP& pip);
79  void addPrimitiveType(const char* typeName);
80  void addPin(const char* pinName);
81 
82  size_t findTile(const char* tileName);
83  size_t findWire(const char* wireName, wireMap_t& wireMap);
84  size_t findPrimitiveType(const char* typeName);
85  size_t findPin(const char* pinName);
86 
87  StreamTokenizer* m_tok;
88  bool m_secondPassEnabled;
89 
90  Device* m_device;
91  Tiles* m_tiles;
92  Tile* m_tile;
93  PrimitiveSites* m_sites;
94  TileTypes* m_tileTypes;
95  TileType* m_tileType;
96  PrimitiveSiteTypes* m_siteTypes;
97  PrimitiveSiteType* m_siteType;
98  PinWires* m_pinWires;
99  Wires* m_wires;
100  WireConnections* m_connections;
101  PIPs* m_pips;
102  PrimitiveTypes* m_primitiveTypes;
103  PrimitiveType* m_primitiveType;
104  Pins* m_pins;
105  Pin* m_pin;
106  Elements* m_elements;
107 
108  tileMap_t m_tileMap;
109  tileTypeMap_t m_tileTypeMap;
110  std::vector<TileTypeEx> m_tileTypesEx;
111  primitiveTypeMap_t m_primitiveTypeMap;
112  std::vector<pinMap_t> m_pinMaps;
113 
114  TileTypeEx* m_tileTypeEx;
115  wireMap_t* m_wireMap;
116  pipSet_t* m_pipSet;
117  pinMap_t* m_pinMap;
118 
119  size_t m_tileIndex;
120  size_t m_primitiveSiteIndex;
121 
122  };
123 
124 }}
125 
126 #endif