scriptengine.cpp
来自「一个支持中文的类C语言编译器」· C++ 代码 · 共 1,952 行 · 第 1/5 页
CPP
1,952 行
}
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 false;
}
if(TDim.WdTp!=$RPAR){//)
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 false;
}
return true;
}
else{//不是以(开始的条件表达式
this->m_waWrdAnly.BackWord();
}
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 false;
}
if(TDim.WdTp==$NOT){//!
if(!this->Condition(blResult))return false;
blResult=!blResult;
return true;
}
this->m_waWrdAnly.BackWord();
L_EXP:
if(!this->Expression(exp1))return false;
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 false;
}
if(TDim.WdTp!=$DEQ&&TDim.WdTp!=$NEQ&&
TDim.WdTp!=$LOW&&TDim.WdTp!=$LOEQ&&
TDim.WdTp!=$LARGE&&TDim.WdTp!=$LAEQ){
this->m_waWrdAnly.BackWord();//仅有左表达式,多读了一个单词
temp_result=(exp1!=0);
if(temp_result==-1)return false;
blResult=temp_result;
return true;
}
if(!this->Expression(exp2))return false;
switch(TDim.WdTp)
{
case $DEQ://==
temp_result=(exp1==exp2);
if(temp_result==-1)return false;
blResult=temp_result;
break;
case $NEQ://!=
temp_result=(exp1!=exp2);
if(temp_result==-1)return false;
blResult=temp_result;
break;
case $LOW://<
temp_result=(exp1<exp2);
if(temp_result==-1)return false;
blResult=temp_result;
break;
case $LOEQ://<=
temp_result=(exp1<=exp2);
if(temp_result==-1)return false;
blResult=temp_result;
break;
case $LARGE://>
temp_result=(exp1>exp2);
if(temp_result==-1)return false;
blResult=temp_result;
break;
case $LAEQ://>=
temp_result=(exp1>=exp2);
if(temp_result==-1)return false;
blResult=temp_result;
break;
default:
return false;
}
return true;
}
bool CScriptEngine::DBCondition(bool &blResult)
{
CTwoDim TDim;
bool bRl=false,bRr=false;//用于 条件&&条件 中两个条件的返回值
if(!this->Condition(bRl))return false;
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 false;
}
if(TDim.WdTp!=$DAND&&TDim.WdTp!=$DOR){//单条件表达式
this->m_waWrdAnly.BackWord();
blResult=bRl;
return true;
}
//复合条件表达式
if(!this->Condition(bRr))return false;
switch(TDim.WdTp)
{
case $DAND:
blResult=bRl&&bRr;
break;
case $DOR:
blResult=bRl||bRr;
break;
default:
return false;
}
return true;
}
ReturnType CScriptEngine::Sentence()
{
// CVarDef* parray_cvardef=NULL;//????????????????????????
int i_array,id_property;
VarType varT;
IdentType idenT;
ReturnType rT;//返回类型
bool conInfo;//记录条件表达式运算结果
COpData expInfo,opd;//记录表达式信息
CTwoDim TDim;
PTSTR ptStr,ptstr_end,pts_while,pts_end;//记录中间位置
int piPointer,piPnt_end,pip_while,pip_end;//记录中间位置
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;
}
switch(TDim.WdTp)
{
case $LBP://{
//提供对空语句的支持
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 $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!=$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;////要求为左括号(
}
if(!DBCondition(conInfo)) 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!=$RPAR){
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!=$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=this->m_waWrdAnly.m_pPtWd.pFst_word;//记录中间位置
piPointer=this->m_waWrdAnly.m_pPtWd.piFst_word;//if(---){ 中的{位置
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if(this->m_bIsInRunEnvir){//运行环境
if(conInfo){//条件表达式为真时,执行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==$RBP) goto ELSE_RUN;
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子句++++++++++++++++++++++++++++++++++
ELSE_RUN:
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;//ERRINPROCESS;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?