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

📄 macromanager_h.h

📁 MCS51单片机的宏汇编器源程序。有需要的朋友请下载!
💻 H
字号:
//---------------------------------------------------------------------------
//-------- MacroManager_H.h -------------------------------------------------
//---------------------------------------------------------------------------
#ifndef	MacroManager_H.h  // 防止被重复引用
#define MacroManager_H.h
//---------------------------------------------------------------------------

#include "MacroBodyDef_H.h"
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
//                 宏定义识别和宏展开管理器
//---------------------------------------------------------------------------
class MacrosManager : public JObject
{ private:

     MacroAsmber& masm;      // 指向他的父亲

    MacroRegList* MRList;    // 指向宏定义体注册

    int16u MacroCallCounter; // 防止过多的宏调用

    // 局参号码分配计数器, 一个OBJ文件只能有一个。
    static int16u LocalLabelIDnum;


  public:

  // -------- constructors ------------

    MacrosManager(MacroAsmber& parent); // constructor

   ~MacrosManager();                    // destructor

  // --------- public functions ------------

    // 分派局参号码
    int16u AssaignLocalLabelNo()const { return LocalLabelIDnum++; }

    // 局参名字的拼装:("??xxxx")
    void LocalArgvToJstr(int16u val, Jstring &s);

    // 宏定义注册。输入一个汇编行,该汇编行含有一个MacroDef和一些形参。
    ERR MacroRegister(AsmLine* &CLine);

    // 对MacroDef后的形参表进行分析。
    ERR MacroDefParser(AsmLine* &CLine, MacroDefBody* Mbody);

    // 对遇到的Word看看是否为宏,是则进行宏调用的语法分析。
    bool IsMacroAndParse(ERR &err, Tokenfield* pt);

    // 把宏定义体中的某一行拿出来,把其中的形参用实参替代。
    ERR MacroLineBacktoJstr(AsmLine* Line, Jstring &s);

    // 宏展开词法分析器。
    ERR MacroToToken(const MacroDefBody* mbody,AsmLine* BaseLn,
                                   AsmLine* InsLn,AsmLine* &CLn);

    // 宏调用处理。处理宏替代。
    ERR MacroCall(AsmLine* &Ln);

    // REPT 宏重复处理。
    ERR MacroREPTdo(AsmLine* &Ln);

    // REPT 语法分析器。
    int16u REPT_Parser(ERR &err, AsmLine* Ln);

    // 寻找LOCAL,并进行语法分析。
    ERR TryLocalParse(AsmLine* &Ln, Tokenfield* &LocalarguPt,
                                    Tokenfield* PreNamesSetPt);

    // IRP 的语法分析。
    ERR IRP_Parse(AsmLine* line, Tokenfield* &FormArgv,
                                 Tokenfield* &ParaArgv);

    // IRPC 的语法分析。
    ERR IRPC_Parse(AsmLine* line, Tokenfield* &FormArgv,
                                  Tokenfield* &ParaArgv);

    // 遇到IRP指令的宏展开。
    ERR MacroIRP_do(AsmLine* &Ln);

    // 遇到IRPC指令的宏展开。
    ERR MacroIRPC_do(AsmLine* &Ln);

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

    // 从str中截取一个单词, 放入para->Name中。str带值返回。
    static bool FetchAParaWord(Jstring &str, Tokenfield &para);

    // 从str中截取一个字母, 放入para->Name中。str带值返回。
    static bool FetchAParaLetter(Jstring &str, Tokenfield &para);

  //---------------------------------------------------------------
  friend class MacroAsmber;

}; // end MacrosManager
//---------------------------------------------------------------------------



//------ 构造器 -------------------------------------------------------------
inline MacrosManager::MacrosManager(MacroAsmber& parent)
                      : masm(parent),
                        MacroCallCounter(0)
{ MRList = new MacroRegList;
} // end constructor
//---------------------------------------------------------------------------

//------ 析构器 -------------------------------------------------------------
inline MacrosManager::~MacrosManager()
{ delete MRList;
} // end destructor
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
inline void MacrosManager::LocalArgvToJstr(int16u val, Jstring &s)
{ s = "??";
  s = s + Int16uToStr( val );
} // end LocalArgvToJstr
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
//               Written by JamesyFront.    ZLGmcu Dev.Co.Ltd.  2002.
//---------------------------------------------------------------------------



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -