把根源程式中的巨集指令或巨集式擴展成等價的、預先定義的指令或語句序列的翻譯程式。

  巨集指令或巨集式,實際上是按規定格式書寫的某一根源程式段的縮寫,主要是根據用戶自己特定的需要而設置的。它利用程式設計語言所提供的指令或語句來定義。系統也可以預先定義一些常用的巨集指令或巨集式,以便用戶直接調用。

  建立巨集加工程式後,用戶就可以方便地定義和使用自己所需的巨集指令或巨集式。這不僅能簡化應用程式的編寫,而且有有助於軟件人員研究和移植有關的軟件。例如,利用宏指令或宏語句設計虛擬機,研究新的語言,以及生成帶有變化成分的軟件等。

  宏指令的定義、調用和擴展 定義宏指令時,要給出它的名字、格式、參數和等價的指令序列,即由開始行、指令序列和結束行組成。開始行中的操作碼標明宏指令定義開始;標號字段給出宏指令的名字;操作對象字段給出宏指令的參數;結束行中的操作碼標明宏指令定義結束。在開始行和結束行之間,給出用來定義宏指令的指令序列,其中有些指令可出現開始行中列出的參數。

  程序中可按宏指令的格式調用有定義的宏指令。宏指令中的操作碼字段給出宏指令的名字;操作對象字段中給出用戶所需的參數。

  宏加工程序將程序中出現的宏指令擴展成等價的指令序列,並進行參數替換。

  宏語句的定義、調用和擴展,與宏指令的情形類似。為簡單起見,分別將其統稱為宏定義、宏調用和宏擴展。

  實現過程 宏加工程序通常采用兩遍算法實現:第一遍收集宏定義的信息;第二遍實現宏擴展。在第一遍掃描中,遇到宏定義時,應把名字、格式、參數等信息以及隨後的等價的指令或語句序列記錄到宏定義表中。對於源程序中宏定義以外的部分,將不加改變地復寫到中間結果程序區中。第二遍掃描第一遍所產生的中間結果程序。遇到宏調用時,則將宏定義表中相應的等價指令或語句序列復寫到目標程序區中。復寫過程中,要用宏調用中的實在參數替換宏定義中的形式參數。

  如果限制每個宏調用隻能調用前面已定義的宏指令或宏語句,那麼,這種宏加工程序的實現算法可合並成一遍完成。

  功能較強的宏加工程序還可增加嵌套宏定義、嵌套宏調用或條件宏加工等功能。如果宏定義中含有另外的宏定義,則稱為嵌套宏定義。如果宏定義A中出現宏調用,那末在擴展A的宏調用過程中,又要進一步轉去擴展另外的宏調用。這種情形稱為嵌套宏調用。如果宏加工程序能根據宏調用中的參數,有選擇地把宏調用擴展成不同的指令或語句序列,則稱為條件宏加工。

  

參考書目

 M. Campbell-Kelly, An Introduction to Macros,MacDona ld.London,1973.

 P. J. Brown,Macro Processor and Techniques for Porable Software,Wiley,London,1974.

 A. J. Cole, Macro Processor,Cambridge Univ.Pr.,Cambridge,1976.