00001
00017 #include "OSrLReader.h"
00018 #include "OSOutput.h"
00019
00020
00021
00022
00023 void yygetOSResult( const char *ch, OSResult* m_osresult, OSrLParserData *m_parserData, OSgLParserData *osglData) throw(ErrorClass);
00024 int osrllex_init(void** ptr_yy_globals);
00025 int osrllex_destroy (void* scanner );
00026 void osrlset_extra (OSrLParserData* parserData , void* yyscanner );
00027
00028
00029 OSrLReader::OSrLReader( )
00030 {
00031 #ifndef NDEBUG
00032 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSrL_parser, ENUM_OUTPUT_LEVEL_trace, "new OSrLParserData()");
00033 #endif
00034 m_parserData = new OSrLParserData();
00035 #ifndef NDEBUG
00036 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSrL_parser, ENUM_OUTPUT_LEVEL_trace, "new OSgLParserData()");
00037 #endif
00038 m_osglData = new OSgLParserData();
00039 #ifndef NDEBUG
00040 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSrL_parser, ENUM_OUTPUT_LEVEL_trace, "new OSResult()");
00041 #endif
00042 m_osresult = new OSResult();
00043
00044 #ifndef NDEBUG
00045 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSrL_parser, ENUM_OUTPUT_LEVEL_trace, "initialize the lexer");
00046 #endif
00047 osrllex_init( &(m_parserData->scanner) );
00048 osrlset_extra (m_parserData , m_parserData->scanner);
00049 #ifndef NDEBUG
00050 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSrL_parser, ENUM_OUTPUT_LEVEL_trace, "done");
00051 #endif
00052 }
00053
00054 OSrLReader::~OSrLReader()
00055 {
00056
00057 #ifndef NDEBUG
00058 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSrL_parser, ENUM_OUTPUT_LEVEL_trace, "delete m_osresult");
00059 #endif
00060 if(m_osresult != NULL) delete m_osresult;
00061 m_osresult = NULL;
00062
00063
00064 #ifndef NDEBUG
00065 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSrL_parser, ENUM_OUTPUT_LEVEL_trace, "delete scanner");
00066 #endif
00067 osrllex_destroy(m_parserData->scanner );
00068
00069
00070 #ifndef NDEBUG
00071 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSrL_parser, ENUM_OUTPUT_LEVEL_trace, "delete parser data");
00072 #endif
00073 if( m_parserData != NULL) delete m_parserData;
00074 m_parserData = NULL;
00075
00076 #ifndef NDEBUG
00077 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSrL_parser, ENUM_OUTPUT_LEVEL_trace, "delete osglData");
00078 #endif
00079 if( m_osglData != NULL) delete m_osglData;
00080 m_osglData = NULL;
00081
00082 #ifndef NDEBUG
00083 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSrL_parser, ENUM_OUTPUT_LEVEL_trace, "success!");
00084 #endif
00085 }
00086
00087 OSResult* OSrLReader::readOSrL(const std::string& posrl) throw(ErrorClass)
00088 {
00089 if (posrl.length() > 0)
00090 {
00091 const char *ch = posrl.c_str();
00092 yygetOSResult( ch, m_osresult, m_parserData, m_osglData);
00093 }
00094 return m_osresult;
00095 }