📄 privatefuncs.cpp
字号:
break;
case 30:
retv[0] = retv[1] = retv[2] = retv[3] = '1';
break;
case 31:
retv[0] = retv[1] = retv[2] = retv[3] = retv[4] = '1';
break;
default:
break;
}
return retv;
}
char* Assembler::HexToBin( char c ) //将一位十六进制数转化为二进制填入一个4bits的字符串中
{
static char retv[5] = {'0','0','0','0','\0'};
for ( int j = 0; j < 5-1; j++ )
retv[j] = '0';
switch ( c )
{
case '0':
break;
case '1':
retv[3] = '1';
break;
case '2':
retv[2] = '1';
break;
case '3':
retv[2] = retv[3] = '1';
break;
case '4':
retv[1] = '1';
break;
case '5':
retv[1] = retv[3] = '1';
break;
case '6':
retv[1] = retv[2] = '1';
break;
case '7':
retv[1] = retv[2] = retv[3] = '1';
break;
case '8':
retv[0] = '1';
break;
case '9':
retv[0] = retv[3] = '1';
break;
case 'a':
case 'A':
retv[0] = retv[2] = '1';
break;
case 'b':
case 'B':
retv[0] = retv[2] = retv[3] = '1';
break;
case 'c':
case 'C':
retv[0] = retv[1] = '1';
break;
case 'd':
case 'D':
retv[0] = retv[1] = retv[3] = '1';
break;
case 'e':
case 'E':
retv[0] = retv[1] = retv[2] = '1';
break;
case 'f':
case 'F':
retv[0] = retv[1] = retv[2] = retv[3] = '1';
break;
default:
break;
}
return retv;
}
int Assembler::AddrToInt( char* cs ) //将由四位十六进制的ADDR转化为十进制,使得用ORG设置指令(数据)地址时方便
{
int retv = 0;
for ( int k = 0; k < 4; k++ ) //注意地址是四位哦,四位
{
switch ( cs[k] )
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
retv += (cs[k]-48)*pow(16, 3-k);
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
retv += (cs[k]-87)*pow(16, 3-k);
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
retv += (cs[k]-55)*pow(16, 3-k);
break;
default:
break;
}
}
return retv;
}
void Assembler::InitTwoTables()
{
/********************Initialize the ForcastTable************************/
for ( int m = 0, n = 0; m < CountOfVN, n < CountOfVT; m++, n++ )
ForcastTable[m][n] = 0;
ForcastTable[N_PRO-30][T_DATA] = 1;
ForcastTable[N_PRO-30][T_CODE] = 1;
ForcastTable[N_DATA-30][T_DATA] = 2;
ForcastTable[N_DATA-30][T_CODE] = 3;
ForcastTable[N_DATASEG-30][T_DATA] = 4;
ForcastTable[N_ORG_DATA-30][T_ORG_DATA] = 5;
ForcastTable[N_VARS-30][T_IDNAME] = 6;
ForcastTable[N_VARSA-30][T_DATA] = 8;
ForcastTable[N_VARSA-30][T_IDNAME] = 7;
ForcastTable[N_VAR-30][T_IDNAME] = 9;
ForcastTable[N_DATAENDS-30][T_DATA] = 10;
ForcastTable[N_CODE-30][T_CODE] = 11;
ForcastTable[N_CODESEG-30][T_CODE] = 12;
ForcastTable[N_ORG_CODE-30][T_ORG_CODE] = 13;
ForcastTable[N_SEG-30][T_IDNAME] = 14;
ForcastTable[N_STARTSEGID-30][T_IDNAME] = 15;
ForcastTable[N_ORDER-30][T_RCOM] = 16;
ForcastTable[N_ORDER-30][T_SRCOM] = 16;
ForcastTable[N_ORDER-30][T_SLLRCOM] = 16;
ForcastTable[N_ORDER-30][T_ICOM] = 16;
ForcastTable[N_ORDER-30][T_SICOM] = 16;
ForcastTable[N_ORDER-30][T_LWICOM] = 16;
ForcastTable[N_ORDER-30][T_JCOM] = 16;
ForcastTable[N_ORDER-30][T_NOP] = 16;
ForcastTable[N_ORDER-30][T_ORG_CODE] = 31;
ForcastTable[N_COM-30][T_RCOM] = 17;
ForcastTable[N_COM-30][T_SRCOM] = 18;
ForcastTable[N_COM-30][T_SLLRCOM] = 19;
ForcastTable[N_COM-30][T_ICOM] = 20;
ForcastTable[N_COM-30][T_SICOM] = 21;
ForcastTable[N_COM-30][T_LWICOM] = 22;
ForcastTable[N_COM-30][T_JCOM] = 23;
ForcastTable[N_COM-30][T_NOP] = 30;
ForcastTable[N_ORDERS-30][T_IDNAME] = 26;
ForcastTable[N_ORDERS-30][T_ORG_CODE] = 24;
ForcastTable[N_ORDERS-30][T_RCOM] = 24;
ForcastTable[N_ORDERS-30][T_SRCOM] = 24;
ForcastTable[N_ORDERS-30][T_SLLRCOM] = 24;
ForcastTable[N_ORDERS-30][T_ICOM] = 24;
ForcastTable[N_ORDERS-30][T_SICOM] = 24;
ForcastTable[N_ORDERS-30][T_LWICOM] = 24;
ForcastTable[N_ORDERS-30][T_JCOM] = 24;
ForcastTable[N_ORDERS-30][T_END] = 25;
ForcastTable[N_ORDERS-30][T_NOP] = 24;
ForcastTable[N_SUBSEGID-30][T_IDNAME] = 27;
ForcastTable[N_ENDSEGID-30][T_END] = 28;
ForcastTable[N_CODEENDS-30][T_CODE] = 29;
ForcastTable[N_COMQ-30][T_ICOM] = 34;
ForcastTable[N_COMQA-30][T_IMMEDIATE] = 35;
ForcastTable[N_COMQA-30][T_IDNAME] = 36;
ForcastTable[N_COMD-30][T_LWICOM] = 32;
ForcastTable[N_COMDA-30][T_ADDR] = 37;
ForcastTable[N_COMDA-30][T_IDNAME] = 33;
ForcastTable[N_COMDB-30][T_IDNAME] = 38;
ForcastTable[N_COMDC-30][T_BRS] = 40;
ForcastTable[N_COMDC-30][T_PLUS] = 39;
ForcastTable[N_COMJA-30][T_JCOM] = 41;
ForcastTable[N_COMJB-30][T_IDNAME] = 42;
ForcastTable[N_COMJB-30][T_ADDR] = 43;
/********************Initialize the SyntacticRules************************/
// RULE 1: <N_PRO> -> <N_DATA><N_CODE>
SyntacticRules[1][0] = N_CODE;
SyntacticRules[1][1] = N_DATA;
SyntacticRules[1][2] = 0;
// RULE 2: <N_DATA> -> <N_DATA SEG><N_ORG_DATA><N_VARS><N_DATA ENDS>
SyntacticRules[2][0] = N_DATAENDS;
SyntacticRules[2][1] = N_VARS;
SyntacticRules[2][2] = N_ORG_DATA;
SyntacticRules[2][3] = N_DATASEG;
SyntacticRules[2][4] = 0;
// RULE 3: <N_DATA> -> NOTHING
SyntacticRules[3][0] = 0;
// RULE 4: <N_DATA SEG> -> {T_DATA}{T_SEG}{T_ENDL}
SyntacticRules[4][0] = T_ENDL;
SyntacticRules[4][1] = T_SEG;
SyntacticRules[4][2] = T_DATA;
SyntacticRules[4][3] = 0;
// RULE 5: <N_ORG_DATA> -> {T_ORG_DATA}{T_ADDR}{T_ENDL}
SyntacticRules[5][0] = T_ENDL;
SyntacticRules[5][1] = T_ADDR;
SyntacticRules[5][2] = T_ORG_DATA;
SyntacticRules[5][3] = 0;
// RULE 6: <N_VARS> -> <N_VAR><N_VARS>'
SyntacticRules[6][0] = N_VARSA;
SyntacticRules[6][1] = N_VAR;
SyntacticRules[6][2] = 0;
// RULE 7: <N_VARS>' -> <N_VARS>
SyntacticRules[7][0] = N_VARS;
SyntacticRules[7][1] = 0;
// RULE 8: <N_VARS>' -> NOTHING
SyntacticRules[8][0] = 0;
// RULE 9: <N_VAR> -> {T_IDNAME}{T_DW}{T_32NUM}{T_COMMA}{T_32NUM}{T_ENDL}
SyntacticRules[9][0] = T_ENDL;
SyntacticRules[9][1] = T_32NUM;
SyntacticRules[9][2] = T_COMMA;
SyntacticRules[9][3] = T_32NUM;
SyntacticRules[9][4] = T_DW;
SyntacticRules[9][5] = T_IDNAME;
SyntacticRules[9][6] = 0;
// RULE 10: <N_DATA ENDS> -> {T_DATA}{T_ENDS}{T_ENDL}
SyntacticRules[10][0] = T_ENDL;
SyntacticRules[10][1] = T_ENDS;
SyntacticRules[10][2] = T_DATA;
SyntacticRules[10][3] = 0;
// RULE 11: <N_CODE> -> <N_CODE SEG><N_ORG_CODE><N_SEG><N_CODE ENDS>
SyntacticRules[11][0] = N_CODEENDS;
SyntacticRules[11][1] = N_SEG;
SyntacticRules[11][2] = N_ORG_CODE;
SyntacticRules[11][3] = N_CODESEG;
SyntacticRules[11][4] = 0;
// RULE 12: <N_CODE SEG> -> {T_CODE}{T_SEG}{T_ENDL}
SyntacticRules[12][0] = T_ENDL;
SyntacticRules[12][1] = T_SEG;
SyntacticRules[12][2] = T_CODE;
SyntacticRules[12][3] = 0;
// RULE 13: <N_ORG_CODE> -> {T_ORG_CODE}{T_ADDR}{T_ENDL}
SyntacticRules[13][0] = T_ENDL;
SyntacticRules[13][1] = T_ADDR;
SyntacticRules[13][2] = T_ORG_CODE;
SyntacticRules[13][3] = 0;
// RULE 14: <N_SEG> -> <N_START SEGID><N_ORDER><N_ORDERS><N_ENDSEGID>
SyntacticRules[14][0] = N_ENDSEGID;
SyntacticRules[14][1] = N_ORDERS;
SyntacticRules[14][2] = N_ORDER;
SyntacticRules[14][3] = N_STARTSEGID;
SyntacticRules[14][4] = 0;
// RULE 15: <N_START SEGID> -> {T_IDNAME}{T_COLON}
SyntacticRules[15][0] = T_COLON;
SyntacticRules[15][1] = T_IDNAME;
SyntacticRules[15][2] = 0;
// RULE 16: <N_ORDER> -> <N_COM>{T_ENDL}
SyntacticRules[16][0] = T_ENDL;
SyntacticRules[16][1] = N_COM;
SyntacticRules[16][2] = 0;
// RULE 17: <N_COM> -> {T_RCOM}{T_RD}{T_COMMA}{T_RS}{T_COMMA}{T_RT}
SyntacticRules[17][0] = T_RT;
SyntacticRules[17][1] = T_COMMA;
SyntacticRules[17][2] = T_RS;
SyntacticRules[17][3] = T_COMMA;
SyntacticRules[17][4] = T_RD;
SyntacticRules[17][5] = T_RCOM;
SyntacticRules[17][6] = 0;
// RULE 18: <N_COM> -> {T_SRCOM}{T_RS}
SyntacticRules[18][0] = T_RS;
SyntacticRules[18][1] = T_SRCOM;
SyntacticRules[18][2] = 0;
// RULE 19: <N_COM> -> {T_SLLRCOM}{T_RD}{T_COMMA}{T_RT}{T_COMMA}{T_SHAMT}
SyntacticRules[19][0] = T_SHAMT;
SyntacticRules[19][1] = T_COMMA;
SyntacticRules[19][2] = T_RT;
SyntacticRules[19][3] = T_COMMA;
SyntacticRules[19][4] = T_RD;
SyntacticRules[19][5] = T_SLLRCOM;
SyntacticRules[19][6] = 0;
/* // RULE 20: <N_COM> -> {T_ICOM}{T_RT}{T_COMMA}{T_RS}{T_COMMA}{T_IMMEDIATE}
SyntacticRules[20][0] = T_IMMEDIATE;
SyntacticRules[20][1] = T_COMMA;
SyntacticRules[20][2] = T_RS;
SyntacticRules[20][3] = T_COMMA;
SyntacticRules[20][4] = T_RT;
SyntacticRules[20][5] = T_ICOM;
SyntacticRules[20][6] = 0;
*/
// RULE 20: <N_COM> -> <N_COMQ><N_COMQA>
SyntacticRules[20][0] = N_COMQA;
SyntacticRules[20][1] = N_COMQ;
SyntacticRules[20][2] = 0;
// RULE 21: <N_COM> -> {T_SICOM}{T_RT}{T_COMMA}{T_IMMEDIATE}
SyntacticRules[21][0] = T_IMMEDIATE;
SyntacticRules[21][1] = T_COMMA;
SyntacticRules[21][2] = T_RT;
SyntacticRules[21][3] = T_SICOM;
SyntacticRules[21][4] = 0;
/* // RULE 22: <N_COM> -> {T_LWICOM}{T_RT}{T_COMMA}{T_ADDR}{T_BRS}
SyntacticRules[22][0] = T_BRS;
SyntacticRules[22][1] = T_ADDR;
SyntacticRules[22][2] = T_COMMA;
SyntacticRules[22][3] = T_RT;
SyntacticRules[22][4] = T_LWICOM;
SyntacticRules[22][5] = 0;
*/
// RULE 22: <N_COM> -> <N_COMD><N_COMDA>
SyntacticRules[22][0] = N_COMDA;
SyntacticRules[22][1] = N_COMD;
SyntacticRules[22][2] = 0;
/* // RULE 23: <N_COM> -> {T_JCOM}{T_IDNAME}
SyntacticRules[23][0] = T_IDNAME;
SyntacticRules[23][1] = T_JCOM;
SyntacticRules[23][2] = 0;
*/
// RULE 23: <N_COM> -> <N_COMJA><N_COMJB>
SyntacticRules[23][0] = N_COMJB;
SyntacticRules[23][1] = N_COMJA;
SyntacticRules[23][2] = 0;
// RULE 24: <N_ORDERS> -> <N_ORDER><N_ORDERS>
SyntacticRules[24][0] = N_ORDERS;
SyntacticRules[24][1] = N_ORDER;
SyntacticRules[24][2] = 0;
// RULE 25: <N_ORDERS> -> NOTHING
SyntacticRules[25][0] = 0;
// RULE 26: <N_ORDERS> -> <N_SUBSEGID><N_ORDER><N_ORDERS>
SyntacticRules[26][0] = N_ORDERS;
SyntacticRules[26][1] = N_ORDER;
SyntacticRules[26][2] = N_SUBSEGID;
SyntacticRules[26][3] = 0;
// RULE 27: <N_SUBSEGID> -> {T_IDNAME}{T_COLON}
SyntacticRules[27][0] = T_COLON;
SyntacticRules[27][1] = T_IDNAME;
SyntacticRules[27][2] = 0;
// RULE 28: <N_ENDSEGID> -> {T_END}{T_IDNAME}{T_ENDL}
SyntacticRules[28][0] = T_ENDL;
SyntacticRules[28][1] = T_IDNAME;
SyntacticRules[28][2] = T_END;
SyntacticRules[28][3] = 0;
// RULE 29: <N_CODE ENDS> -> {T_CODE}{T_ENDS}{T_ENDL}
SyntacticRules[29][0] = T_ENDL;
SyntacticRules[29][1] = T_ENDS;
SyntacticRules[29][2] = T_CODE;
SyntacticRules[29][3] = 0;
// RULE 30: <N_COM> -> {T_NOP}
SyntacticRules[30][0] = T_NOP;
SyntacticRules[30][1] = 0;
// RULE 31: <N_ORDER> -> <N_ORG_CODE>
SyntacticRules[31][0] = N_ORG_CODE;
SyntacticRules[31][1] = 0;
/* // RULE 32: <N_COM> -> {T_LWICOM}{T_RT}{T_COMMA}{T_IDNAME}{T_PLUS}{T_IMMEDIATE}{T_BRS}
SyntacticRules[32][0] = T_BRS;
SyntacticRules[32][1] = T_IMMEDIATE;
SyntacticRules[32][2] = T_PLUS;
SyntacticRules[32][3] = T_IDNAME;
SyntacticRules[32][4] = T_COMMA;
SyntacticRules[32][5] = T_RT;
SyntacticRules[32][6] = T_LWICOM;
SyntacticRules[32][7] = 0;
// RULE 33: <N_COM> -> {T_LWICOM}{T_RT}{T_COMMA}{T_IDNAME}{T_BRS}
SyntacticRules[33][0] = T_BRS;
SyntacticRules[33][1] = T_IDNAME;
SyntacticRules[33][2] = T_COMMA;
SyntacticRules[33][3] = T_RT;
SyntacticRules[33][4] = T_LWICOM;
SyntacticRules[33][5] = 0;
// RULE 34: <N_COM> -> {T_ICOM}{T_RT}{T_COMMA}{T_RS}{T_COMMA}{T_IDNAME}
SyntacticRules[34][0] = T_IDNAME;
SyntacticRules[34][1] = T_COMMA;
SyntacticRules[34][2] = T_RS;
SyntacticRules[34][3] = T_COMMA;
SyntacticRules[34][4] = T_RT;
SyntacticRules[34][5] = T_ICOM;
SyntacticRules[34][6] = 0;
*/
// RULE 32: <N_COMD> -> {T_LWICOM}{T_RT}{T_COMMA}
SyntacticRules[32][0] = T_COMMA;
SyntacticRules[32][1] = T_RT;
SyntacticRules[32][2] = T_LWICOM;
SyntacticRules[32][3] = 0;
// RULE 33: <N_COMDA> -> <N_COMDB><N_COMDC>
SyntacticRules[33][0] = N_COMDC;
SyntacticRules[33][1] = N_COMDB;
SyntacticRules[33][2] = 0;
// RULE 34: <N_COMQ> -> {T_ICOM}{T_RT}{T_COMMA}{T_RS}{T_COMMA}
SyntacticRules[34][0] = T_COMMA;
SyntacticRules[34][1] = T_RS;
SyntacticRules[34][2] = T_COMMA;
SyntacticRules[34][3] = T_RT;
SyntacticRules[34][4] = T_ICOM;
SyntacticRules[34][5] = 0;
// RULE 35: <N_COMQA> -> {T_IMMEDIATE}
SyntacticRules[35][0] = T_IMMEDIATE;
SyntacticRules[35][1] = 0;
// RULE 36: <N_COMQA> -> {T_IDNAME}
SyntacticRules[36][0] = T_IDNAME;
SyntacticRules[36][1] = 0;
// RULE 37: <N_COMDA> -> {T_ADDR}{T_BRS}
SyntacticRules[37][0] = T_BRS;
SyntacticRules[37][1] = T_ADDR;
SyntacticRules[37][2] = 0;
// RULE 38: <N_COMDB> -> {T_IDNAME}
SyntacticRules[38][0] = T_IDNAME;
SyntacticRules[38][1] = 0;
// RULE 39: <N_CONDC> -> {T_PLUS}{T_IMMEDIATE}{T_BRS}
SyntacticRules[39][0] = T_BRS;
SyntacticRules[39][1] = T_IMMEDIATE;
SyntacticRules[39][2] = T_PLUS;
SyntacticRules[39][3] = 0;
// RULE 40: <N_COMDC> -> {T_BRS}
SyntacticRules[40][0] = T_BRS;
SyntacticRules[40][1] = 0;
// RULE 41: <N_COMJA> -> {T_JCOM}
SyntacticRules[41][0] = T_JCOM;
SyntacticRules[41][1] = 0;
// RULE 42: <N_COMJB> -> {T_IDNAME}
SyntacticRules[42][0] = T_IDNAME;
SyntacticRules[42][1] = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -