尚寶欣,宮以赫*,朱振菊
(1.東北電力大學(xué) 理學(xué)院,吉林 吉林 132012;2.群山大學(xué),群山 541150)
EverEdit(EE)是國(guó)內(nèi)一款快速、輕量級(jí)、功能強(qiáng)大的純文本編輯器,目前最新版本為4.4,在Windows操作系統(tǒng)下 32位安裝程序的大小為4.2 M。通過(guò)設(shè)置“工具→外部工具”它可成為C++、Java等語(yǔ)言的一個(gè)簡(jiǎn)單的IDE。它的優(yōu)點(diǎn)有啟動(dòng)速度快、界面簡(jiǎn)潔、語(yǔ)法著色功能完善、代碼片段及關(guān)鍵字(包括上下文單詞)自動(dòng)補(bǔ)全功能強(qiáng)大等等。另外通過(guò)修改代碼片段自動(dòng)補(bǔ)全、代碼折疊、大綱顯示等功能,可實(shí)現(xiàn)對(duì)不同文件類型上述功能的個(gè)性化設(shè)置。
Maple[1]與MATLAB,Mathematica一起被稱為世界最著名的三大數(shù)學(xué)軟件。它具有強(qiáng)大的符號(hào)計(jì)算引擎。Maple把不同數(shù)學(xué)領(lǐng)域中常用的算法封裝在不同的包中,在使用的時(shí)候可單獨(dú)加載,這將大大減少了程序運(yùn)行所需內(nèi)存,也方便用戶找尋所需函數(shù)。
在Maple軟件中,一般會(huì)用以下3種方式進(jìn)行編程:
直接使用Maple命令進(jìn)行交互。這適合一般簡(jiǎn)單的交互式操作。雖然該操作比較簡(jiǎn)單,但是如果操作者對(duì)Maple的代碼編輯不是特別熟悉,則會(huì)很容易出現(xiàn)Maple代碼不能正確運(yùn)行的情況。筆者的經(jīng)驗(yàn)是,該類錯(cuò)誤多是由于操作不當(dāng),使得Maple對(duì)文本和數(shù)學(xué)字符的識(shí)別出現(xiàn)了錯(cuò)誤。一般情況下,重新編寫代碼能夠解決這個(gè)問(wèn)題,但這必然會(huì)導(dǎo)致代碼效率的下降。該方法有代碼自動(dòng)提示與補(bǔ)全功能,但提示的內(nèi)容有限,例如寫一個(gè)包名后,后面并不會(huì)提示出該包中函數(shù)的名字。
在代碼編輯器中編寫代碼[2]。它更適合編寫帶函數(shù)的小規(guī)模Maple源程序。該方法的好處有代碼編輯器中的內(nèi)容全是文本模式,不會(huì)出現(xiàn)文本與數(shù)學(xué)字符誤識(shí)的問(wèn)題;代碼的自動(dòng)提示與補(bǔ)全功能比第一種方法更加易用,且提示的內(nèi)容也比較多,例如在包名后面加“:-”后會(huì)提示整個(gè)包中函數(shù)的名字;具有代碼自動(dòng)縮進(jìn)功能,使得代碼的邏輯更為清楚。它的問(wèn)題有:在編輯框內(nèi)換行的話需要用Ctrl+Enter組合鍵,使用起來(lái)較為麻煩;代碼提示與補(bǔ)全僅限于包名及函數(shù)名,據(jù)筆者所知,Maple并沒(méi)有提供代碼片段的提示與初步功能。
使用Maple新提供的Maple IDE編寫Maple源代碼。Maple IDE基于Eclipse,是Maple為方便用戶進(jìn)行中或大型代碼開發(fā)、Maple庫(kù)開發(fā)而提供的一個(gè)集成開發(fā)環(huán)境。其優(yōu)點(diǎn)是功能完整豐富,能提升代碼編輯的效率與質(zhì)量;缺點(diǎn)是程序較大、價(jià)格較貴。
為獲取與Maple IDE類似的效率與質(zhì)量?jī)?yōu)勢(shì),我們嘗試用EE編輯Maple文件。主要充分利用EE的語(yǔ)法著色、代碼片段自動(dòng)補(bǔ)全、關(guān)鍵字補(bǔ)全、上下文單詞自動(dòng)補(bǔ)全等功能來(lái)提升源代碼編寫的速度與準(zhǔn)確度。EE并未提供針對(duì)Maple源文件的語(yǔ)法著色文件及代碼片段自動(dòng)補(bǔ)全文件,因此需要我們創(chuàng)建這兩個(gè)文件,文件名分別為Maple.mac、Maple.snippet,把它們分別放在EE安裝目錄下面的文件夾syntax和snippet中。在EE中創(chuàng)建.mpl作為Maple源文件的類型,語(yǔ)法著色與代碼片段補(bǔ)全均與該類型相關(guān)聯(lián)。
語(yǔ)法著色文件的創(chuàng)建。在Maple.mac中,對(duì)Maple語(yǔ)言中的注釋、關(guān)鍵字、類型名、函數(shù)名(包括自定義、系統(tǒng)自帶)、包名、包內(nèi)函數(shù)名的著色進(jìn)行了設(shè)置。具體設(shè)置方法請(qǐng)參考EE在線幫助文檔[3]。例如,可通過(guò)
maple.AddWord( maple.CreateWord(COLOR_WORD1, “and … xor”, True ) )
將”and … xor”(單詞間用空格隔開)等關(guān)鍵字設(shè)置成顏色索引COLOR_WORD1所對(duì)應(yīng)的顏色(注意,AddWord函數(shù)使這些單詞可進(jìn)行自動(dòng)補(bǔ)全)。其它的設(shè)置大多與其類似。
代碼片段自動(dòng)補(bǔ)全文件的創(chuàng)建。創(chuàng)建文件Maple.snippet,在文件Maple.mac文件加入:
maple.AddSnippet “Maple.snippet”
使EE能對(duì).mpl類型的文件編寫進(jìn)行檢測(cè),并進(jìn)行代碼自動(dòng)補(bǔ)全。
Maple.snippet文件中的一個(gè)自動(dòng)補(bǔ)全代碼塊的形式如下
#t=讀數(shù)據(jù),用fopen從文件中讀
#g=readfile
file:=fopen(“${1:filename}”, READ, TEXT):
b:=readdata(file, ${2:datatype}):
close(file):
i:=b[1]; # 注意b是一個(gè)列表
$0
鍵入第2部分“#g=”后面的單詞(readfile)后,會(huì)出現(xiàn) 第1部分“#t=”后的內(nèi)容作為提示,此時(shí)按Tab鍵,第3部分中內(nèi)容會(huì)替換第2部分“#g=”后面的單詞,即只鍵入一個(gè)單詞可完成在“filename”文件中讀取一個(gè)“datatype”型數(shù)據(jù)的代碼,后續(xù)鍵入filename和datatype即可。對(duì)常用結(jié)構(gòu)進(jìn)行上述設(shè)置可大大減輕大腦記憶代碼的負(fù)擔(dān),極大提高代碼編輯的速度。
注意${1:filename}、${2:datatype}、$0表示變量,前兩個(gè)表示在第3部分中需修改的部分??捎肨ab或Shift+Tab鍵使光標(biāo)在它們之間切換。最后光標(biāo)會(huì)定格在$0所在的位置,即在EE中亦可像在Eclipse,NetBeans中一樣進(jìn)行熱點(diǎn)導(dǎo)航。
為了在EE中快速定位Maple源代碼中函數(shù)的位置,創(chuàng)建“Maple大綱.mac”文件(放在macro/__outline__目錄下),借用EE的自定義顯示大綱功能實(shí)現(xiàn)函數(shù)快速定位。將函數(shù)作為唯一的一級(jí)大綱,在Maple大綱.mac中使用正則表達(dá)式
“^[s]*(w+)[s]*:=[s]*proc[s]*((.*)).*”
對(duì)函數(shù)進(jìn)行檢測(cè)。最后在Maple.mac文件后面添加
maple.SetOutlineScript APP_PATH + “macro\__ outline__Maple大綱.mac”
maple.SetOutlineMethod OUTLINE_FROM_SCRIPT
使EE在打開.mpl文件時(shí),自動(dòng)對(duì)其進(jìn)行函數(shù)的檢測(cè)與顯示。
結(jié)合EE與cmaple.exe可實(shí)現(xiàn)對(duì)Maple源文件中語(yǔ)法錯(cuò)誤的檢測(cè)。
將cmaple.exe所在目錄添加到環(huán)境變量path中,在EE的外部工具中進(jìn)行如下設(shè)置:
標(biāo)題:&Sparse
功能:分析Maple文件(.mpl)中的語(yǔ)法錯(cuò)誤
結(jié)果:將語(yǔ)法分析的結(jié)果輸出到“輸出窗口”中
命令:cmaple.exe -P
參數(shù):$(FileName)
初始目錄:$(FileDir)
動(dòng)作模式:捕獲輸出(隱藏窗口)
若.mpl文件中有語(yǔ)法錯(cuò)誤,用Sparse菜單可將Maple對(duì)該文件所做語(yǔ)法分析顯示在EverEdit的“輸出窗口”。注意,它只顯示語(yǔ)法錯(cuò)誤第一次出現(xiàn)的位置。
對(duì)EE進(jìn)行簡(jiǎn)單配置可實(shí)現(xiàn)在EE窗口下運(yùn)行Maple源程序。在EE的外部工具中進(jìn)行如下設(shè)置:
標(biāo)題:&Maple
功能:運(yùn)行Maple文件(.mpl)
結(jié)果:將運(yùn)行結(jié)果輸出到“輸出窗口”中
命令:cmaple.exe
參數(shù):$(FileName)
初始目錄:$(FileDir)
動(dòng)作模式:捕獲輸出(隱藏窗口)
進(jìn)行上述設(shè)置之后,EE的輸出窗口會(huì)捕獲到Maple的運(yùn)行結(jié)果,包括命令的回顯及程序的結(jié)果。若不想看到命令的回顯,可把“命令”里的cmaple.exe加參數(shù)“–q”。
需注意,用EE運(yùn)行Maple程序時(shí),每次均將整個(gè)文件全部運(yùn)行一遍,這樣會(huì)失去了一定的靈活性。因此使用EE編輯運(yùn)行Maple文件,最適合于多函數(shù)或創(chuàng)建Maple庫(kù)的應(yīng)用中。
用EE編輯Maple源代碼可大幅提高源碼編寫的效率與質(zhì)量;在EE中使用cmaple.exe –P分析語(yǔ)法,可快速定位語(yǔ)法錯(cuò)誤的位置;在EE中使用cmaple.exe或cmaple.exe –q運(yùn)行Maple文件可使運(yùn)行結(jié)果直接在EE中呈現(xiàn)出來(lái),方便調(diào)試源代碼的邏輯錯(cuò)誤。這能大大提高中、大型Maple程序的編寫與調(diào)試的效率與質(zhì)量。