1 #ifndef VHDLPARSERERRORHANDLER_H 2 #define VHDLPARSERERRORHANDLER_H 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <exception> 7 #include "VhdlParser.h" 8 #include "ErrorHandler.h" 9 #include "vhdlstring.h" 10 #include "message.h" 11 12 const char *getVhdlFileName(void); 13 14 namespace vhdl { namespace parser { 15 16 class VhdlErrorHandler: public ErrorHandler 17 { 18 public: VhdlErrorHandler(const char * fileName)19 VhdlErrorHandler(const char *fileName) : m_fileName(fileName) {} 20 handleUnexpectedToken(int expectedKind,const JJString & expectedToken,Token * actual,VhdlParser * parser)21 virtual void handleUnexpectedToken(int expectedKind, const JJString& expectedToken, Token *actual, VhdlParser *parser) 22 { 23 warn(m_fileName,actual->beginLine,"syntax error '%s'",actual->image.data()); 24 error_count++; 25 throw std::exception(); 26 } 27 handleParseError(Token * last,Token * unexpected,const JJSimpleString & production,VhdlParser * parser)28 virtual void handleParseError(Token *last, Token *unexpected, const JJSimpleString& production, VhdlParser *parser) 29 { 30 warn(m_fileName,last->beginLine,"unexpected token: '%s'", unexpected->image.data()); 31 error_count++; 32 throw std::exception(); 33 } 34 handleOtherError(const JJString & message,VhdlParser * parser)35 virtual void handleOtherError(const JJString& message, VhdlParser *parser) 36 { 37 warn(m_fileName, -1, "unexpected error: '%s'", (char*)message.c_str()); 38 error_count++; 39 throw std::exception(); 40 } 41 42 private: 43 QCString m_fileName; 44 }; 45 46 class VhdlTokenManagerErrorHandler: public TokenManagerErrorHandler 47 { 48 public: VhdlTokenManagerErrorHandler(const char * fileName)49 VhdlTokenManagerErrorHandler(const char *fileName) : m_fileName(fileName) {} 50 lexicalError(bool EOFSeen,int lexState,int errorLine,int errorColumn,const JJString & errorAfter,JJChar curChar,VhdlParserTokenManager * token_manager)51 virtual void lexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, const JJString& errorAfter, JJChar curChar, VhdlParserTokenManager* token_manager) 52 { 53 warn(m_fileName,errorLine,"Lexical error, Encountered: '%c' after: '%s'",curChar, (EOFSeen? "EOF" : (const char*)errorAfter.c_str())); 54 } 55 lexicalError(const JJString & errorMessage,VhdlParserTokenManager * token_manager)56 virtual void lexicalError(const JJString& errorMessage, VhdlParserTokenManager* token_manager) 57 { 58 warn(m_fileName,-1,"Unknown error: '%s'", (char*)errorMessage.c_str()); 59 } 60 61 private: 62 QCString m_fileName; 63 }; 64 65 } } 66 67 #endif 68 69