宏
宏編程
在用一種不熟悉的宏語言進行宏編程時,可以這樣做,首先記錄下用戶想要宏完成什么,然后打開宏文件并嘗試?yán)斫饷罱Y(jié)構(gòu)如何工作。也可以修改命令以調(diào)整宏。一些宏語言,比如Great Plains會計軟件的Dexterity運行時引擎,不能從其它數(shù)據(jù)源(如由逗號分隔的文本文件)導(dǎo)入數(shù)據(jù)。這一限制可以通過用更強大的編程語言,如VBA來創(chuàng)建一個計算機程序在此弱編程語言里生成一個特別的宏來解決。例如,可以對Microsoft Excel宏編程從擴展樣式表或文本文件中讀取數(shù)據(jù)并創(chuàng)建Great Plains .mac文件,這一文件被用于將特定的數(shù)據(jù)導(dǎo)入Great Plains.需要針對每一個新的數(shù)據(jù)集合生成新的.mac文件。
宏應(yīng)用
應(yīng)用程序也可以使用一種和宏類似機理的系統(tǒng)來允許用戶將一系列(一般是最常使用到的操作)自定義為一個步驟。也就是用戶執(zhí)行一系列操作,并且讓應(yīng)用程序來“記住”這些操作以及順序。更高級的用戶可以通過內(nèi)建的宏編程來直接使用那些應(yīng)用程序的功能。
當(dāng)使用一種不熟悉的宏語言來編程時,比較有效的方法就是記錄一連串用戶希望得到的操作,然后通過閱讀應(yīng)用程序記錄下來的宏文件來理解宏命令的結(jié)構(gòu)組成。
鍵盤宏
鍵盤宏和編輯器宏分別在圖形用戶界面和編輯器中被交互式地使用。使用它們可以用簡短的擊鍵代替冗長的命令序列,并為重復(fù)性任務(wù)提供了一個簡單的自動化形式,但2009年已經(jīng)有所改變。
程序員的文本編輯器Emacs(“編輯宏”[Editing MACroS]的簡稱)是沿用這一思想的產(chǎn)物。事實上,大多數(shù)編輯器是由宏組成的。Emacs最初被設(shè)計為編輯語言TECO的宏集,后被移植為Lisp的一種方言Emacs Lisp。Vim也允許用戶錄制和播放簡單的鍵盤宏。
宏語言
宏語言是一類編程語言,其全部或多數(shù)計算是由擴展宏完成的。宏語言并未在通用編程中廣泛使用,但在文本處理程序中應(yīng)用普遍。例如,
C預(yù)處理器
Internet Macros(iOpus)
M4(如前所述,源于AT&T,捆綁于Unix)
微軟Word和宏病毒
Visual Basic for Applications(VBA),是Microsoft Office里的一種編程語言。但由上面的定義,它完全不是一種宏語言。然而,它的功能已經(jīng)從中發(fā)展并最終替代了用戶應(yīng)用程序的宏思想,所以它被廣泛地錯誤地稱為是一種宏語言。
VBA可以訪問許多操作系統(tǒng)函數(shù)并支持文檔打開時自動執(zhí)行宏。這使得用這種語言寫計算機病毒成為可能。1990年代中后期,宏病毒成為了最流行的計算機病毒類型之一。其它的包括宏語言的項目,如OpenOffice.org,故意從其宏語言中排除了一些功能(如:自動執(zhí)行)以避免破壞程序。然而,這一特性在很多事務(wù)中受到歡迎。
參見
PHP
SMX
Stage 2
腳本語言如Tcl和ECMAScript(即:ActionScript,DMDScript,JavaScript,JScript)已被嵌入應(yīng)用程序,所以它們的運行類似宏。
TeX
Visual Basic Script(Microsoft)
Lisp有一個強大而不整潔的宏語法,可能會產(chǎn)生變量同名捕捉的問題。(Lisp has a powerful system of unhygenic syntax macros, but is prone to variable capture.)
Scheme有整潔的宏語法,可能是常被使用的最高級的無型別的宏系統(tǒng)
MacroML是一個探尋靜態(tài)型別和宏系統(tǒng)和諧點的實驗系統(tǒng)。
通用目的宏處理器是一個上下文模式匹配宏處理器,可以說他是正則表達(dá)式,EBNF和awk的組合。
免責(zé)聲明:以上內(nèi)容版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。感謝每一位辛勤著寫的作者,感謝每一位的分享。
- 有價值
- 一般般
- 沒價值
{{item.userName}} 舉報
{{item.time}} {{item.replyListShow ? '收起' : '展開'}}評論 {{curReplyId == item.id ? '取消回復(fù)' : '回復(fù)'}}
{{_reply.userName}} 舉報
{{_reply.time}}