1 #ifndef VHDLPARSERTOKENMANAGER_H
2 #define VHDLPARSERTOKENMANAGER_H
3 #include "stdio.h"
4 #include "JavaCC.h"
5 #include "CharStream.h"
6 #include "Token.h"
7 #include "ErrorHandler.h"
8 #include "TokenManager.h"
9 #include "VhdlParserConstants.h"
10 #include "vhdlstring.h"
11 
12 
13 namespace vhdl {
14 namespace parser {
15 class VhdlParser;
16 
17 /** Token Manager. */
18 class VhdlParserTokenManager : public TokenManager, public TokenParser {
19 public:
20 
21   FILE *debugStream;
22   void  setDebugStream(FILE *ds);
23  int  jjStopAtPos(int pos, int kind);
24  int  jjMoveStringLiteralDfa0_0();
25  int  jjMoveStringLiteralDfa1_0(unsigned long long active0, unsigned long long active1, unsigned long long active2);
26  int  jjMoveStringLiteralDfa2_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1, unsigned long long old2, unsigned long long active2);
27  int  jjMoveStringLiteralDfa3_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1, unsigned long long old2, unsigned long long active2);
28  int  jjMoveStringLiteralDfa4_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
29  int  jjMoveStringLiteralDfa5_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
30  int  jjMoveStringLiteralDfa6_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
31  int  jjMoveStringLiteralDfa7_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
32  int  jjMoveStringLiteralDfa8_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
33  int  jjMoveStringLiteralDfa9_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
34  int  jjMoveStringLiteralDfa10_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
35  int  jjMoveStringLiteralDfa11_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
36  int  jjMoveStringLiteralDfa12_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
37  int  jjMoveStringLiteralDfa13_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
38  int  jjMoveStringLiteralDfa14_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
39  int  jjMoveStringLiteralDfa15_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
40  int  jjMoveStringLiteralDfa16_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
41  int  jjMoveStringLiteralDfa17_0(unsigned long long old1, unsigned long long active1);
42 int jjMoveNfa_0(int startState, int curPos);
43 bool jjCanMove_0(int hiByte, int i1, int i2, unsigned long long l1, unsigned long long l2);
44 bool jjCanMove_1(int hiByte, int i1, int i2, unsigned long long l1, unsigned long long l2);
45 Token * jjFillToken();
46 
47 public:
48     int curLexState;
49     int jjnewStateCnt;
50     int jjround;
51     int jjmatchedPos;
52     int jjmatchedKind;
53 
54 Token * getNextToken();
55 void  SkipLexicalActions(Token *matchedToken);
56 void  TokenLexicalActions(Token *matchedToken);
57 #define jjCheckNAdd(state)\
58 {\
59    if (jjrounds[state] != jjround)\
60    {\
61       jjstateSet[jjnewStateCnt++] = state;\
62       jjrounds[state] = jjround;\
63    }\
64 }
65 #define jjAddStates(start, end)\
66 {\
67    for (int x = start; x <= end; x++) {\
68       jjstateSet[jjnewStateCnt++] = jjnextStates[x];\
69    } /*while (start++ != end);*/\
70 }
71 #define jjCheckNAddTwoStates(state1, state2)\
72 {\
73    jjCheckNAdd(state1);\
74    jjCheckNAdd(state2);\
75 }
76 
77 #define jjCheckNAddStates(start, end)\
78 {\
79    for (int x = start; x <= end; x++) {\
80       jjCheckNAdd(jjnextStates[x]);\
81    } /*while (start++ != end);*/\
82 }
83 
84 #ifndef JAVACC_CHARSTREAM
85 #define JAVACC_CHARSTREAM CharStream
86 #endif
87 
88 private:
89   void ReInitRounds();
90 
91 public:
92   VhdlParserTokenManager(JAVACC_CHARSTREAM *stream, int lexState = 0);
93   virtual ~VhdlParserTokenManager();
94   void ReInit(JAVACC_CHARSTREAM *stream, int lexState = 0);
95   void SwitchTo(int lexState);
96   void clear();
97   const JJSimpleString jjKindsForBitVector(int i, unsigned long long vec);
98   const JJSimpleString jjKindsForStateVector(int lexState, int vec[], int start, int end);
99 
100   JAVACC_CHARSTREAM*        input_stream;
101   int                       jjrounds[87];
102   int                       jjstateSet[2 * 87];
103   JJString                  jjimage;
104   JJString                  image;
105   int                       jjimageLen;
106   int                       lengthOfMatch;
107   JJChar                    curChar;
108   TokenManagerErrorHandler* errorHandler = nullptr;
109 
110 public:
setErrorHandler(TokenManagerErrorHandler * eh)111   void setErrorHandler(TokenManagerErrorHandler *eh) {
112       if (errorHandler) delete errorHandler, errorHandler = nullptr;
113       errorHandler = eh;
114     }
115 
116 };
117 }
118 }
119 #endif
120