⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.cpp

📁 CEL代码的中间编译
💻 CPP
字号:
// KEY.cpp: implementation of the KEY class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CREATOR.h"
#include "KEY.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

KEY::KEY()
{
 key[0].name="ADDB";
 key[0].opercode="0X0F";
 key[0].kind="02100+3";

 key[1].name="ADDN";
 key[1].opercode="0X1B";
 key[1].kind="02100+3";

 key[2].name="ADDW";
 key[2].opercode="0X13";
 key[2].kind="02200+3";

 key[3].name="ANDN";
 key[3].opercode="0X1D";
 key[3].kind="02100+3";

 key[4].name="BEQ";
 key[4].opercode="0X01";
 key[4].kind="11000+2";
 key[4].tag=1;

 key[5].name="BLT";
 key[5].opercode="0X01";
 key[5].kind="11000+2";
 key[5].tag=2;

 key[6].name="BLE";
 key[6].opercode="0X01";
 key[6].kind="11000+2";
 key[6].tag=3;

 key[7].name="BGT";
 key[7].opercode="0X01";
 key[7].kind="11000+2";
 key[7].tag=4;

 key[8].name="BGT";
 key[8].opercode="0X01";
 key[8].kind="11000+2";
 key[8].tag=5;

 key[9].name="BNE";
 key[9].opercode="0X01";
 key[9].kind="11000+2";
 key[9].tag=6;

 key[10].name="BRA";
 key[10].opercode="0X01";
 key[10].kind="11000+2";
 key[10].tag=7;

 key[11].name="CALL";
 key[11].opercode="0X03";
 key[11].kind="02000+2";


 key[12].name="CEQ";
 key[12].opercode="0X03";
 key[12].kind="12000+2";
 key[12].tag=1;

 key[13].name="CLT";
 key[13].opercode="0X03";
 key[13].kind="12000+2";
 key[13].tag=2;

 key[14].name="CLE";
 key[14].opercode="0X03";
 key[14].kind="12000+2";
 key[14].tag=3;

 key[15].name="CGT";
 key[15].opercode="0X03";
 key[15].kind="12000+2";
 key[15].tag=4;

 key[16].name="CGE";
 key[16].opercode="0X03";
 key[16].kind="12000+2";
 key[16].tag=5;

 key[17].name="CNE";
 key[17].opercode="0X03";
 key[17].kind="12000+2";
 key[17].tag=6;

 key[18].name="CLEAN";
 key[18].opercode="0X15";
 key[18].kind="02100+3";

 key[19].name="CMPB";
 key[19].opercode="0X0E";
 key[19].kind="02100+3";

 key[20].name="CMPN";
 key[20].opercode="0X1A";
 key[20].kind="02100+3";

 key[21].name="CMPW";
 key[21].opercode="0X12";
 key[21].kind="02200+3";

 key[22].name="DECN";
 key[22].opercode="0X18";
 key[22].kind="02100+3";

 key[23].name="INCN";
 key[23].opercode="0X17";
 key[23].kind="02100+3";

 key[24].name="INDEX";
 key[24].opercode="0X0C";
 key[24].kind="02100+3";

 key[25].name="JMP";
 key[25].opercode="0X02";
 key[25].kind="02000+2";

 key[26].name="JEQ";
 key[26].opercode="0X02";
 key[26].kind="12000+2";
 key[26].tag=1;

 key[27].name="JLT";
 key[27].opercode="0X02";
 key[27].kind="12000+2";
 key[27].tag=2;


 key[28].name="JLE";
 key[28].opercode="0X02";
 key[28].kind="12000+2";
 key[28].tag=3;

 key[29].name="JGT";
 key[29].opercode="0X02";
 key[29].kind="12000+2";
 key[29].tag=4;

 key[30].name="JGE";
 key[30].opercode="0X02";
 key[30].kind="12000+2";
 key[30].tag=5;

 key[31].name="JNE";
 key[31].opercode="0X02";
 key[31].kind="12000+2";
 key[31].tag=6;

 key[32].name="LOAD";
 key[32].opercode="0X07";
 key[32].kind="02100+3";

 key[33].name="LOADA";
 key[33].opercode="0X0B";
 key[33].kind="02000+2";

 key[34].name="LOADI";
 key[34].opercode="0X09";
 key[34].kind="02100+3";

 key[35].name="NOTN";
 key[35].opercode="0X19";
 key[35].kind="02100+3";

 key[36].name="ORN";
 key[36].opercode="0X1E";
 key[36].kind="02100+3";

 key[37].name="PRIM";
 key[37].opercode="0X05";
 key[37].kind="21111+?"; 

 key[38].name="SETB";
 key[38].opercode="0X0D";
 key[38].kind="02100+3";

 key[39].name="SETW";
 key[39].opercode="0X11";
 key[39].kind="02200+3";

 key[40].name="PUSHZ";
 key[40].opercode="0X04";
 key[40].kind="11000+2";
 key[40].tag=0;

 key[41].name="PUSHB";
 key[41].opercode="0X04";
 key[41].kind="11000+2";
 key[41].tag=1;

 key[42].name="PUSHW";
 key[42].opercode="0X04";
 key[42].kind="12000+2";
 key[42].tag=2;

 key[43].name="POPN";
 key[43].opercode="0X04";
 key[43].kind="11000+2";
 key[43].tag=4;

 key[44].name="POPB";
 key[44].opercode="0X04";
 key[44].kind="10000+1";
 key[44].tag=5;

 key[45].name="POPW";
 key[45].opercode="0x04";
 key[45].kind="10000+1";
 key[45].tag=6;

 key[46].name="STORE";
 key[46].opercode="0X08";
 key[46].kind="02100+3";

 key[47].name="STOREI";
 key[47].opercode="0X0A";
 key[47].kind="02100+3";

 key[48].name="SUBB";
 key[48].opercode="0X10";
 key[48].kind="02100+3";

 key[49].name="SUBN";
 key[49].opercode="0X1C";
 key[49].kind="02100+3";

 key[50].name="SUBW";
 key[50].opercode="0X14";
 key[50].kind="02200"+3;

 key[51].name="NOP";
 key[51].opercode="0X00";
 key[51].kind="10000+1";
 key[51].tag=0;

 key[52].name="SETSW";
 key[52].opercode="0x00";
 key[52].kind="11100+3";
 key[52].tag=1;

 key[53].name="SETLA";
 key[53].opercode="0x00";
 key[53].kind="11000+2";
 key[53].tag=2;

 key[54].name="SETSWLA";
 key[54].opercode="0x00";
 key[54].kind="11110+4";
 key[54].tag=3;

 key[55].name="EXIT";
 key[55].opercode="0X00";
 key[55].kind="10000+1";
 key[55].tag=4;

 key[56].name="EXITSW";
 key[56].opercode="0X00";
 key[56].kind="11100+3";
 key[56].tag=5;

 key[57].name="EXITLA";
 key[57].opercode="0X00";
 key[57].kind="11000+2";
 key[57].tag=6;

 key[58].name="EXITSWLA";
 key[58].opercode="0X00";
 key[58].kind="11111+5";
 key[58].tag=7;

 key[59].name="TESTN";
 key[59].opercode="0X16";
 key[59].kind="02100+3";
 

 key[60].name="XORN";
 key[60].opercode="0X1F";
 key[60].kind="02100+3";
}

