|
关于Basic程序解释器及编译原理的简单化(2)---C++封装好的Basic解释器(7) if(!var_type) // 如果等号前面不是个变量 { serror(0); return; } switch(var_type) { case INTEGER: { int Var_No,value; if(!Ai_GetVarNo(m_tokens.at(*index-1).token,&Var_No,INTEGER)) break; (*index)++; if(!Ai_GetNextValue(&value,INTEGER,index)) break; m_intArray.at(Var_No).value=value; break; } default: break; } } int CExecutable::Ai_GetNextValue(void *result,int type,int *index) file://index指到代数式的第一个token { switch(type) { case INTEGER: get_exp((int*)result,index); return 1; default: return 0; } } int CExecutable::Ai_GetVarNo(char *name,int *result,int type) { switch(type) { case INTEGER: { if(m_intArray.size()==0) return 0; for(int i=0;i<=m_intArray.size()-1;i++) if(!strcmp(name,m_intArray.at(i).name)) *result=i; return 1; } default: return 0; } } void CExecutable::get_exp(int *result,int *index) { if (!*m_tokens.at(*index).token) { serror(2); return; } level2(result,index); } /* add or subtract two terms */ void CExecutable::level2(int *result,int *index)
|