void Forall::SHOPparse( Filereader & f, TokenStruct< std::string > & ts, Domain & d ) { f.next(); f.assert( "(" ); TokenStruct< std::string > fs = f.parseTypedList( false ); params = d.convertTypes( fs.types ); TokenStruct< std::string > fstruct( ts ); fstruct.append( fs ); f.next(); f.assert( "(" ); if ( f.getChar() != ')' ) { cond = new And; cond->SHOPparse( f, fstruct, d ); } else ++f.c; f.next(); f.assert( "(" ); if ( f.getChar() != ')' ) { cond1 = new And; cond1->SHOPparse( f, fstruct, d ); } else ++f.c; f.next(); f.assert( ")" ); }
void Action::parseConditions( Filereader & f, TokenStruct< std::string > & ts, Domain & d ) { f.next(); f.assert( ":" ); std::string s = f.getToken(); if ( s == "PRECONDITION" ) { f.next(); f.assert( "(" ); if ( f.getChar() != ')' ) { pre = createCondition( f, d ); pre->parse( f, ts, d ); } else ++f.c; f.next(); f.assert( ":" ); s = f.getToken(); } if ( s != "EFFECT" ) f.tokenExit( s ); f.next(); f.assert( "(" ); if ( f.getChar() != ')' ) { eff = createCondition( f, d ); eff->parse( f, ts, d ); } else ++f.c; f.next(); f.assert( ")" ); }
void HTNMethod::parseSHOPConditions( Filereader & f, TokenStruct< std::string > & ts, Domain & d ) { f.next(); f.assert( "(" ); if ( f.getChar() != ')' ) { if(f.getChar() == '('){ pre = new And; } else pre = createSHOPCondition( f, d ); pre->SHOPparse( f, ts, d ); } else ++f.c; }
void HTNMethod::parseTaskList( Filereader & f, TokenStruct< std::string > & ts, Domain & d ) { f.next(); f.assert( "(" ); for ( f.next(); f.getChar() != ')'; f.next() ) { f.assert( "(" ); std::string s = f.getToken(); Task * task = new Task(s); task->SHOPparse( f, ts, d ); tasks.push_back( task ); d.tasks.insert( task ); } ++f.c; f.next(); f.assert( ")" ); }
void Forall::parse( Filereader & f, TokenStruct< std::string > & ts, Domain & d ) { f.next(); f.assert( "(" ); TokenStruct< std::string > fs = f.parseTypedList( true, d.types ); params = d.convertTypes( fs.types ); TokenStruct< std::string > fstruct( ts ); fstruct.append( fs ); f.next(); f.assert( "(" ); if ( f.getChar() != ')' ) { cond = createCondition( f, d ); cond->parse( f, fstruct, d ); } else ++f.c; f.next(); f.assert( ")" ); }