亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? macrobodydef_c.cpp

?? 單片機(jī)宏匯編器的源程序。給一些愛(ài)好者作為學(xué)習(xí)編譯原理和 C 程序設(shè)計(jì)的例子.
?? CPP
字號(hào):
//---------------------------------------------------------------------------
//-------- MacroBodyDef_C.cpp -----------------------------------------------
//---------------------------------------------------------------------------
#include "JsGlobal_H.h"
#include "MacroBodyDef_H.h"
#include "MAsmber_H.h"
//---------------------------------------------------------------------------
//           宏定義,宏處理
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// MacroDefBody
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// 對(duì)其中出現(xiàn)的WordSToken作判別,如果是形參,改成FormalArgv。
// 如果是局參,改成LocalArgv。
// 把CharDatan, LongCharn, StrDataKn這些Token都改成WordSToken。
// CLine不能是空行。
//---------------------------------------------------------------------------
void MacroDefBody::SearchAndRecgArgvInMro(AsmLine* CLine)
{ for( Tokenfield* ft = CLine->FirstTkn();
           ft;
               ft = ft->next )
   { switch(ft->Token)
     { case WordSToken:
             { register Tokenfield* fer = SearchFormArgv(ft->Name);
               if(fer) // Have found out that it is a Formal argv
                { ft->Token = FormalArgv;   // Token進(jìn)化!
                  ft->ExpPt = fer;          // 其指針域指向相應(yīng)的形參。
                } // endif
               else    // fer == NULL
                { fer = SearchLocalArg(ft->Name);
                  if(fer)  // Have found Local Argu.
                   { ft->Token = LocalArgv; // Token進(jìn)化!
                     ft->ExpPt = fer;       // 其指針域指向相應(yīng)的局參。
                   } // endif
                  // no else
                } // end else
               break;
             } // end case
       case CharDatan:  case LongCharn:  case StrDataKn:
             { ft->Token = WordSToken; // 在宏中,這些Token被看成WordSToken一樣。
               break;
             } // end case
       // no default...
     } // end switch
   } // end for
} // end SearchAndRecgArgvInMro
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// 設(shè)置宏頭和宏尾。
// 掃描宏體,識(shí)別其中的形參和局參,改成FormalArgv和LocalArgv。
// CLine帶值返回,返回時(shí)指向ENDM。
//---------------------------------------------------------------------------
void MacroDefBody::MroBodyScanAndRecg(AsmLine* &CLine)
{ MacroBegin = CLine; // 得到宏體頭
  for(  ;  CLine != NULL
           && CLine->HeadToken() != ENDMTkn; // 注意,用頭結(jié)點(diǎn)作判別!
               CLine = CLine->next )
  { // 對(duì)其中出現(xiàn)的WordSToken作判別,如果是形參,改成FormalArgv;
    SearchAndRecgArgvInMro(CLine); // 如果是局參,改成LocalArgv。
  } // end for
  // 宏體尾
  MacroEnd = CLine; // 得到宏體尾
  CLine->Enable = false; // 最后把CLine禁用。(ENDM)
} // end MroBodyScanAndRecg
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
void MacroDefBody::show()const
{ printf("\nMacroBody [%s]", (const char*)MacroName);
  printf("\nMacro begin at Line[%d]", MacroBegin ? MacroBegin->GetLineNo():0);
  printf("\nMacro end at Line[%d]", MacroEnd ? MacroEnd->GetLineNo():0);
  printf("\nArgu pointing: ");
   if(arguPtr) { arguPtr->show(); } // endif
   else { printf("NULL"); } // end else
  printf("\nlocal pointing: ");
   if(localPtr) { localPtr->show(); } // endif
   else { printf("NULL"); } // end else
} // end show
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
void MacroDefBody::showArgu()const
{ printf("\n---- Argu show: ----");
  for( register Tokenfield* pt = arguPtr;
           pt;
               pt = pt->next )
   { printf("\nArgu[%s]=[%s]", (const char*)pt->Name,
              pt->ExpPt ? (const char*)pt->ExpPt->Name : "nil");
   } // end for

  for( register Tokenfield* pt = localPtr;
           pt;
               pt = pt->next )
   { printf("\nLocal[%s]=[??%4.4X]",(const char*)pt->Name, pt->Value); } // end for
} // end showArgu
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
// MacroRegList
//---------------------------------------------------------------------------