KEY::~KEY()
{

}



int KEY::GetKEYn(CString skey)//返回key关键字对应的下标
{int i;
for(i=0;i<=59;i++)
 if(key[i].name==skey) break;
 return i;

}


int KEY::GetKEYWords(CString skey)//返回关键字对应的句子的应该有的单词数,包括关键字
{int i=GetKEYn(skey);
//查找结束
skey=key[i].kind.GetAt(key[i].kind.GetLength()-1);
return atoi(skey);
}


int KEY::GetBYTELength(CLine myLine)
{
	int s=0,i,iCount,ActiCount,n;//s为句子的字节数iCount 位的和,n为这个关键字对应的序号
    // iCount为应该的单词数,ActiCount 位实际的单词数	
    n=GetKEYn(myLine.DrawWord(1));
    iCount=GetKEYWords(myLine.DrawWord(1));
    for(i=1;i<5;i++) 
    s+=key[n].kind.GetAt(i)-'0';	
    ActiCount=myLine.GetiCount();
	if(iCount==ActiCount) return s+1;
	else return(1+s-key[n].kind.GetAt(1)+'0');
}


int KEY::GetBYTELength(CString string)
{CLine myline;
 myline.InputLine(string);
 return GetBYTELength(myline);

}



BOOL KEY::IsKeyword(CString word)
{int i=0;
 for(i=0;i<=60;i++)
	 if(key[i].name==word) return TRUE;
 return FALSE;

}

CString KEY::GetKeyOpercode(CString skey)//由关键字返回操作码
{for(int i=0;i<=59;i++)
{if(key[i].name==skey) return key[i].opercode;}
return "";
}

CString KEY::GetKeyOpercode(int n)//由关键字对应的下标返回操作码
{return key[n].opercode;
}

CString KEY::GetKeyKind(CString skey)//由关键字返回kind
{for(int i=0;i<=59;i++)
{if(key[i].name==skey) return key[i].kind;}
return "";
}

CString KEY::GetKeyKind(int n)//由下标返回kind
{return key[n].kind;

}





int KEY::GetKeyTag(int n)//由下标获得tag的值;
{return key[n].tag;

}


⌨️ 快捷键说明

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