📄 key.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 + -