void lexanalysis(char *str) { int i=0; while(str[i]!='\0') { if(Isiden(str[i])) //for identifiers { while(Isiden(str[i])) { iden[idi][idj++]=str[i++]; } iden[idi][idj]='\0'; idi++;idj=0; } else if(str[i]=='"') //for literals { lit[l++]=str[i]; for(j=i+1;str[j]!='"';j++) { lit[l++]=str[j]; } lit[l++]=str[j];lit[l]='\0'; strcpy(litral[liti++],lit); i=j+1; } else if(Isop(str[i])) // for operators { while(Isop(str[i])) { oper[opi][opj++]=str[i++]; } oper[opi][opj]='\0'; opi++;opj=0; } else if(Isdel(str[i])) //for delemeters { while(Isdel(str[i])) { delem[deli++]=str[i++]; } } else { i++; } } removeduplicate(); final();
uint32_t expr(char *e, bool *success) { if(!make_token(e)) { *success = false; return 0; } /* TODO: Insert codes to evaluate the expression. */ int i; for(i=0;i<nr_token;i++) { if(tokens[i].type=='*' && (i==0 || Isop(i-1))) tokens[i].type=DEREF; } int p=0,q=nr_token-1; uint32_t result=eval(p,q); //printf("test 0x%2x\n",result); if(!reg_right) { *success=false; return 0; } if(!is_obj) { *success=false; return 0; } return result; }
void lexanalysis(char *str) { int i=0; while(str[i]!='\0') { if(Isiden(str[i])) //for identifiers { while(Isiden(str[i])) { iden[idi][idj++]=str[i++]; } iden[idi][idj]='\0'; idi++;idj=0; } else if(Isop(str[i])) // for operators { while(Isop(str[i])) { oper[opi][opj++]=str[i++]; } oper[opi][opj]='\0'; opi++;opj=0; } else if(Isdel(str[i])) //for delemeters { while(Isdel(str[i])) { delem[deli++]=str[i++]; }} else { i++; }} removeduplicate(); final();