Exemple #1
0
void if_stat(LIST *S, int level) {
	ATTR *B = (ATTR*)malloc(sizeof(ATTR));
	LIST *S1 = (LIST*)malloc(sizeof(LIST));
	LIST *TAIL = (LIST*)malloc(sizeof(LIST));
	LIST *list;
	int p1, p2;

	debug(level,"IF");
	if(token == TK_IF) {
		debug_lex();

		if(token == TK_LPAR) {
			debug_lex();

			condition(B, level+1);
			p1 = nextquad();

			if(token == TK_RPAR) {
				debug_lex();
				brack_or_stat(S1, level+1);
				list = makelist(int2string(nextquad()));
				genquad("jump", "_", "_", "_");
				p2 = nextquad();
				elsepart(TAIL, level+1);
				backpatch(B->true, int2string(p1));
				backpatch(B->false, int2string(p2));
				S->next = merge(S1->next, list);
				S->next = merge(S->next, TAIL->next);
			} else {
Exemple #2
0
void statement(LIST *S, int level) {
	LIST *list;
	ATTR *E = (ATTR*)malloc(sizeof(ATTR));
	debug(level,"STATEMENT");
	if(token == ID) {
		assignment_stat(S, level+1);
	} else if(token == TK_IF) {
		if_stat(S, level+1);
		backpatch(S, int2string(nextquad()));
	} else if(token == TK_DO) {
		while_stat(S, level+1);
		S->next = NULL;
	} else if(token == TK_EXIT) {
		exit_stat(level+1);
		list = makelist(int2string(nextquad()));
		list->exitflag = 1;
		genquad("jump", "_", "_", "_");
		S->next = merge(S->next, list);
	} else if(token == TK_RETURN) {
		return_stat(E, level+1);
		S->next = NULL;
	} else if(token == TK_PRINT) {
		print_stat(level+1);
		S->next = NULL;
	} else if(token == TK_CALL) {
		call_stat(level+1);
		S->next = NULL;
	} else {
		S->next = NULL;
	}
}
Exemple #3
0
//TIM1 Callback
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	//Handle TIM1 update for exposure control
	if (htim->Instance==TIM1){
	stopcounter();
	
	modulation_off(); 
	nextquad();
	
  }
	
	//Handle TIM8 update for quad offset correction
  if (htim->Instance==TIM8){
	quadcount = 0;	
	frameid++;	
	//printf("\nFrame Triggered");	
	}

}
Exemple #4
0
void block(char *name, int level) {
	LIST *S = (LIST*)malloc(sizeof(LIST));
    SYMBOL *tmp = NULL;
	/* initial block call */
	if(is_program_block == 1) {
		is_program_block = 0;

		if(token == TK_LBRAC) {
			debug(level,"BLOCK");
			push_scope(name);
			new_function(name, PROG);
			debug_lex(level+1);
			declerations(level+1);
			subprograms(level+1);
			
         	tmp = lookup(name);
         	tmp->func.genquad = qlabel;
			main_start_quad = qlabel;         
			
			genquad("begin_block", program_name, "_", "_");
			sequence(S, level+1);

			if(token == TK_RBRAC) {
				
				
				pop_scope();
				debug_lex();
			} else {
				/* syntax error lpar expected */
				syntax_error("a '}' expected");
			}
		} else {
			/* syntax error rpar expected */
			syntax_error("'{' expected");
		}
		backpatch(S->next, int2string(nextquad()));
		
		genquad("halt", "_", "_", "_");
		genquad("end_block", program_name, "_", "_");
		
		
	} else {

		if(token == TK_LBRAC) {
			debug(level,"BLOCK");
			
			debug_lex(level+1);

			declerations(level+1);
			subprograms(level+1);
            
            tmp = lookup(name);
            tmp->func.genquad = qlabel;

			genquad("begin_block", name, "_", "_");

            fprintf(stderr, "quad quad %s %d\n", tmp->name, tmp->func.genquad);
			
            sequence(S, level+1);
			
			if(token == TK_RBRAC) {
				
				if (!strcmp(assembly, "x86")) {
					generate_final_x86( program_name);
				} else {
					generate_final( program_name);
				}
				
				pop_scope();
				debug_lex();
			} else {
				/* syntax error lpar expected */
				syntax_error("a '}' expected");
			}
			
		} else {
			/* syntax error rpar expected */
			syntax_error("'{' expected");
		}
		backpatch(S->next, int2string(nextquad()));
		genquad("end_block", name,"_", "_");
	}
}