00001
00017 #ifndef NDEBUG
00018 #include <cstdio>
00019 #endif
00020
00021 #include "OSoLReader.h"
00022 #include "OSOutput.h"
00023
00024
00025
00026 void yygetOSOption(const char *osil, OSOption* osoption, OSoLParserData *parserData, OSgLParserData *osglData) throw(ErrorClass);
00027
00028 int osollex_init(void** ptr_yy_globals);
00029 int osollex_destroy (void* scanner );
00030 void osolset_extra (OSoLParserData* parserData , void* yyscanner );
00031
00032
00033 OSoLReader::OSoLReader( )
00034 {
00035 #ifndef NDEBUG
00036 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoL_parser, ENUM_OUTPUT_LEVEL_trace, "new OSOption()");
00037 #endif
00038 m_osoption = new OSOption();
00039 #ifndef NDEBUG
00040 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoL_parser, ENUM_OUTPUT_LEVEL_trace, "new OSoLParserData()");
00041 #endif
00042 m_parserData = new OSoLParserData();
00043 #ifndef NDEBUG
00044 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoL_parser, ENUM_OUTPUT_LEVEL_trace, "new OSgLParserData()");
00045 #endif
00046 m_osglData = new OSgLParserData();
00047
00048 #ifndef NDEBUG
00049 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoL_parser, ENUM_OUTPUT_LEVEL_trace, "initialize the lexer");
00050 #endif
00051 osollex_init( &(m_parserData->scanner) );
00052 osolset_extra (m_parserData , m_parserData->scanner);
00053 #ifndef NDEBUG
00054 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoL_parser, ENUM_OUTPUT_LEVEL_trace, "done");
00055 #endif
00056 }
00057
00058 OSoLReader::~OSoLReader()
00059 {
00060 if(m_osoption != NULL) delete m_osoption;
00061 m_osoption = NULL;
00062
00063 osollex_destroy(m_parserData->scanner );
00064 if( m_parserData != NULL) delete m_parserData;
00065 m_parserData = NULL;
00066 if( m_osglData != NULL) delete m_osglData;
00067 m_osglData = NULL;
00068 }
00069
00070 OSOption* OSoLReader::readOSoL(const std::string& posol) throw(ErrorClass)
00071 {
00072 if (posol.length() > 0)
00073 {
00074 const char *ch = posol.c_str();
00075 yygetOSOption( ch, m_osoption, m_parserData, m_osglData);
00076 }
00077 return m_osoption;
00078 }
00079
00080
00081
00082