Beispiel #1
0
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 TypeGround::parse( Filereader & f, TokenStruct< std::string > & ts, Domain & d ) {
	f.next();
	params.resize( lifted->params.size() );
	for ( unsigned i = 0; i < lifted->params.size(); ++i, f.next() ) {
		std::string s = f.getToken();
		std::pair< bool, unsigned > p = d.types[lifted->params[i]]->parseObject( s );
		if ( p.first ) params[i] = p.second;
		else {
			std::pair< bool, int > q = d.types[lifted->params[i]]->parseConstant( s );
			if ( q.first ) params[i] = q.second;
			else f.tokenExit( s );
		}
	}
	f.assert_token( ")" );
}