关于Basic程序解释器及编译原理的简单化(2)---C++封装好的Basic解释器(5) }
void CExecutable::Run(void){ for(int i=0;i<=m_tokens.size()-1;i++)//注意:i是个十分重要的读取指针 { if(m_tokens.at(i).token_type==COMMAND) { switch(m_tokens.at(i).tok) file://tok表示是什么命令 { case PRINT: Run_Print(&i); break; case DIM: Run_Dim(&i); break; default: break; } } file://赋值语句一定要在最后来判断,因为这样如果是if后的条件判断就可以在 file://前面的if命令中跳过 if(*m_tokens.at(i).token=='=') file://如果是赋值语句 Run_Assignment(&i); }}
void CExecutable::Run_Print(int *index) file://*index是m_tokens里的指针{ if(*index<m_tokens.size()-1) // 如果下面还有token { if(m_tokens.at((*index)+1).token_type==ENTER) file://如果接下来是命令 { printf("\n"); return; } (*index)++; int token_type=m_tokens.at(*index).token_type; if(Isvar(m_tokens.at(*index).token)) file://如果接下来是变量 token_type=VARIABLE; switch(token_type) { case QUOTE: file://如果是要打印字符串 { printf(m_tokens.at(*index).token); return; } case VARIABLE: file://打印代数式 type只要不是COMMAND就是可以当代数式处理 case NUMBER: case DELIMITER: {