scriptengine.cpp

来自「一个支持中文的类C语言编译器」· C++ 代码 · 共 1,952 行 · 第 1/5 页

CPP
1,952
字号
				}

				//如果有else子句
				TDim.InitTD();
				TDim=this->m_waWrdAnly.Getsym();//{
				if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
					MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
					if(m_waWrdAnly.m_pctrEdit){
						this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
						this->m_waWrdAnly.m_pctrEdit->SetFocus();
					}
					return ERRINPROCESS;
				}
				if(TDim.WdTp!=$LBP){
					MessageBox(NULL,"要求为{","错误",MB_OK|MB_ICONHAND);
					if(m_waWrdAnly.m_pctrEdit){
						this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
						this->m_waWrdAnly.m_pctrEdit->SetFocus();
					}
					return ERRINPROCESS;
				}//要求为{

				ptstr_end=this->m_waWrdAnly.m_pPtWd.pFst_word;//记录位置

				piPnt_end=this->m_waWrdAnly.m_pPtWd.piFst_word;//用于指示位置:else后{

				int lev_else=1;//置{的层次为1
				while(lev_else!=0||TDim.WdTp!=$RBP){
					if(*this->m_waWrdAnly.m_ptStr=='\000'){
						MessageBox(NULL,"找不到与之配对的}","错误",MB_OK|MB_ICONHAND);
						if(m_waWrdAnly.m_pctrEdit){
							this->m_waWrdAnly.m_pctrEdit->SetSel(piPnt_end,piPnt_end+1);
							this->m_waWrdAnly.m_pctrEdit->SetFocus();
						}
						return ERRINPROCESS;//直到文件尾找不到
					}
					
					TDim.InitTD();
					TDim=this->m_waWrdAnly.Getsym();
					if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
						MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
						if(m_waWrdAnly.m_pctrEdit){
							this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
							this->m_waWrdAnly.m_pctrEdit->SetFocus();
						}
						return ERRINPROCESS;
					}
					if(TDim.WdTp==$LBP){//查到{
						lev_else++;
					}
					else{
						if(TDim.WdTp==$RBP){//查到}
							lev_else--;
						}
					}
				}//至此,位置指针指向'}'后一字符,且越过了else{}中语句的检查与执行

				return SUCCESSFUL;
			}
			else{//条件不满足,执行else子句(如果else子句存在)
				//越过 if'{' '}' 对中语法检查与执行,寻找与之配对的下一'}'
				int lev_if=1;//置{的层次为1
				while(lev_if!=0||TDim.WdTp!=$RBP){
					if(*this->m_waWrdAnly.m_ptStr=='\000'){
						MessageBox(NULL,"找不到与之配对的}","错误",MB_OK|MB_ICONHAND);
						if(m_waWrdAnly.m_pctrEdit){
							this->m_waWrdAnly.m_pctrEdit->SetSel(piPointer,piPointer+1);
							this->m_waWrdAnly.m_pctrEdit->SetFocus();
						}
						return ERRINPROCESS;//直到文件尾找不到
					}
					
					TDim.InitTD();
					TDim=this->m_waWrdAnly.Getsym();
					if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
						MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
						if(m_waWrdAnly.m_pctrEdit){
							this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
							this->m_waWrdAnly.m_pctrEdit->SetFocus();
						}
						return ERRINPROCESS;
					}
					if(TDim.WdTp==$LBP){//查到{
						lev_if++;
					}
					else{
						if(TDim.WdTp==$RBP){//查到}
							lev_if--;
						}
					}
				}//至此,位置指针已指向if(){--'}'后一字符,且越过了{}中语句的检查与执行

				TDim.InitTD();
				TDim=this->m_waWrdAnly.Getsym();
				if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
					MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
					if(m_waWrdAnly.m_pctrEdit){
						this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
						this->m_waWrdAnly.m_pctrEdit->SetFocus();
					}
					return ERRINPROCESS;
				}
				if(TDim.WdTp!=$ELSE){//针对else的子句不存在
					this->m_waWrdAnly.BackWord();
					return SUCCESSFUL;
				}

				TDim.InitTD();
				TDim=this->m_waWrdAnly.Getsym();//{
				if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
					MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
					if(m_waWrdAnly.m_pctrEdit){
						this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
						this->m_waWrdAnly.m_pctrEdit->SetFocus();
					}
					return ERRINPROCESS;
				}
				if(TDim.WdTp!=$LBP){
					MessageBox(NULL,"else子句后要求为{","错误",MB_OK|MB_ICONHAND);
					if(m_waWrdAnly.m_pctrEdit){
						this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
						this->m_waWrdAnly.m_pctrEdit->SetFocus();	
					}
					return ERRINPROCESS;//else子句后要求为{
				}

				//提供对空语句的支持
				TDim.InitTD();
				TDim=this->m_waWrdAnly.Getsym();//}
				if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
					MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
					if(m_waWrdAnly.m_pctrEdit){
						this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
						this->m_waWrdAnly.m_pctrEdit->SetFocus();
					}
					return ERRINPROCESS;
				}
				if(TDim.WdTp==$RBP) return SUCCESSFUL;
				else this->m_waWrdAnly.BackWord();

				rT=Sentence();
				if(rT!=SUCCESSFUL){
					if(rT==NOTTHISKIND){
					MessageBox(	NULL,"无法识别的语句","错误",MB_OK|MB_ICONHAND);
					if(m_waWrdAnly.m_pctrEdit){
						this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
						this->m_waWrdAnly.m_pctrEdit->SetFocus();
					}
				}
					return ERRINPROCESS;
				}
				while(rT==SUCCESSFUL){
					rT=Sentence();

					//已到达文件尾
					if(*this->m_waWrdAnly.m_ptStr=='\000') break;
				}

				if(rT==ERRINPROCESS)return ERRINPROCESS;

				if(rT!=NOTTHISKIND){
					MessageBox(	NULL,"遇到非正常结束","错误",MB_OK|MB_ICONHAND);
					if(m_waWrdAnly.m_pctrEdit){
						this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
						this->m_waWrdAnly.m_pctrEdit->SetFocus();
					}
					return ERRINPROCESS;
				}

				TDim.InitTD();
				TDim=this->m_waWrdAnly.Getsym();
				if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
					MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
					if(m_waWrdAnly.m_pctrEdit){
						this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
						this->m_waWrdAnly.m_pctrEdit->SetFocus();
					}
					return ERRINPROCESS;
				}
				if(TDim.WdTp!=$RBP){
					MessageBox(NULL,"要求以'}'做结","错误",MB_OK|MB_ICONHAND);
					if(m_waWrdAnly.m_pctrEdit){
						this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
						this->m_waWrdAnly.m_pctrEdit->SetFocus();
					}
					return ERRINPROCESS;//要求以'}'做结
				}

				return SUCCESSFUL;
			}
		}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^开发环境
		else{
			//提供对空语句的支持
			TDim.InitTD();
			TDim=this->m_waWrdAnly.Getsym();//}
			if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
				MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
				if(m_waWrdAnly.m_pctrEdit){
					this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
					this->m_waWrdAnly.m_pctrEdit->SetFocus();
				}
				return ERRINPROCESS;
			}
			if(TDim.WdTp==$RBP){
				goto ELSE_DEV;//if(...){}空语句后是否有else
			}
			else{
				this->m_waWrdAnly.BackWord();
			}

			rT=Sentence();
			if(rT!=SUCCESSFUL){
				if(rT==NOTTHISKIND){
					MessageBox(	NULL,"无法识别的语句","错误",MB_OK|MB_ICONHAND);
					if(m_waWrdAnly.m_pctrEdit){
						this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
						this->m_waWrdAnly.m_pctrEdit->SetFocus();
					}
				}

				return ERRINPROCESS;
			}
			while(rT==SUCCESSFUL){
				rT=Sentence();

				//已到达文件尾
				if(*this->m_waWrdAnly.m_ptStr=='\000') break;
			}

			if(rT==ERRINPROCESS)return ERRINPROCESS;

			if(rT!=NOTTHISKIND){
				MessageBox(	NULL,"遇到非正常结束","错误",MB_OK|MB_ICONHAND);
				if(m_waWrdAnly.m_pctrEdit){
					this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
					this->m_waWrdAnly.m_pctrEdit->SetFocus();
				}
				return ERRINPROCESS;
			}

			TDim.InitTD();
			TDim=this->m_waWrdAnly.Getsym();
			if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
				MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
				if(m_waWrdAnly.m_pctrEdit){
					this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
					this->m_waWrdAnly.m_pctrEdit->SetFocus();
				}
				return ERRINPROCESS;
			}
			if(TDim.WdTp!=$RBP){
				MessageBox(NULL,"要求以'}'做结","错误",MB_OK|MB_ICONHAND);
				if(m_waWrdAnly.m_pctrEdit){
					this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
					this->m_waWrdAnly.m_pctrEdit->SetFocus();
				}
				return ERRINPROCESS;//要求以'}'做结
			}