//----- 析構(gòu)器 --------------------------------------------------------------
MacroRegList::~MacroRegList()
{ for( register MacroDefBody* temp = head;
           head;
               head = head->next,
               delete temp,
               temp = head ); // end for
} // end destructor
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// 從宏定義表的表頭開(kāi)始,搜索指定的宏名的宏定義。
// 找不到返回NULL。
//---------------------------------------------------------------------------
MacroDefBody* MacroRegList::SearchMacro(const Jstring& vname)
{ register MacroDefBody* mbt;
  for( mbt = head;
           mbt && mbt->MacroName != vname;
               mbt = mbt->next ); // end for
  return mbt;
} // end SearchMacro
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
// MacroVarList
//---------------------------------------------------------------------------

//------ 析構(gòu)器 -------------------------------------------------------------
MacroVarList::~MacroVarList()
{ for( register MacroVarNode* temp = head;
           head;
               head = head->next,
               delete temp,
               temp = head ); // end for
} // end destructor
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
void MacroVarList::show()const
{ printf("\n===== [MacroVarList] =====");
  for( register MacroVarNode* temp = head;
           temp;
               temp = temp->next )
   { printf("\n[%s]=%XH, %u",(const char*)temp->name, temp->value, temp->value);
   } // end for
  printf("\n===== [List end] =====");
} // end show
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// 從表中搜索指定名字的變量, 返回指向該結(jié)點(diǎn)的指針。找不到,返回NULL。
//---------------------------------------------------------------------------
MacroVarNode* MacroVarList::SearchVar(const Jstring& vname)
{ register MacroVarNode* mt;
  for( mt = head;
           mt && vname != mt->name;
               mt = mt->next ); // end for
  return mt;
} // end SearchVar
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// 計(jì)算數(shù)值表達(dá)式的值。
// err帶值返回。返回的值可以直接OutputErr。
//---------------------------------------------------------------------------
#define getOpKn         OpKn = ( Pt ? Pt->Token : ' ' );
#define getNextOp       Pt = Pt->next; getOpKn
//---------------------------------------------------------------------------
int32 MacroVarList::CalVarExpr(ERR &err, Tokenfield* Pt)
{ err = 0;          // 對(duì)err清零
  TokenStack optr; ValueStack opnd;
  int16u OpKn;      getOpKn;

  while( OpKn !=' ' || optr.Notempty() )
  { if( IsOPTR(OpKn) ) // 是個(gè)運(yùn)算符
     { // 已經(jīng)得到一個(gè)運(yùn)算符.
       switch( OPsuperior( optr.gettop(), OpKn ) )
       { case '<' : { optr.push(OpKn);              // 運(yùn)算符入棧
                      getNextOp; break;
                    } // end case
         case '=' : { optr.pop();                   // 運(yùn)算符出棧
                      getNextOp; break;
                    } // end case
         case '>' : { err = OPTRAct(optr, opnd); // 給err賦值
                      if(err) { EThrows(printf("\tOpAct Result err!");); return NULL; } // endif
                      break;
                    } // end case
         default : { FatalErr("\nCalVarExpr out of run!"); } // end default
       } // end switch
     } // endif IsOPTR(Token)
    else // 不是運(yùn)算符, 而是操作數(shù), 則進(jìn)棧
     { switch(Pt->Token)
       { case ValueToken: { break; } // end case
         case WordSToken: { MacroVarNode* pn = SearchVar(Pt->Name);
                            if(pn == NULL) { err = LabelUnDefErr; return NULL; } // endif
                            Pt->Value = pn->value; // 取變量的值
                            break; } // end case
         default : { err = ExpSyrErr; return NULL; } // end default
       } // end switch

       opnd.push(Pt->Value);     // 入棧
       getNextOp;
     } // end else
  } // end while

  int32 val = opnd.pop(); // No error. 得到結(jié)果。

  Assert( if( Pt || !optr.empty() || !opnd.empty() )         // Just for Debug!!
           { FatalErr("\nError in OPstack!!"); } // endif
         );
  return val;
} // end CalVarExpr
//---------------------------------------------------------------------------
#undef getOpKn
#undef getNextOp
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
#define pop2opnd                                                                \
        int32 b = opnd.pop();                                                   \
        int32 a = opnd.pop();
//---------------------------------------------------------------------------
#define pop1opnd                                                                \
        int32 a = opnd.pop();
