Sirikata
|
00001 #ifndef _EMERSON_INFO_ 00002 #define _EMERSON_INFO_ 00003 00004 #include <antlr3.h> 00005 #include <string> 00006 #include <stack> 00007 #include "EmersonPlatform.hpp" 00008 00009 class FileInfo 00010 { 00011 std::string _fileName; 00012 Emerson::uint32 _line; 00013 Emerson::uint32 _charPos; 00014 00015 public: 00016 FileInfo(){} 00017 FileInfo(std::string fileName_, Emerson::uint32 line_, Emerson::uint32 charPos_):_fileName(fileName_), _line(line_), _charPos(charPos_){} 00018 inline std::string fileName() { return _fileName;} 00019 inline Emerson::uint32 line() { return _line;} 00020 inline Emerson::uint32 charPos() { return _charPos; } 00021 inline void lineIs(Emerson::uint32 line_) { _line = line_;} 00022 inline void charPosIs(Emerson::uint32 charPos_) { _charPos = charPos_ ;} 00023 }; 00024 00025 class EmersonInfo 00026 { 00027 std::stack<FileInfo> _fileStack; 00028 //void (*errorFunction_)(struct ANTLR3_BASE_RECOGNIZER_struct*, pANTLR3_UINT8*); 00029 void* errorFunction_; 00030 void* mismatchTokenFunction_; 00031 void* mismatchSetFunction_; 00032 00033 public: 00034 inline FileInfo& currentFileInfo() { return _fileStack.top();} 00035 inline FileInfo& fileInfo() {return _fileStack.top();} 00036 00037 inline void* errorFunction() { return errorFunction_; } 00038 inline void errorFunctionIs(void(*_errorFunction)(struct ANTLR3_BASE_RECOGNIZER_struct*, pANTLR3_UINT8*) ) { errorFunction_ = (void*)_errorFunction;} 00039 00040 inline void* mismatchTokenFunction() { return mismatchTokenFunction_;} 00041 inline void mismatchTokenFunctionIs(void*(*_mismatchTokenFunction)(struct ANTLR3_BASE_RECOGNIZER_struct*, ANTLR3_UINT32, pANTLR3_BITSET_LIST) ) { mismatchTokenFunction_ = (void*)_mismatchTokenFunction;} 00042 00043 00044 00045 void push(std::string fileName_){ 00046 _fileStack.push(FileInfo(fileName_, 1, 0)); 00047 } 00048 00049 }; 00050 00051 00052 #endif