ELSE_DEV:	//else判断
			TDim.InitTD();
			TDim=this->m_waWrdAnly.Getsym();
			if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
				MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
				if(m_waWrdAnly.m_pctrEdit){
					this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
					this->m_waWrdAnly.m_pctrEdit->SetFocus();
				}
				return ERRINPROCESS;
			}
			if(TDim.WdTp!=$ELSE){//针对else子句不存在
				this->m_waWrdAnly.BackWord();
				return SUCCESSFUL;
			}

			//如果有else子句
			TDim.InitTD();
			TDim=this->m_waWrdAnly.Getsym();//{
			if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
				MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
				if(m_waWrdAnly.m_pctrEdit){
					this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
					this->m_waWrdAnly.m_pctrEdit->SetFocus();
				}
				return ERRINPROCESS;
			}
			if(TDim.WdTp!=$LBP){
				MessageBox(NULL,"else子句后要求为{","错误",MB_OK|MB_ICONHAND);
				if(m_waWrdAnly.m_pctrEdit){
					this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
					this->m_waWrdAnly.m_pctrEdit->SetFocus();	
				}
				return ERRINPROCESS;//else子句后要求为{
			}

			//提供对空语句的支持
			TDim.InitTD();
			TDim=this->m_waWrdAnly.Getsym();//}
			if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
				MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
				if(m_waWrdAnly.m_pctrEdit){
					this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
					this->m_waWrdAnly.m_pctrEdit->SetFocus();
				}
				return ERRINPROCESS;
			}
			if(TDim.WdTp==$RBP) return SUCCESSFUL;
			else this->m_waWrdAnly.BackWord();

			rT=Sentence();
			if(rT!=SUCCESSFUL){
				if(rT==NOTTHISKIND){
					MessageBox(	NULL,"无法识别的语句","错误",MB_OK|MB_ICONHAND);
					if(m_waWrdAnly.m_pctrEdit){
						this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
						this->m_waWrdAnly.m_pctrEdit->SetFocus();
					}
				}

				return ERRINPROCESS;
			}
			while(rT==SUCCESSFUL){
				rT=Sentence();

				//已到达文件尾
				if(*this->m_waWrdAnly.m_ptStr=='\000') break;
			}

			if(rT==ERRINPROCESS)return ERRINPROCESS;

			if(rT!=NOTTHISKIND){
				MessageBox(	NULL,"遇到非正常结束","错误",MB_OK|MB_ICONHAND);
				if(m_waWrdAnly.m_pctrEdit){
					this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
					this->m_waWrdAnly.m_pctrEdit->SetFocus();
				}
				return ERRINPROCESS;
			}

			TDim.InitTD();
			TDim=this->m_waWrdAnly.Getsym();
			if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
				MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
				if(m_waWrdAnly.m_pctrEdit){
					this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
					this->m_waWrdAnly.m_pctrEdit->SetFocus();
				}
				return ERRINPROCESS;
			}
			if(TDim.WdTp!=$RBP){
				MessageBox(NULL,"要求以'}'做结","错误",MB_OK|MB_ICONHAND);
				if(m_waWrdAnly.m_pctrEdit){
					this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
					this->m_waWrdAnly.m_pctrEdit->SetFocus();
				}
				return ERRINPROCESS;//要求以'}'做结
			}

			return SUCCESSFUL;
		}
		break;
	case $WHILE://while
		TDim.InitTD();
		TDim=this->m_waWrdAnly.Getsym();
		if(TDim.WdTp==$ILLEGALWORD){//所有getsym()函数后均应该有下述语句
			MessageBox(NULL,"非法字符","错误",MB_OK|MB_ICONHAND);
			if(m_waWrdAnly.m_pctrEdit){
				this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
				this->m_waWrdAnly.m_pctrEdit->SetFocus();
			}
			return ERRINPROCESS;
		}
		if(TDim.WdTp!=$LPAR){
			MessageBox(NULL,"要求为左括号(","错误",MB_OK|MB_ICONHAND);
			if(m_waWrdAnly.m_pctrEdit){
				this->m_waWrdAnly.m_pctrEdit->SetSel(this->m_waWrdAnly.m_pPtWd.piFst_word,this->m_waWrdAnly.m_pPtWd.piLst_word+1);
				this->m_waWrdAnly.m_pctrEdit->SetFocus();
			}
			return ERRINPROCESS;////要求为左括号(
		}

		pts_while=this->m_waWrdAnly.m_ptStr;//复合条件首-> while(后
		pip_while=this->m_waWrdAnly.m_piPointer;//复合条件首-> while(后

L_WHILE:
		if(!DBCondition(conInfo

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?