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 {
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; } }
//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"); } }
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,"_", "_"); } }