00001 00017 #include "OSiLReader.h" 00018 00019 00020 //bison function 00021 void yygetOSInstance(const char *osil, OSInstance* osinstance, OSiLParserData *parserData) throw(ErrorClass); 00022 //lex functions 00023 int osillex_init(void** ptr_yy_globals); 00024 int osillex_destroy (void* scanner ); 00025 void osilset_extra (OSiLParserData* parserData , void* yyscanner ); 00026 00027 00028 OSiLReader::OSiLReader( ) { 00029 m_osinstance = new OSInstance(); 00030 m_parserData = new OSiLParserData(); 00031 // initialize the lexer and set yyextra 00032 osillex_init( &(m_parserData->scanner) ); 00033 osilset_extra (m_parserData , m_parserData->scanner); 00034 } 00035 00036 OSiLReader::~OSiLReader(){ 00037 if(m_osinstance != NULL) delete m_osinstance; 00038 m_osinstance = NULL; 00039 // now delete the flex scanner that was initialized 00040 osillex_destroy(m_parserData->scanner ); 00041 if( m_parserData != NULL) delete m_parserData; 00042 m_parserData = NULL; 00043 } 00044 00045 OSInstance* OSiLReader::readOSiL(const std::string& posil) throw(ErrorClass){ 00046 try{ 00047 const char *ch = posil.c_str(); 00048 yygetOSInstance( ch, m_osinstance, m_parserData); 00049 return m_osinstance; 00050 } 00051 catch(const ErrorClass& eclass){ 00052 throw ErrorClass( eclass.errormsg); 00053 } 00054 }//end readOSiL 00055 00056 00057 00058