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, OSnLParserData *osnlData) 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 #ifndef NDEBUG
00048 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoL_parser, ENUM_OUTPUT_LEVEL_trace, "new OSnLParserData()");
00049 #endif
00050 m_osnlData = new OSnLParserData();
00051
00052 #ifndef NDEBUG
00053 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoL_parser, ENUM_OUTPUT_LEVEL_trace, "initialize the lexer");
00054 #endif
00055 osollex_init( &(m_parserData->scanner) );
00056 osolset_extra (m_parserData , m_parserData->scanner);
00057 #ifndef NDEBUG
00058 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoL_parser, ENUM_OUTPUT_LEVEL_trace, "done");
00059 #endif
00060 }
00061
00062 OSoLReader::~OSoLReader()
00063 {
00064 if(m_osoption != NULL) delete m_osoption;
00065 m_osoption = NULL;
00066
00067 osollex_destroy(m_parserData->scanner );
00068 if( m_parserData != NULL) delete m_parserData;
00069 m_parserData = NULL;
00070 if( m_osglData != NULL) delete m_osglData;
00071 m_osglData = NULL;
00072 if( m_osnlData != NULL) delete m_osnlData;
00073 m_osnlData = NULL;
00074 }
00075
00076 OSOption* OSoLReader::readOSoL(const std::string& posol) throw(ErrorClass)
00077 {
00078 if (posol.length() > 0)
00079 {
00080 const char *ch = posol.c_str();
00081 yygetOSOption( ch, m_osoption, m_parserData, m_osglData, m_osnlData);
00082 }
00083 return m_osoption;
00084 }
00085
00086
00087
00088