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

📄 tokenfield_c.cpp

📁 MCS51单片机的宏汇编器源程序。有需要的朋友请下载!
💻 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 + -