//---------------------------------------------------------------------------
#define IFDIVerZero      if(b == 0) { return DividerIsZeroErr; }
//---------------------------------------------------------------------------
// 計(jì)算數(shù)值表達(dá)式。返回的err值可以用OutputErr打印出來(lái)。
//---------------------------------------------------------------------------
ERR MacroVarList::OPTRAct(TokenStack &optr, ValueStack &opnd)
{ switch(optr.pop())
  { // 雙目運(yùn)算
    case '+' : { pop2opnd; opnd.push(a + b); break; } // end case
    case '-' : { pop2opnd; opnd.push(a - b); break; } // end case
    case '*' : { pop2opnd; opnd.push(a * b); break; } // end case
    case '/' : { pop2opnd; IFDIVerZero; opnd.push(a / b); break; } // end case
    case '%' : { pop2opnd; IFDIVerZero; opnd.push(a % b); break; } // end case
    case '.' : { return ComNotAllowErr; } // end case
    case AND : { pop2opnd; opnd.push(a & b); break; } // end case
    case  OR : { pop2opnd; opnd.push(a | b); break; } // end case
    case XOR : { pop2opnd; opnd.push(a ^ b); break; } // end case

    case '=' : { pop2opnd; opnd.push(a == b);break; } // end case
    case '<' : { pop2opnd; opnd.push(a < b); break; } // end case
    case '>' : { pop2opnd; opnd.push(a > b); break; } // end case

    case GRtEQUKen: { pop2opnd; opnd.push(a >= b); break; } // end case
    case LessEQUKn: { pop2opnd; opnd.push(a <= b); break; } // end case
    case NotEqual : { pop2opnd; opnd.push(a != b); break; } // end case

    case SHL : { pop2opnd;
                 if(b > 16) { return ShiftOutRangeErr; } // endif
                 opnd.push(a << b); break;
               } // end case
    case SHR : { pop2opnd;
                 if(b > 16) { return ShiftOutRangeErr; } // endif
                 opnd.push(a >> b); break;
               } // end case

    // 單目運(yùn)算
    case NOT : { pop1opnd; opnd.push(~a); break; } // end case
    case HIGH: { pop1opnd; opnd.push((a & 0xff00)>>8); break; } // end case
    case LOW:  { pop1opnd; opnd.push(a & 0x00ff); break; } // end case

    case SingleNeg : { pop1opnd; opnd.push(-a); break; } // end case
    case SinglePlus: { break; } // end case

    default : { return BadOPinExprErr; } // end default
  } // end switch
 return OK_no_Err;
} // end OPTRAct
//---------------------------------------------------------------------------
#undef pop2opnd
#undef pop1opnd
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// end MacroBodyDef_C.cpp
//---------------------------------------------------------------------------
//               Written by JamesyFront.    ZLGmcu Dev.Co.Ltd.  2002.
//---------------------------------------------------------------------------


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品伦理在线| 奇米精品一区二区三区在线观看一| 日本韩国欧美在线| 欧美aa在线视频| 18成人在线观看| ww久久中文字幕| 在线亚洲免费视频| 国产成人鲁色资源国产91色综| 亚洲午夜影视影院在线观看| 国产婷婷一区二区| 欧美二区在线观看| 91麻豆文化传媒在线观看| 国产主播一区二区三区| 日韩高清在线一区| √…a在线天堂一区| 久久久久国产一区二区三区四区| 欧美日韩国产另类不卡| 欧美二区乱c少妇| 91蜜桃视频在线| 国产成人欧美日韩在线电影| 男男成人高潮片免费网站| 亚洲免费观看高清完整| 国产女主播视频一区二区| 日韩一区二区免费高清| 欧美午夜在线一二页| 99v久久综合狠狠综合久久| 国产精品99久久久| 久久精品国产免费| 奇米影视在线99精品| 亚洲福利视频一区| 亚洲午夜精品网| 亚洲制服丝袜av| 亚洲三级久久久| 中文字幕一区二区视频| 国产日韩av一区| 久久天堂av综合合色蜜桃网| 日韩一级片网站| 日韩一级欧美一级| 日韩三级中文字幕| 欧美一区二区网站| 欧美一区二区三区在线看| 制服丝袜国产精品| 91精品婷婷国产综合久久竹菊| 欧美日韩精品免费观看视频| 欧美专区在线观看一区| 日本道免费精品一区二区三区| 91在线精品秘密一区二区| 99精品桃花视频在线观看| 成av人片一区二区| 97se亚洲国产综合在线| 91丝袜美腿高跟国产极品老师 | 亚洲精品高清在线| 最新国产の精品合集bt伙计| 亚洲欧洲日产国码二区| 亚洲视频1区2区| 玉足女爽爽91| 亚洲成人免费看| 日韩成人免费看| 老汉av免费一区二区三区| 激情综合五月天| 国产一区二区三区在线看麻豆| 国产精品一区二区三区99| 懂色av一区二区三区蜜臀| 99久久久无码国产精品| 色94色欧美sute亚洲13| 欧美精品在线一区二区三区| 日韩欧美精品在线视频| 久久精品人人做人人综合| 国产精品久久久久久久第一福利| 亚洲少妇最新在线视频| 偷拍一区二区三区| 国内精品嫩模私拍在线| 成人在线视频一区二区| 欧美性猛交xxxx乱大交退制版 | 成人动漫av在线| 色综合久久久网| 911精品国产一区二区在线| 精品国产麻豆免费人成网站| 中文字幕乱码久久午夜不卡 | 亚洲亚洲精品在线观看| 日韩福利电影在线观看| 国产电影一区二区三区| 欧美主播一区二区三区| 日韩免费高清av| 中文字幕成人在线观看| 亚洲18色成人| 国产美女娇喘av呻吟久久| 色综合欧美在线| 欧美大片国产精品| 亚洲欧美日韩国产综合| 蜜桃视频免费观看一区| 99精品热视频| 欧美电视剧在线观看完整版| 亚洲丝袜美腿综合| 精品亚洲成a人| 日本高清视频一区二区| 2024国产精品视频| 亚洲一二三四久久| 国产成人免费视频| 91精品国产综合久久香蕉麻豆| 中文字幕免费一区| 美女视频网站久久| 欧美在线高清视频| 欧美国产精品中文字幕| 偷拍日韩校园综合在线| 成人18精品视频| 精品裸体舞一区二区三区| 亚洲乱码国产乱码精品精可以看| 国产一区二区三区免费看| 欧美色综合影院| 中文字幕一区二区视频| 国产一区二区三区四区五区入口| 欧美电影在线免费观看| 最新欧美精品一区二区三区| 国产麻豆一精品一av一免费| 91精品国产色综合久久ai换脸| 亚洲欧洲综合另类在线| 成人一级片在线观看| 日韩美一区二区三区| 五月婷婷综合网| 91久久精品一区二区三区| 国产精品久久精品日日| 国产一区二区三区久久久 | 九九精品一区二区| 欧美电影在线免费观看| 亚洲一区二区三区国产| av成人免费在线观看| 国产亚洲欧美在线| 韩国av一区二区三区四区| 91麻豆精品国产自产在线观看一区| 亚洲欧洲制服丝袜| 91亚洲永久精品| 亚洲欧美另类图片小说| 91伊人久久大香线蕉| 成人免费在线播放视频| 成人免费毛片aaaaa**| 久久久不卡影院| 国产剧情一区二区| 久久久久久9999| 国产成人av自拍| 欧美国产精品一区二区| 高清在线成人网| 中文字幕成人在线观看| 成人avav影音| 亚洲美女在线国产| 欧美怡红院视频| 香蕉久久一区二区不卡无毒影院 | 欧美性videosxxxxx| 亚洲中国最大av网站| 欧美特级限制片免费在线观看| 亚洲一二三四在线| 制服丝袜亚洲网站| 日本va欧美va瓶| 精品国产99国产精品| 国产一区二区三区黄视频| 中文字幕 久热精品 视频在线| caoporen国产精品视频| 亚洲自拍欧美精品| 91精品国产91久久久久久最新毛片| 美女网站一区二区| 国产拍欧美日韩视频二区| eeuss鲁一区二区三区| 一区二区三区不卡在线观看| 欧美日韩成人综合天天影院| 麻豆一区二区三| 国产欧美精品区一区二区三区 | 久久久久久久久伊人| 国产成人自拍网| 亚洲欧美偷拍卡通变态| 欧美日韩一区不卡| 韩国女主播一区| 国产精品久久久久久久久免费丝袜| 91福利视频网站| 美女精品自拍一二三四| 国产欧美日韩精品在线| 色乱码一区二区三区88| 毛片不卡一区二区| 国产精品免费看片| 欧美日韩成人一区二区| 国产精品影视在线| 亚洲成人综合网站| 久久久久国产精品麻豆| 国产欧美久久久精品影院 | 日韩一区二区在线免费观看| 国产一区二区三区四区五区美女 | 久久精品国产久精国产爱| 日本一区二区三区国色天香| 欧美日韩一区二区三区高清| 国模套图日韩精品一区二区| 亚洲欧美激情在线| 日韩欧美一级片| 色综合久久天天| 国产九色精品成人porny| 亚洲一区视频在线| 国产欧美久久久精品影院| 91麻豆精品国产91久久久使用方法| 粉嫩av亚洲一区二区图片| 日韩av电影免费观看高清完整版在线观看| 国产无人区一区二区三区| 欧美精品丝袜久久久中文字幕|