int blockList() { //printf("block list \n"); switch(T.type){ case T_KEYWORD: if (!(strCmpConstStr (&(T.s), "end"))) { return E_OK; } if ((error = commands()) != E_OK) return error; if(semi == 1){ gettoken(); if (!(strCmpConstStr (&(T.s), "end"))) { //uprava return E_SYN; } semi = 0; } if ((error = blockList()) != E_OK) return error; return E_OK; break; case T_ID: if ((error = commands()) != E_OK) return error; if(semi == 1){ gettoken(); if (!(strCmpConstStr (&(T.s), "end"))) { //uprava return E_SYN; } semi = 0; } if ((error = blockList()) != E_OK) return error; return E_OK; break; default: return E_SYN; //E_OK puvodne } return E_OK; }
int main () { // variable declaration char command[MAXCMD]; int* heap = malloc(HEAPSIZE); char* argv[MAXARGS]; // memory management *heap = HEAPSIZE; bID = 0; // Loop - fetch command, call functions while(1) { printf("> "); gets(command); parsecommand(command, argv); if(strcmp(argv[0], "allocate") == 0) Allocate(heap, atoi(argv[1])); else if(strcmp(argv[0], "free") == 0) Free(heap, atoi(argv[1])); else if(strcmp(argv[0], "blocklist") == 0) blockList(heap); else if(strcmp(argv[0], "writeheap") == 0) writeHeap(heap, atoi(argv[1]), argv[2][0], atoi(argv[3])); else if(strcmp(argv[0], "printheap") == 0) printHeap(heap, atoi(argv[1]), atoi(argv[2])); else if(strcmp(argv[0], "quit") == 0) break; } free(heap); return 0; }
void RecordOutputMgr::printClosest(RecordKeyVector &keyList, const vector<int> *dists) { //The first time we print a record is when we print any header, because the header //hasn't been read from the query file until after the first record has also been read. checkForHeader(); const ContextClosest *context = static_cast<const ContextClosest *>(_context); bool deleteBlocks = false; const Record *keyRec = keyList.getKey(); RecordKeyVector blockList(keyRec); if (keyRec->getType() == FileRecordTypeChecker::BAM_RECORD_TYPE) { _bamBlockMgr->getBlocks(blockList, deleteBlocks); _currBamBlockList = &blockList; } if (!keyList.empty()) { int distCount = 0; for (RecordKeyVector::const_iterator_type iter = keyList.begin(); iter != keyList.end(); iter = keyList.next()) { const Record *hitRec = *iter; printKey(keyRec, keyRec->getStartPosStr(), keyRec->getEndPosStr()); tab(); addDbFileId(hitRec->getFileIdx()); printKey(hitRec, hitRec->getStartPosStr(), hitRec->getEndPosStr()); if (dists != NULL) { tab(); int dist = (*dists)[distCount]; //if not using sign distance, use absolute value instead. dist = context->signDistance() ? dist : abs(dist); _outBuf.append(dist); distCount++; } newline(); if (needsFlush()) flush(); } } else { printKey(keyRec, keyRec->getStartPosStr(), keyRec->getEndPosStr()); tab(); // need to add a dummy file id if multiple DB files are used if (_context->getNumInputFiles() > 2) { _outBuf.append('.'); tab(); } null(false, true); if (context->reportDistance()) { tab(); _outBuf.append(-1); } newline(); } if (deleteBlocks) { _bamBlockMgr->deleteBlocks(blockList); _currBamBlockList = NULL; } return; }
void RecordOutputMgr::printRecord(RecordKeyVector &keyList) { if (keyList.getKey()->getType() == FileRecordTypeChecker::BAM_RECORD_TYPE) { RecordKeyVector blockList(keyList.getKey()); bool deleteBlocks = false; _bamBlockMgr->getBlocks(blockList, deleteBlocks); printRecord(keyList, &blockList); if (deleteBlocks) { _bamBlockMgr->deleteBlocks(blockList); } return; } printRecord(keyList, NULL); }
void RecordOutputMgr::printClosest(RecordKeyVector &keyList, const vector<int> *dists) { const ContextClosest *context = static_cast<const ContextClosest *>(_context); bool deleteBlocks = false; RecordKeyVector blockList(keyList.getKey()); if (keyList.getKey()->getType() == FileRecordTypeChecker::BAM_RECORD_TYPE) { _bamBlockMgr->getBlocks(blockList, deleteBlocks); _currBamBlockList = &blockList; } if (!keyList.empty()) { int distCount = 0; for (RecordKeyVector::const_iterator_type iter = keyList.begin(); iter != keyList.end(); iter = keyList.next()) { printKey(keyList.getKey()); tab(); addDbFileId((*iter)->getFileIdx()); (*iter)->print(_outBuf); if (dists != NULL) { tab(); _outBuf.append((*dists)[distCount]); distCount++; } newline(); if (needsFlush()) flush(); } } else { printKey(keyList.getKey()); tab(); null(true, false); if (context->reportDistance()) { tab(); _outBuf.append(-1); } newline(); } if (deleteBlocks) { _bamBlockMgr->deleteBlocks(blockList); _currBamBlockList = NULL; } return; }
void jacobi( size_t n , size_t iterations, size_t block_size, std::string output_filename) { hpx::util::high_resolution_timer t; vector< vector< vector< shared_future<block> > > > blockList(2); jacobi_init(blockList, n, block_size); size_t numBlocks = blockList[0].size(); for(size_t i = 1; i < iterations; ++i) { const size_t prev = i%2; const size_t curr = (i+1)%2; blockList[curr][0][0] = dataflow( jacobi_BL, blockList[prev][0][0], blockList[prev][0][1], blockList[prev][1][0] ); for(size_t j = 1; j < numBlocks - 1; j++) { blockList[curr][j][0] = dataflow( jacobi_left, blockList[prev][j ][0], blockList[prev][j ][1], blockList[prev][j-1][0], blockList[prev][j+1][0] ); } blockList[curr][numBlocks-1][0] = dataflow( jacobi_TL, blockList[prev][numBlocks-1][0], blockList[prev][numBlocks-1][1], blockList[prev][numBlocks-2][0] ); for(size_t j = 1; j < numBlocks - 1; j++) { blockList[curr][0][j] = dataflow( jacobi_bot, blockList[prev][0][j ], blockList[prev][0][j-1], blockList[prev][0][j+1], blockList[prev][1][j ] ); for(size_t k = 1; k < numBlocks - 1; k++) { blockList[curr][j][k] = dataflow( jacobi_op, blockList[prev][k ][j ], blockList[prev][k ][j-1], blockList[prev][k ][j+1], blockList[prev][k-1][j ], blockList[prev][k+1][j ]); } blockList[curr][numBlocks-1][j] = dataflow( jacobi_top, blockList[prev][numBlocks-1][j ], blockList[prev][numBlocks-1][j-1], blockList[prev][numBlocks-1][j+1], blockList[prev][numBlocks-2][j ] ); } blockList[curr][0][numBlocks-1] = dataflow( jacobi_BR, blockList[prev][0][numBlocks-1], blockList[prev][0][numBlocks-2], blockList[prev][1][numBlocks-1]); for(size_t j = 1; j < numBlocks - 1; j++) { blockList[curr][j][numBlocks-1] = dataflow( jacobi_left, blockList[prev][j ][numBlocks-1], blockList[prev][j ][numBlocks-2], blockList[prev][j-1][numBlocks-1], blockList[prev][j+1][numBlocks-1]); } blockList[curr][numBlocks-1][numBlocks-1] = dataflow( jacobi_TR, blockList[prev][numBlocks-1][numBlocks-1], blockList[prev][numBlocks-1][numBlocks-2], blockList[prev][numBlocks-2][numBlocks-1]); } for(int i = 0; i < blockList[(n-1)%2].size(); i++) { hpx::wait_all(blockList[(n-1)%2][i]); } report_timing(n, iterations, t.elapsed()); //output_grid(output_filename, *grid_old, n); }
int program() { gettoken(); switch(T.type){ case T_KEYWORD:{ if (var == 0){ if (!(strCmpConstStr (&(T.s), "var"))){ //var var = 1; gettoken(); TempVar = allocate(sizeof(tVariable)); if ((error = globalDecl()) != E_OK) return error; // deklarace promennych //free(TempVar); } } if (!strCmpConstStr (&(T.s), "begin")) {// BEGIN //if(searchFunListFW() != NULL) return E_SEMA; if((error = searchFunListCH()) != E_OK) return E_SEMA; gettoken(); //printf("main \n"); if (!strCmpConstStr (&(T.s), "end")){ //BEGIN END. - prazdne gettoken(); if ((error = testToken(T_DOT)) != E_OK) return error; gettoken(); if ((error = testToken(T_EOF)) != E_OK) return error; error = InsertEmptyItemTape(); //vkladam novy prazdny prvek na pasku if (error == E_INTERN) return error; Tape->last->instruction = NOP; return E_OK; } if ((error = blockList()) != E_OK) return error; } else if (!strCmpConstStr (&(T.s), "function")) { // funkce BSTInit(&TempTreeL); TempVar = allocate(sizeof(tVariable)); afun = 1; // ADDED if ((error = function()) != E_OK){ return error; } //printf("za funkcwma \n"); afun = 0; //ADDED //strFree(&ActFun); //ADDED if ((error = program()) != E_OK) return error; return E_OK; } else { return E_SYN;} break; } default: { return E_SYN; } } gettoken(); if ((error = testToken(T_DOT)) != E_OK) return error; gettoken(); if ((error = testToken(T_EOF)) != E_OK) return error; return E_OK; }
int commands() { tVariable *glob = NULL; tVariable *loc = NULL; tParamList *par = NULL; string *name = allocate(sizeof(string)); tTapeItem *previous = Tape->last; tVariable *op1 = allocate(sizeof(tVariable)); tVariable *op2 = allocate(sizeof(tVariable)); tVariable *result = allocate(sizeof(tVariable)); if((name == NULL) || (op1 == NULL) || (op2 == NULL) || (result == NULL)) return E_INTERN; switch(T.type){ case T_ID: /* if(afun == 1){ //ADDED pokud neni ve funkci kontroluje jen global if ((par = searchParam(paramlist, &(T.s))) == NULL){ //added if(strCmpstring(&(T.s), &ActFun) != 0){ //zde budu muset nejspis dat jen jmenu aktualni fkce if((loc = BSTSearch (TempTreeL, T.s)) == NULL){ if((glob = BSTSearch (TempTree, T.s)) == NULL){ return E_SEMA; }*/ // else{ // Tape->last->op1 = glob; // } // } // else{ // Tape->last->op1 = loc; // } // } // else{ // Tape->last->op1 = item; // } //} // else{ // Tape->last->op1 = par; // } // } /* else {*/ if((glob = BSTSearch (TempTree, T.s)) == NULL){ return E_SEMA; } /*else{ Tape->last->op1 = glob; }*/ //} gettoken(); if ((error = testToken(T_ASSIGN)) != E_OK) return error; if ((error = ExpParser()) != E_OK) return error; //if(InsertEmptyItemTape() != E_OK) return E_INTERN; Tape->last->instruction = ASSIGN; if (loc != NULL){ Tape->last->op1 = loc; } else if (glob != NULL){ Tape->last->op1 = glob; } if (res != Tape->last->op1->type ) return E_SEMB; Tape->last->op2 = Tape->last->previous->result; Tape->last->result = Tape->last->op1; printf("parser adresa resultu v parseri %d \n",Tape->last->op2); if ((strCmpConstStr (&(T.s), "end"))) { if ((error = testToken(T_SEMICOLON)) != E_OK) return error; semi = 1; } break; case T_KEYWORD: if(!strCmpConstStr (&(T.s), "begin")){ gettoken(); if((error = blockList()) != E_OK) return error; gettoken(); if ((strCmpConstStr (&(T.s), "end"))) { if ((error = testToken(T_SEMICOLON)) != E_OK) return error; semi = 1; } break; } if(!strCmpConstStr (&(T.s), "if")){ //if tTapeItem *label; tTapeItem *endelse; tVariable *op11 = allocate(sizeof(tVariable)); tVariable *op22 = allocate(sizeof(tVariable)); if((op11 == NULL) || (op22 == NULL)) return E_INTERN; if((error = ExpParser()) != E_OK) return error; //vyraz if (res != 3 ) return E_SEMB; //ZAKONECNTOVANO if(InsertEmptyItemTape() != E_OK) return E_INTERN; Tape->last->instruction = JUMPN; Tape->last->op1 = Tape->last->previous->result; Tape->last->op2 = op2; Tape->last->op2->type = TAPE_POINTER; label = Tape->last; if((error = testToken(T_KEYWORD)) == E_OK){ if(strCmpConstStr (&(T.s),"then")) return E_SYN; //then } else return error; gettoken(); if((error = testToken(T_KEYWORD)) == E_OK){ if(strCmpConstStr (&(T.s),"begin")) return E_SYN; //begin slozeneho prikazu } else return error; gettoken(); if((error = blockList()) != E_OK) return error; //blocklist gettoken(); Tape->last->instruction = JUMPN; Tape->last->op1 = op11; Tape->last->op1->type = O_BOOL; Tape->last->op1->value.bval = false; if(strInit(&(Tape->last->op1->name)) != STR_SUCCESS) return E_INTERN; Tape->last->op2 = op22; Tape->last->op2->type = TAPE_POINTER; endelse = Tape->last; if((error = testToken(T_KEYWORD)) != E_OK) return error; if(strCmpConstStr (&(T.s),"else")) return E_SYN; if(InsertEmptyItemTape() != E_OK) return E_INTERN; Tape->last->instruction = NOP; label->op2->value.tape_pointer = Tape->last; gettoken(); if((error = testToken(T_KEYWORD)) != E_OK) return error; if(strCmpConstStr (&(T.s),"begin")) return E_SYN; //begin slozeneho prikazu gettoken(); if((error = blockList()) != E_OK) return error; //blocklist gettoken(); if ((strCmpConstStr (&(T.s), "end"))) { if (testToken(T_SEMICOLON) != E_OK) return E_SYN; semi = 1; } if(InsertEmptyItemTape() != E_OK) return E_INTERN; Tape->last->instruction = NOP; endelse->op2->value.tape_pointer = Tape->last; break; } if(!strCmpConstStr (&(T.s), "while")){ if(InsertEmptyItemTape() != E_OK) return E_INTERN; Tape->last->instruction = NOP; tTapeItem *label1; tTapeItem *label2 = Tape->last; // ukazatel na pasku kam se bude cyklus vracet tVariable *op11 = allocate(sizeof(tVariable)); tVariable *op22 = allocate(sizeof(tVariable)); if((op11 == NULL) || (op22 == NULL)) return E_INTERN; if((error = ExpParser()) != E_OK) return error; //vyraz if (res != 3 ) return E_SEMB; //ZAKONECNTOVANO if(InsertEmptyItemTape() != E_OK) return E_INTERN; Tape->last->instruction = JUMPN; Tape->last->op1 = Tape->last->previous->result; Tape->last->op2 = op22; Tape->last->op2->type = TAPE_POINTER; label1 = Tape->last; if((error = testToken(T_KEYWORD)) == E_OK){ if(strCmpConstStr (&(T.s),"do")) return E_SYN; //begin slozeneho prikazu } else return error; gettoken(); if((error = testToken(T_KEYWORD)) == E_OK){ if(strCmpConstStr (&(T.s),"begin")) return E_SYN; //begin slozeneho prikazu } else{ return error; } gettoken(); if((error = blockList()) != E_OK) return error; //blocklist gettoken(); if ((strCmpConstStr (&(T.s), "end"))) { if ((error = testToken(T_SEMICOLON)) != E_OK) return error; semi = 1; } if(InsertEmptyItemTape() != E_OK) return E_INTERN; Tape->last->instruction = JUMP; Tape->last->op1 = op1; Tape->last->op1->type = O_BOOL; Tape->last->op1->value.bval = false; if(strInit(&(Tape->last->op1->name)) != STR_SUCCESS) return E_INTERN; Tape->last->op2 = op2; Tape->last->op2->type = TAPE_POINTER; Tape->last->op2->value.tape_pointer = label2; // nepodmineny skok zpet na zacatek vyhodnocovani podminky cyklu if(InsertEmptyItemTape() != E_OK) return E_INTERN; Tape->last->instruction = NOP; // instrukce, na kterou se skoci v pripade nesplneni podminky whilu label1->op2->value.tape_pointer = Tape->last; break; } if (!strCmpConstStr (&(T.s), "readln")) { gettoken(); if((error = testToken(T_LB)) != E_OK) return error; gettoken(); if((error = testToken(T_ID)) != E_OK) return error; if(afun == 1){ if(strCmpstring(&(T.s), &ActFun) != 0){ //added: Jmeno fkce, params, global, local if (searchParam(paramlist, &(T.s)) == NULL){ if((TempVar = BSTSearch (TempTreeL, T.s)) == NULL){ if((TempVar = BSTSearch(TempTree, T.s)) == NULL) return E_SEMA; } } } } else{ if((TempVar = BSTSearch(TempTree, T.s)) == NULL) return E_SEMA; } if (TempVar->type == O_BOOL){ TempVar = NULL; return E_SEMB; } gettoken(); if((error = testToken(T_RB)) != E_OK){ TempVar = NULL; return error; } gettoken(); if ((strCmpConstStr (&(T.s), "end"))) { if ((error = testToken(T_SEMICOLON)) != E_OK){ TempVar = NULL; return error; } semi = 1; } TempVar = NULL; break; } if (!strCmpConstStr (&(T.s), "write")) { //write(ID) !!! integer or real !!! gettoken(); if(InsertEmptyItemTape() != E_OK) return E_INTERN; Tape->last->instruction = JUMP; Tape->last->op1 = op1; Tape->last->op1->type = O_BOOL; Tape->last->op1->value.bval = false; if((error = testToken(T_LB)) != E_OK) return error; gettoken(); if((error = writefun()) != E_OK) return error; gettoken(); if ((strCmpConstStr (&(T.s), "end"))) { if ((error = testToken(T_SEMICOLON)) != E_OK) return error; semi = 1; } break; } default: return E_SYN; } return E_OK; }
int function() { int enumerator; int fw =0; pc =0; gettoken(); if ((error = testToken(T_ID)) != E_OK) return error; // ID_funkce - mozna upresnit string name; // tu je vkladanie funkcii do seznamu 98-103 if(strInit(&name) != STR_SUCCESS) return E_INTERN; if(strInit(&ActFun) != STR_SUCCESS) return E_INTERN; //added //if(searchFunList(&(T.s)) != NULL) return E_SEMA; strCopystring(&name, &(T.s)); strCopystring(&ActFun, &(T.s)); //added gettoken(); if ((error = testToken(T_LB)) != E_OK) return error; // leva zavorka gettoken(); if ((testToken(T_RB) != E_OK) && (testToken(T_ID) != E_OK)) return E_SYN; // prava zavorka(muze byt prazdne) nebo parametr if (testToken(T_ID) == E_OK){ initParamlist(paramlist); if((error = params()) != E_OK) return error; //parametry } if ((error = testToken(T_RB)) != E_OK) return error; gettoken(); if ((error = testToken(T_COLON)) != E_OK) return error; // ":" gettoken(); if ((error = testToken(T_DATATYPE)) != E_OK) return error; // "typ" - mozna funkci pro typy - semantika? !!!!! TYPE if(!(strCmpConstStr(&(T.s), "boolean"))) enumerator = O_BOOL; else if(!(strCmpConstStr(&(T.s), "integer"))) enumerator = O_INT; else if(!(strCmpConstStr(&(T.s), "real"))) enumerator = O_REAL; else if(!(strCmpConstStr(&(T.s), "string"))) enumerator = O_STRING; else return E_SEMA; //if((searchFunList(&name)!= NULL)) return E_SYN; gettoken(); if ((error = testToken(T_SEMICOLON)) != E_OK) return error; // ";" gettoken(); switch(T.type){ case T_KEYWORD: if (!strCmpConstStr (&(T.s), "forward")) { gettoken(); fw = 1; if((searchFunListFW(&name)!= NULL)) return E_SEMA; if(insertFunListItem(&name,enumerator,paramlist,fw,pc) != E_OK) return E_INTERN; if ((error = testToken(T_SEMICOLON)) != E_OK) return error; // FORWARD a ";" return E_OK; } item = searchFunListN(&name); if((item != NULL)) { if (item->forward != 2) return E_SEMA; } else { fw = 2; if(insertFunListItem(&name,enumerator,paramlist,fw,pc) != E_OK) return E_INTERN;} if(InsertEmptyItemTape() != E_OK) return E_INTERN; item = searchFunListN(&name); Tape->last->instruction = FUNC; //item->tape_ptr = Tape->last; if (!strCmpConstStr (&(T.s), "var")) { gettoken(); if ((error = localDecl()) != E_OK) return error; // deklarace lokalnich promennych } // printf("za local decl \n"); if (!strCmpConstStr (&(T.s), "begin")) { gettoken(); // printf("za bein \n"); if ((error = blockList()) != E_OK) return error; gettoken(); // printf("semicollon \n"); if ((error = testToken(T_SEMICOLON)) != E_OK) return error; return E_OK; } else return E_SYN; break; default: return E_SYN; } }