📄 tokenfield_c.cpp
字号:
//---------------------------------------------------------------------------
//-------- Tokenfield_C.cpp -------------------------------------------------
//---------------------------------------------------------------------------
//
// 这个文件包含了对 Tokenfield 类的操作。
//
// const char* Tokenfield::nick(int16u tkn); 根据Token号码找对应的名字。
// void Tokenfield::show(); 显示Tokenfield结点信息。
//
//---------------------------------------------------------------------------
#include "JsGlobal_H.h"
#include "Tokenfield_H.h"
#include "InstSystem_H.h"
#include "MAsmber_H.h"
#include "Dat4ary_H.h"
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// 根据 Token码 找名字。
//---------------------------------------------------------------------------
const char* Tokenfield::nick(int16u tkn)
{ const char* pn = InstSystem::TokenToName(tkn);
if(pn) return pn;
switch(tkn)
{ case ReservInst: pn = "ReservInst"; break;
case PseudoWord: pn = "PseudoWord"; break;
case RegisterKn: pn = "RegisterKn"; break;
case ExpresnKn : pn = "ExpresnKn"; break;
case OperandKn : pn = "OperandKn"; break;
case KnownInst : pn = "KnownInst"; break;
case ObjcodeKn : pn = "ObjcodeKn"; break;
case DBObjCode : pn = "DBObjCode"; break;
case DWObjCode : pn = "DWObjCode"; break;
case InstCode : pn = "InstCode"; break;
case OPsetInst : pn = "OPsetInst"; break;
case ValueToken: pn = "ValueToken"; break;
case WordSToken: pn = "WordSToken"; break;
case SymblToken: pn = "SymblToken"; break;
case LabelDefkn: pn = "LabelDefkn"; break;
case EQUsDefken: pn = "EQUsDefken"; break;
case SETsDefken: pn = "SETsDefken"; break;
case BITsDefken: pn = "BITsDefken"; break;
case DATADefKen: pn = "DATADefKen"; break;
case XDATADefKn: pn = "XDATADefKn"; break;
case IDATADefKn: pn = "IDATADefKn"; break;
case CODEDefKen: pn = "CODEDefKen"; break;
case NumberDefn: pn = "NumberDefn"; break;
case END : pn = "END"; break;
case SEGMTDefkn: pn = "SEGMTDefkn"; break;
case MacroDefkn: pn = "MacroDefkn"; break;
case MacroCTRLn: pn = "MacroCTRLn"; break;
case EOLineKen : pn = "EOLineKen"; break;
case CommentKn : pn = "CommentKn"; break;
case CharDatan : pn = "CharDatan"; break;
case LongCharn : pn = "LongCharn"; break;
case StrDataKn : pn = "StrDataKn"; break;
case GRtEQUKen : pn = "GRtEQUKen"; break;
case LessEQUKn : pn = "LessEQUKn"; break;
case NotEqual : pn = "NotEqual"; break;
case CommBegin : pn = "CommBegin"; break;
case CommEnd : pn = "CommEnd"; break;
case SinglePlus: pn = "SinglePlus"; break;
case SingleNeg : pn = "SingleNeg"; break;
case txtCATtxt : pn = "txtCATtxt"; break;
case UndefSym : pn = "UndefSym"; break;
case EXTRNKn : pn = "EXTRNKn"; break;
case WordList : pn = "WordList"; break;
case MacroPsw : pn = "MacroPsw"; break;
case ArgvWordkn: pn = "ArgvWordkn"; break;
case FormalArgv: pn = "FormalArgv"; break;
case LocalArgv : pn = "LocalArgv"; break;
case MacroRefkn: pn = "MacroRefkn"; break;
case MroParamtn: pn = "MroParamtn"; break;
case WordCatKn : pn = "WordCatKn"; break;
case ReptDefkn : pn = "ReptDefkn"; break;
case MroCalling: pn = "MroCalling"; break;
case LRstringKn: pn = "LRstringKn"; break;
case FatalERRn : pn = "FatalERRn"; break;
case NormalERR : pn = "NormalERR"; break;
case WarningKn : pn = "WarningKn"; break;
case Dog_Ctrl : pn = "Dog_Ctrl"; break;
case Dog_Skip : pn = "Dog_Skip"; break;
case IFNUL_Kn : pn = "IFNUL_Kn"; break;
// 没有 default...
} // end switch
// 以上是Token域.
return pn;
} // end nick
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void Tokenfield::show()const
{ const char* s = nick(Token);
printf("Tn=");
if(s) { cout<<"["<<s<<"]"; }
else
{ printf("[%xH]", Token);
if(Token>' ' && Token<=0xff) { printf("=[%c]", Token); }
} // end else
// 以上是Token域.
switch(Token)
{ case PseudoWord : // 同下。
case ReservInst : // 同下。
case RegisterKn : // 同下。
case MacroPsw : case Dog_Ctrl :
{ const char* name = nick(Token2);
if(!name) // name == NULL
{ name = "noname?"; } // endif
cout<<"\tVal=["<<name<<"]"; break;
} // end case
//case LongCharn : // 同下。
//case StrDataKn : { DatPt->show(); break; } // end case
case SEGMTDefkn : { printf("\tSegTyp[");
switch(Token2)
{ case SEG_CODE : printf("code"); break;
case SEG_DATA : printf("data"); break;
case SEG_XDATA: printf("xdata"); break;
case SEG_IDATA: printf("idata"); break;
case SEG_BIT : printf("bit"); break;
default : printf("???");
} // end switch
printf("] Rel=");
switch(loc[1])
{ case SEG_ABS : printf("abs"); break;
case SEG_UNIT : printf("unit"); break;
case SEG_BITABLE: printf("bitable"); break;
case SEG_INPAGE : printf("inpage"); break;
case SEG_INBLOCK: printf("inblock"); break;
case SEG_PAGE : printf("page"); break;
default : printf("???");
} // end switch
break;
} // end case
case EXTRNKn : { switch(Token2)
{ case LB_CODE : printf("\t[code]"); break;
case LB_DATA : printf("\t[data]"); break;
case LB_XDATA: printf("\t[xdata]");break;
case LB_IDATA: printf("\t[idata]");break;
case LB_BIT : printf("\t[bit]"); break;
case LB_NUM : printf("\t[num]"); break;
default : printf("\t[???]");
} // end switch
break;
} // end case
default : printf("\tVal=[%4.4xH]", (int16u)Value);
} // end switch
// 以上是Value域.
if(Token>' ' && Token<=0xff)
{ printf("\tName=[%s]",(const char*)Name); } // endif
else
{
switch(Token)
{ case KnownInst : { printf("\tAddr[%XH]", Value); break; } // end case
case ObjcodeKn : { printf(" "); D4ary->show(); break; } // end case
case InstCode : { printf(" "); D4ary->show(); break; } // end case
case ValueToken: { printf("\tVal=[%d] name=[%s]", (int16u)Value,(const char*)Name); break; } // end case
case OperandKn : // 同下
case ExpresnKn : // 同下
case WordList : { //printf("\n<In sub>");
//TokenOper::showTknList(ExpPt);
break;
} // end case
case END : { printf("\n"); break; } // end case
default : printf("\tName=[%s]",(const char*)Name);
} // end switch
} // end else
if(IsOPTR(Token)) cout<<" OPTR!";
// 以上是Name域.
// gotoxy(65,wherey()); printf("nxt=[");
// if(next) cout<<next->Name<<"]";
// else cout<<"NULL]";
} // end Tokenfield::show
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// end of Tokenfield_C.cpp
//---------------------------------------------------------------------------
// Written by JamesyFront. ZLGmcu Dev.Co.Ltd. 2002.4 - 9.
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -