sharehead.cpp
来自「一个支持中文的类C语言编译器」· C++ 代码 · 共 856 行 · 第 1/2 页
CPP
856 行
#include "stdafx.h"
#include "ShareHead.h"
COpData& COpData::operator =(const COpData &opd)
{
switch(this->VarTp)
{
case $INT:
switch(opd.VarTp)
{
case $INT:
this->VarVlue.intconst=opd.VarVlue.intconst;
this->VarTp=$INT;
break;
case $REAL:
this->VarVlue.dbconst=opd.VarVlue.dbconst;
this->VarTp=$REAL;
break;
case $BOOL:
this->VarVlue.intconst=opd.VarVlue.intconst;
this->VarTp=$INT;
break;
case $STRING:
this->VarTp=$INVALID;
break;
case $INVALID:
default:
this->VarTp=$INVALID;
break;
}
break;
case $REAL:
switch(opd.VarTp)
{
case $INT:
this->VarVlue.dbconst=opd.VarVlue.intconst;
this->VarTp=$REAL;
break;
case $REAL:
this->VarVlue.dbconst=opd.VarVlue.dbconst;
this->VarTp=$REAL;
break;
case $BOOL:
this->VarVlue.dbconst=opd.VarVlue.intconst;
this->VarTp=$INT;
break;
case $STRING:
this->VarTp=$INVALID;
break;
case $INVALID:
default:
this->VarTp=$INVALID;
break;
}
break;
case $BOOL:
switch(opd.VarTp)
{
case $INT:
this->VarVlue.intconst=opd.VarVlue.intconst;
this->VarTp=$BOOL;
break;
case $REAL:
if(opd.VarVlue.dbconst){
this->VarVlue.intconst=1;
}
else{
this->VarVlue.intconst=0;
}
this->VarTp=$BOOL;
break;
case $BOOL:
this->VarVlue.intconst=opd.VarVlue.intconst;
this->VarTp=$BOOL;
break;
case $STRING:
this->VarTp=$INVALID;
break;
case $INVALID:
default:
this->VarTp=$INVALID;
break;
}
break;
case $STRING:
switch(opd.VarTp)
{
case $STRING:
this->VarTp=$STRING;
strcpy(this->VarVlue.SignOrString,opd.VarVlue.SignOrString);
break;
case $INT:
case $REAL:
case $BOOL:
case $INVALID:
default:
this->VarTp=$INVALID;
break;
}
break;
default:
this->VarTp=$INVALID;
}
return *this;
}
//----------------------------------------"+"-----------------------------------------------------------
COpData operator +(const COpData &opd1,const COpData &opd2)
{
COpData result;
switch(opd1.VarTp)
{
case $INT:
switch(opd2.VarTp)
{
case $INT:
return COpData(opd1.VarVlue.intconst+opd2.VarVlue.intconst);
case $REAL:
return COpData((double)(opd1.VarVlue.intconst+opd2.VarVlue.dbconst));
case $BOOL:
return COpData((int)(opd1.VarVlue.intconst+(bool)opd2.VarVlue.intconst));
case $STRING:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
case $REAL:
switch(opd2.VarTp)
{
case $INT:
return COpData((double)(opd1.VarVlue.dbconst+opd2.VarVlue.intconst));
case $REAL:
return COpData((double)(opd1.VarVlue.dbconst+opd2.VarVlue.dbconst));
case $BOOL:
return COpData((double)(opd1.VarVlue.dbconst+(bool)opd2.VarVlue.intconst));
case $STRING:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
case $BOOL:
switch(opd2.VarTp)
{
case $INT:
return COpData((int)((bool)opd1.VarVlue.intconst+opd2.VarVlue.intconst));
case $REAL:
return COpData((double)((bool)opd1.VarVlue.intconst+opd2.VarVlue.dbconst));
case $BOOL:
return COpData((bool)((bool)opd1.VarVlue.intconst+(bool)opd2.VarVlue.intconst));
case $STRING:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
case $STRING:
switch(opd2.VarTp)
{
case $STRING:
strcpy(result.VarVlue.SignOrString,opd1.VarVlue.SignOrString);
strcpy(result.VarVlue.SignOrString,opd2.VarVlue.SignOrString);
return result;
case $INT:
case $REAL:
case $BOOL:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
default:
result.VarTp=$INVALID;
return result;
}
}
//---------------------------"-"------------------------------------------------------
COpData operator -(const COpData &opd1,const COpData &opd2)
{
COpData result;
switch(opd1.VarTp)
{
case $INT:
switch(opd2.VarTp)
{
case $INT:
return COpData(opd1.VarVlue.intconst-opd2.VarVlue.intconst);
case $REAL:
return COpData((double)(opd1.VarVlue.intconst-opd2.VarVlue.dbconst));
case $BOOL:
return COpData((int)(opd1.VarVlue.intconst-(bool)opd2.VarVlue.intconst));
case $STRING:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
case $REAL:
switch(opd2.VarTp)
{
case $INT:
return COpData((double)(opd1.VarVlue.dbconst-opd2.VarVlue.intconst));
case $REAL:
return COpData((double)(opd1.VarVlue.dbconst-opd2.VarVlue.dbconst));
case $BOOL:
return COpData((double)(opd1.VarVlue.dbconst-(bool)opd2.VarVlue.intconst));
case $STRING:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
case $BOOL:
switch(opd2.VarTp)
{
case $INT:
return COpData((int)((bool)opd1.VarVlue.intconst-opd2.VarVlue.intconst));
case $REAL:
return COpData((double)((bool)opd1.VarVlue.intconst-opd2.VarVlue.dbconst));
case $BOOL:
return COpData((bool)((bool)opd1.VarVlue.intconst-(bool)opd2.VarVlue.intconst));
case $STRING:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
case $STRING:
default:
result.VarTp=$INVALID;
return result;
}
}
//--------------------------------"*"--------------------------------------------------------------
COpData operator *(const COpData &opd1,const COpData &opd2)
{
COpData result;
switch(opd1.VarTp)
{
case $INT:
switch(opd2.VarTp)
{
case $INT:
return COpData(opd1.VarVlue.intconst*opd2.VarVlue.intconst);
case $REAL:
return COpData((double)(opd1.VarVlue.intconst*opd2.VarVlue.dbconst));
case $BOOL:
return COpData((int)(opd1.VarVlue.intconst*(bool)opd2.VarVlue.intconst));
case $STRING:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
case $REAL:
switch(opd2.VarTp)
{
case $INT:
return COpData((double)(opd1.VarVlue.dbconst*opd2.VarVlue.intconst));
case $REAL:
return COpData((double)(opd1.VarVlue.dbconst*opd2.VarVlue.dbconst));
case $BOOL:
return COpData((double)(opd1.VarVlue.dbconst*(bool)opd2.VarVlue.intconst));
case $STRING:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
case $BOOL:
switch(opd2.VarTp)
{
case $INT:
return COpData((int)((bool)opd1.VarVlue.intconst*opd2.VarVlue.intconst));
case $REAL:
return COpData((double)((bool)opd1.VarVlue.intconst*opd2.VarVlue.dbconst));
case $BOOL:
return COpData((bool)((bool)opd1.VarVlue.intconst*(bool)opd2.VarVlue.intconst));
case $STRING:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
case $STRING:
default:
result.VarTp=$INVALID;
return result;
}
}
//-------------------------"/"-------------------------------------------------------------------
COpData operator /(const COpData &opd1,const COpData &opd2)
{
COpData result;
switch(opd1.VarTp)
{
case $INT:
switch(opd2.VarTp)
{
case $INT:
return COpData(opd1.VarVlue.intconst/opd2.VarVlue.intconst);
case $REAL:
return COpData((double)(opd1.VarVlue.intconst/opd2.VarVlue.dbconst));
case $BOOL:
return COpData((int)(opd1.VarVlue.intconst/(bool)opd2.VarVlue.intconst));
case $STRING:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
case $REAL:
switch(opd2.VarTp)
{
case $INT:
return COpData((double)(opd1.VarVlue.dbconst/opd2.VarVlue.intconst));
case $REAL:
return COpData((double)(opd1.VarVlue.dbconst/opd2.VarVlue.dbconst));
case $BOOL:
return COpData((double)(opd1.VarVlue.dbconst/(bool)opd2.VarVlue.intconst));
case $STRING:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
case $BOOL:
switch(opd2.VarTp)
{
case $INT:
return COpData((int)((bool)opd1.VarVlue.intconst/opd2.VarVlue.intconst));
case $REAL:
return COpData((double)((bool)opd1.VarVlue.intconst/opd2.VarVlue.dbconst));
case $BOOL:
return COpData((bool)((bool)opd1.VarVlue.intconst/(bool)opd2.VarVlue.intconst));
case $STRING:
case $INVALID:
default:
result.VarTp=$INVALID;
return result;
}
break;
case $STRING:
default:
result.VarTp=$INVALID;
return result;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
//------------------------------------------"=="--------------------------------------------------------------
BOOL operator ==(const COpData &opd1,const COpData &opd2)
{
switch(opd1.VarTp)
{
case $INT:
switch(opd2.VarTp)
{
case $INT:
return(bool)(opd1.VarVlue.intconst==opd2.VarVlue.intconst);
case $REAL:
return(bool)(opd1.VarVlue.intconst==opd2.VarVlue.dbconst);
case $BOOL:
return(bool)(opd1.VarVlue.intconst==(bool)opd2.VarVlue.intconst);
case $STRING:
case $INVALID:
return -1;
default:
return-1;
}
break;
case $REAL:
switch(opd2.VarTp)
{
case $INT:
return(bool)(opd1.VarVlue.dbconst==opd2.VarVlue.intconst);
case $REAL:
return(bool)(opd1.VarVlue.dbconst==opd2.VarVlue.dbconst);
case $BOOL:
return(bool)(opd1.VarVlue.dbconst==(bool)opd2.VarVlue.intconst);
case $STRING:
case $INVALID:
return -1;
default:
return-1;
}
break;
case $BOOL:
switch(opd2.VarTp)
{
case $INT:
return(bool)((bool)opd1.VarVlue.intconst==opd2.VarVlue.intconst);
case $REAL:
return(bool)((bool)opd1.VarVlue.intconst==opd2.VarVlue.dbconst);
case $BOOL:
return(bool)((bool)opd1.VarVlue.intconst==(bool)opd2.VarVlue.intconst);
case $STRING:
case $INVALID:
return -1;
default:
return-1;
}
break;
case $STRING:
switch(opd2.VarTp)
{
case $STRING:
return (bool)!strcmp(opd1.VarVlue.SignOrString,opd2.VarVlue.SignOrString);
case $INT:
case $REAL:
case $BOOL:
case $INVALID:
return -1;
default:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?