長治學(xué)院 郜慧敏
計(jì)算機(jī)代數(shù)系統(tǒng)是結(jié)合計(jì)算機(jī)軟件來進(jìn)行的操作系統(tǒng),該系統(tǒng)的實(shí)現(xiàn)的功能:符號演算、數(shù)值計(jì)算、快捷作圖等,在殷志云,黃立的計(jì)算機(jī)代數(shù)語言與CA SSDR系統(tǒng)報(bào)告中所提出的CA SSDR系統(tǒng)的組成部分有:REDU CE、M athem atica。其中REDU CE構(gòu)成部分有著強(qiáng)硬的公式推演功能,athem atica構(gòu)成部分有著強(qiáng)大的作圖功能能夠快速的將系統(tǒng)圖構(gòu)建出來,這兩者的優(yōu)點(diǎn)通過結(jié)合集成在CA SSDR系統(tǒng)中,在提升運(yùn)算能力的同時(shí)將計(jì)算過程通過維度的圖像展示在操作者面前,給操作者帶來詳細(xì)的計(jì)算過程。在現(xiàn)實(shí)中該系統(tǒng)已經(jīng)應(yīng)用在數(shù)學(xué)的求方程的代數(shù)解、隱函數(shù)的求導(dǎo)、求微分方程等數(shù)學(xué)內(nèi)容中。在過去只能利用紙筆來進(jìn)行求解運(yùn)算,然后再通過大腦進(jìn)行儲存、思考運(yùn)算,伴隨著計(jì)算機(jī)大似乎系統(tǒng)的盛行將這一過程簡化,很有效的釋放了人類的腦力勞動(dòng)。計(jì)算機(jī)代數(shù)系統(tǒng)的誕生給我們運(yùn)算過程中帶來了新的思想已經(jīng)新的運(yùn)算工具,給那些我們難以解決的復(fù)雜符號運(yùn)算或數(shù)值運(yùn)算的理論上及實(shí)際存在的問題帶來了強(qiáng)有力的技術(shù)支持以助于我們進(jìn)行解決。在計(jì)算機(jī)代數(shù)系統(tǒng)的發(fā)展演變歷史中,也有著諸多不成熟的方面。如:該系統(tǒng)在對不同的學(xué)科機(jī)械能研究時(shí)候明顯會(huì)存在吃力的現(xiàn)象。因此數(shù)據(jù)網(wǎng)絡(luò)信息化時(shí)代的當(dāng)今,設(shè)計(jì)出高效、多維度的、跨領(lǐng)域的計(jì)算機(jī)代數(shù)系統(tǒng)是重要的發(fā)展趨勢。
計(jì)算機(jī)代數(shù)是一門建立在數(shù)學(xué)和計(jì)算機(jī)之上的學(xué)科。它的運(yùn)算采用符號運(yùn)算方法,對復(fù)雜的數(shù)學(xué)公式問題進(jìn)行求解,由計(jì)算機(jī)軟硬件系統(tǒng)完成。微型計(jì)算機(jī)代數(shù)系統(tǒng)是一個(gè)包含了大量軟件的運(yùn)行平臺和處理平臺。它的代數(shù)體系有以下特點(diǎn):(1)符號操作。其基本思想是CAS語言,主要體現(xiàn)在符號的數(shù)字化表示上。運(yùn)算符號不僅包括簡化、替換等基本運(yùn)算,還包括分解、求導(dǎo)等復(fù)雜運(yùn)算。(2)高精度數(shù)字操作。計(jì)算機(jī)代數(shù)系統(tǒng)在計(jì)算過程中必須滿足用戶對大量數(shù)值計(jì)算的要求,余量必須超過10萬個(gè)。這類大型數(shù)值計(jì)算對一般編程語言而言已超出其承載范圍。計(jì)算機(jī)代數(shù)的發(fā)展對我國教育、科研具有重要意義。但是,在計(jì)算機(jī)代數(shù)教學(xué)中遇到的一些難題,只需幾步即可解決,減少了手工操作,避免了人為操作帶來的誤差。微機(jī)代數(shù)系統(tǒng)是計(jì)算機(jī)、數(shù)學(xué)、物理化學(xué)等學(xué)科研究的重要工具。目前,解決計(jì)算機(jī)代數(shù)系統(tǒng)問題的主要方法是為用戶提供一種編程語言,利用系統(tǒng)的符號運(yùn)算能力和較高的運(yùn)算精度,使得用戶的使用更加方便。
在計(jì)算機(jī)代數(shù)系統(tǒng)的發(fā)展中,人們對其的重視主要是在計(jì)算機(jī)的普及和人工智能技術(shù)等技術(shù)的興起之后。國外研發(fā)的計(jì)算機(jī)代數(shù)系統(tǒng)主要是Maple和Mathematicao,在計(jì)算機(jī)代數(shù)系統(tǒng)中編譯器的設(shè)計(jì)以及實(shí)現(xiàn)是最關(guān)鍵的步驟。
現(xiàn)如今的計(jì)算機(jī)代數(shù)系統(tǒng),無論是在哪種界面中,只要是對用戶所輸入的指令進(jìn)行接受處理過程中,核心部位的編譯器起到了十分重要的作用,編譯器對指令的識別、分析、檢查、處理等步驟進(jìn)行精確的控制,除此之外還要進(jìn)行高精確度的整數(shù)處理以及符號處理等功能,并將這些功能對應(yīng)的指令進(jìn)行分配。而對于支撐編譯器的虛擬機(jī)機(jī)解釋器部分在計(jì)算機(jī)代數(shù)系統(tǒng)中只是以輔助的形式存在,在整個(gè)系統(tǒng)功能上并不占有主導(dǎo)作用。這一設(shè)計(jì)模式的不足之處在于:編譯器模塊過大、結(jié)構(gòu)過于復(fù)雜化,使得計(jì)算機(jī)代數(shù)系統(tǒng)編譯器在進(jìn)行開發(fā)時(shí)候十分困難,進(jìn)而影響到計(jì)算機(jī)代數(shù)系統(tǒng)的維護(hù)和擴(kuò)展。本文將要進(jìn)行闡述的CMCL編譯器是區(qū)別于一般的計(jì)算機(jī)代數(shù)編譯器的,其中所涉及的GiNaC是2000年在德國研發(fā)的一種Linux開發(fā)源碼的符號計(jì)算包,在結(jié)構(gòu)中的用戶界面是CMCL對外所展示的界面,這一步驟能夠和用戶之間搭建一條通道來實(shí)現(xiàn)操作及信息的交互。如:用戶在編輯輸入框輸入需要進(jìn)行操作的指令,然后用戶界面會(huì)將這個(gè)指令傳達(dá)到位于下層的CMCL編譯器中來進(jìn)行運(yùn)算處理,然后將最終的結(jié)果反饋給用戶。
CMCL編譯器的設(shè)計(jì)籠統(tǒng)的來說有:詞法分析器、語法分析器、語義分析器、代碼生成器、解析器、表格管理、出錯(cuò)管理、主控器這幾個(gè)模塊來實(shí)現(xiàn),其中這些模塊所存在的關(guān)系如圖1所示。
圖1 模塊關(guān)系結(jié)構(gòu)圖
且各個(gè)模塊對應(yīng)的功能也不同,如:(1)詞法分析器。對程序中的存有的字符按照語言中的詞法規(guī)則進(jìn)行掃描、并同時(shí)進(jìn)行單詞符號輸出和檢查;(2)語法分析器。這一模塊是重要的核心模塊,這一模塊在編譯器對源代碼進(jìn)行處理時(shí)候,能夠?qū)υ创a中存在的字符串及符號進(jìn)行語法的識別檢查,為下一模塊的語義分析做好充足的準(zhǔn)備。(3)語義分析器。該模塊主要對源語言的類型、控制流以及唯一性進(jìn)行檢查和定義。(4)代碼生成器。該模塊是對于源代碼在經(jīng)歷上述的三個(gè)模塊后并無任何錯(cuò)誤產(chǎn)生時(shí)候,就可由這一模塊將那個(gè)源代碼轉(zhuǎn)化成虛擬機(jī)能夠理解和進(jìn)行操作的指令。(5)解釋器。解釋器是用來執(zhí)行代碼生成器所產(chǎn)生的目標(biāo)指令。(6)表格管理。該模塊是為經(jīng)歷過編譯的信息提供存儲場所,并供給信息相應(yīng)的修改、檢查功能。(7)出錯(cuò)管理模塊。這一模塊是對源代碼進(jìn)行一個(gè)診斷檢查,并精確的給出錯(cuò)誤位置和錯(cuò)誤原因。(8)主控器模塊。協(xié)助結(jié)合其他模塊機(jī)械能信息交互控制,對相應(yīng)對接用戶界面,來進(jìn)行接收用戶信息和處理結(jié)果的反饋。
編譯器的設(shè)計(jì)在每一臺目標(biāo)機(jī)中進(jìn)行設(shè)計(jì)的可行性很低,(目標(biāo)機(jī):編譯器所針對的具體機(jī)器)且編譯器在進(jìn)行運(yùn)作時(shí)候是結(jié)合硬件部位一起進(jìn)行的,因此在這時(shí)候就需要虛擬機(jī)的增設(shè)。虛擬機(jī)顧名思義就是抽象化的模擬出一個(gè)虛擬的目標(biāo)機(jī)。在CMCL編譯器中虛擬機(jī)的搭設(shè)是為了實(shí)現(xiàn)像高精確度整數(shù)的表示等這類功能而設(shè)計(jì)的。虛擬機(jī)的設(shè)計(jì)需要根據(jù)一下兩個(gè)思想來進(jìn)行:(1)源程序可移植性思想。CMCL編譯器是依賴前端及后端功能所進(jìn)行實(shí)現(xiàn)的,前端對元語言進(jìn)行處理,后端則視為目標(biāo)機(jī)的運(yùn)作。這倆個(gè)端口都利用了虛擬機(jī)來,虛擬機(jī)將前端和后端獨(dú)立分開,這樣當(dāng)需要將編譯器進(jìn)行轉(zhuǎn)移時(shí)候就能只需考慮硬件部位在進(jìn)行編譯器的后端開發(fā);(2)為特殊的數(shù)據(jù)結(jié)構(gòu)提供相應(yīng)的支持思想。在虛擬機(jī)設(shè)計(jì)中,可以通過特殊數(shù)據(jù)結(jié)構(gòu)來進(jìn)行存儲或詮釋突破常規(guī)長度的整數(shù),并在功能上賦予其加減乘除的運(yùn)算。與此同時(shí)將其數(shù)據(jù)類型進(jìn)行重新定義,進(jìn)一步深入創(chuàng)建更為復(fù)雜的數(shù)據(jù)類型。虛擬機(jī)的設(shè)計(jì)從另外一個(gè)角度講就是為了支持特殊的數(shù)據(jù)結(jié)構(gòu)所建設(shè)的。CMCL編譯器的符號計(jì)算能力很大程度上是由虛擬機(jī)來支持的。因?yàn)槲覀兊腃MCL虛擬機(jī)是被設(shè)計(jì)為支持符號計(jì)算的虛擬機(jī)。在CMCL虛擬機(jī)中,最小的數(shù)據(jù)類型被設(shè)計(jì)為支持符號計(jì)算的最小數(shù)據(jù)操作單位,因此所有在CMCL虛擬機(jī)中操作的數(shù)據(jù)單元都支持符號計(jì)算。這使得編譯器的前端可以把“符號”作為一種基本數(shù)據(jù)類型來操作,就象整型,浮點(diǎn),字符等等,而無需考慮它的存儲,表示,運(yùn)算。并且在后端代碼生成階段,所有源程序的基本類型(整型,浮點(diǎn),符號等)都轉(zhuǎn)換成虛擬機(jī)支持符號計(jì)算的類型。CMCL虛擬機(jī)中支持符號計(jì)算的基本數(shù)據(jù)類型主要是由GiNaC庫來支持。這樣的設(shè)計(jì)一方面要使得虛擬機(jī)能很容易地模擬各種語言結(jié)構(gòu)所規(guī)定的操作,另一方面還需考慮能在實(shí)際計(jì)算機(jī)上高效地實(shí)現(xiàn)虛擬機(jī)所定義的操作。虛擬機(jī)的指令是一種介于機(jī)器語言和高級程序設(shè)計(jì)語言之間的偽機(jī)器語占。它一方面與機(jī)器語言所定義的機(jī)器指令結(jié)構(gòu)相近,另一方面它也比機(jī)器指令高級,比較容易理解。
CMCL編譯器可以將一種語言過渡到另外一種語言,這一過程十分復(fù)雜。因此再進(jìn)編譯器的設(shè)計(jì)時(shí)候可以采用較為溫柔且高級的語言來進(jìn)行,如:采用自舉的研發(fā)思想方法進(jìn)行,其在研發(fā)中所給出的意思大致是用語音功能來進(jìn)行對自身的編譯,在如今已將這一想法擴(kuò)展到用高級語言功能來實(shí)現(xiàn)高級語言編譯器中。高級語言實(shí)現(xiàn)編譯器的過程簡短快速,且編譯程序易懂,便于維護(hù)。
在整個(gè)計(jì)算機(jī)代數(shù)系統(tǒng)中編譯器一直是一個(gè)核心的關(guān)鍵部位,能夠?qū)⑺鶚?gòu)成其的模塊進(jìn)行調(diào)用處理。虛擬機(jī)以作為編譯器的虛擬硬件的條件存在于計(jì)算機(jī)代數(shù)系統(tǒng)中,因此在整個(gè)系統(tǒng)中這一部位的性能決定了效率。
結(jié)束語:本文對計(jì)算機(jī)代數(shù)系統(tǒng)的背景、發(fā)展意義、編譯器設(shè)計(jì)特點(diǎn)和構(gòu)成、虛擬機(jī)的設(shè)計(jì)以及編譯器的實(shí)現(xiàn)方法進(jìn)行概述。給出了編譯器模塊中存在的關(guān)系及其各個(gè)模塊的功能,并通過假設(shè)分析法對實(shí)現(xiàn)方法進(jìn)行驗(yàn)證。除此之外還可以進(jìn)行。