コード例 #1
0
ファイル: parser.c プロジェクト: strajky5/IFJproject
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;
}
コード例 #2
0
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;
}
コード例 #3
0
ファイル: RecordOutputMgr.cpp プロジェクト: ernfrid/bedtools2
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;
}
コード例 #4
0
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);

}
コード例 #5
0
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;
}
コード例 #6
0
ファイル: jacobi_hpx.cpp プロジェクト: kempj/hpxMP
    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);
   }
コード例 #7
0
ファイル: parser.c プロジェクト: strajky5/IFJproject
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;
}
コード例 #8
0
ファイル: parser.c プロジェクト: strajky5/IFJproject
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;

}
コード例 #9
0
ファイル: parser.c プロジェクト: strajky5/IFJproject
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;
	}
}