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