Esempio n. 1
0
int getBookMove(Position *pos) {
	tableEntry *t;
	int i;
	i = HASHKEY(pos->hash);
	t = &transpositionTable[i];
	if (t->hash == pos->hash && t->bookMove) {
		//the opening book doesn't contain information like en-passant
		//and castling rights, so we must provide it
		int move;
		int p, sq0, sq1, cap, prom;
		int sd;
		sd = 6 * (pos->ply % 2);
		move = t->bookMove;
		sq0 = FROM(move);
		sq1 = TO(move);
		p = pos->squares[sq0];
		cap = pos->squares[sq1];
		if ((p == WP || p == BP) && cap == EMPTY && sq1%8 != sq0%8) { //en passant
			cap = BP - sd;
		}
		prom = PROM(move);
		return MOV(sq0, sq1, cap, prom, pos->castle, pos->enpas);
	}
	return 0;
}
Esempio n. 2
0
tChyba ROZHODNI() {
	
	int analyza2;
	int analyza;
	int analyza1;
	TItem *pt;
	//ROZHODNI->DTYPE	
	if((analyza = DTYPE()) == S_BEZ_CHYB) {
		token = getNextToken();
		if(token.stav == s_lex_error) {
			return S_LEXIKALNI_CHYBA;
		}	
		return S_BEZ_CHYB;
	}
	//ROZHODNI->PROM VESTAV EXPR
	else {
		//volani funkce na vestavene funkce	
		analyza2 = VESTAV();
		if(analyza2 != S_BEZ_CHYB && analyza2 != S_EPS) {
			return analyza2;
		}
		//pokud je epsilon pokracujeme dal
		if(analyza2 == S_BEZ_CHYB) {
			return S_BEZ_CHYB;
		}
				
		if((porovnani = malloc(strlen(token.data)+1)) == NULL) {
			return S_INTERNI_CHYBA;
		}
		//ulozeni hodnoty token.data do globalni promenne porovnani
		strcpy(porovnani, token.data);
		pt = htSearch(ptrhtGlobal, token.data);		
		//kontrola jestli id je v tabulce globalni	
		if(pt != NULL && pt->druh == ID_FUNCTION) {		
			//pokud ano a je to funkce vola se prom
			analyza1 = PROM();
			if(analyza1 != S_BEZ_CHYB) {
				return analyza1;
			}
				
			free(porovnani);
			return S_BEZ_CHYB;	
		}
		else {//jinak se vola precedencni	
			analyza2 = precedencniSA();
			if(analyza2 != S_BEZ_CHYB) {
				return analyza2;
			}
			
			//instrukce pro prirazeni, tmp1 je vysledek precedencni, tmp3 cilove id
			generateInstruction( OC_PRIRAZENI, searchFrames(neterminal.polozkaTS.key, ptrhtLocal, ptrhtGlobal), NULL, searchFrames(id, ptrhtLocal, ptrhtGlobal) );
				
			return S_BEZ_CHYB;
				
		}
	}
}