Bcl工程造價(jià)計(jì)算描述語(yǔ)言及其編譯執(zhí)行方法
【專利摘要】一種BCL工程造價(jià)計(jì)算描述語(yǔ)言及其編譯執(zhí)行方法,包括三方面內(nèi)容:1、一種BCL工程造價(jià)計(jì)算描述語(yǔ)言,由設(shè)計(jì)描述具體計(jì)算算法規(guī)則的代數(shù)式及擴(kuò)展運(yùn)算表達(dá)式結(jié)構(gòu),即EL表達(dá)式和分析工程造價(jià)計(jì)算需求,確定除EL表達(dá)式以外的其它計(jì)算邏輯單元構(gòu)成;2、一種BCL語(yǔ)言的編譯執(zhí)行裝置,包括:BCL編譯器裝置、BCL腳本解析裝置和BCL執(zhí)行器裝置;3、一種BCL工程造價(jià)計(jì)算描述語(yǔ)言的編譯執(zhí)行方法。本發(fā)明可真實(shí)的還原費(fèi)用計(jì)算過(guò)程,便于用戶直觀瀏覽費(fèi)用的生成過(guò)程和數(shù)據(jù)來(lái)源等內(nèi)容。除此之外,所述BCL腳本解析裝置提供BCL對(duì)象集合與BCL腳本文件之間的相互轉(zhuǎn)換功能,實(shí)現(xiàn)一次生成多次執(zhí)行,從而有效提高執(zhí)行效率。
【專利說(shuō)明】BCL工程造價(jià)計(jì)算描述語(yǔ)言及其編譯執(zhí)行方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于工程造價(jià)計(jì)算領(lǐng)域,具體涉及一種BCL工程造價(jià)計(jì)算描述語(yǔ)言及其編譯執(zhí)行方法,實(shí)現(xiàn)工程造價(jià)計(jì)算并還原費(fèi)用計(jì)算過(guò)程進(jìn)行直觀驗(yàn)證。
【背景技術(shù)】
[0002]計(jì)算描述語(yǔ)言是一種由標(biāo)準(zhǔn)代數(shù)式或代數(shù)式組擴(kuò)展而來(lái)的可伸縮式的編程語(yǔ)言,它符合一定文法要求,能夠用于解決各種應(yīng)用領(lǐng)域的計(jì)算問(wèn)題。區(qū)別于其它領(lǐng)域,工程造價(jià)領(lǐng)域的計(jì)算給計(jì)算描述語(yǔ)言提出了新的需求。首先,工程造價(jià)計(jì)算數(shù)據(jù)額度往往很大,且各階段要求的精度不一。現(xiàn)有工程造價(jià)計(jì)算方法采用的浮點(diǎn)數(shù)運(yùn)算存在天生的精度問(wèn)題,勢(shì)必形成數(shù)據(jù)誤差,導(dǎo)致難以應(yīng)對(duì)嚴(yán)格的費(fèi)用審查。其次,工程造價(jià)計(jì)算數(shù)據(jù)具備層次性和個(gè)別性,決定了以簡(jiǎn)單數(shù)學(xué)表達(dá)式為導(dǎo)向的現(xiàn)有計(jì)算方式已無(wú)法滿足需求,設(shè)計(jì)具備一定結(jié)構(gòu)和規(guī)則的計(jì)算邏輯單元?jiǎng)菰诒匦小?br>
[0003]目前,現(xiàn)有計(jì)算描述語(yǔ)言針對(duì)通用計(jì)算需求而設(shè)計(jì),無(wú)法應(yīng)對(duì)工程造價(jià)計(jì)算需求。它是將表達(dá)式作為唯一計(jì)算邏輯單元,計(jì)算流程由具有嚴(yán)格順序的表達(dá)式序列表示。當(dāng)面臨大數(shù)據(jù)量或復(fù)雜算法的計(jì)算需求時(shí),難以直觀理解計(jì)算過(guò)程,且容易造成失誤。同時(shí),由于現(xiàn)有計(jì)算描述語(yǔ)言的編譯 執(zhí)行裝置在接收并處理計(jì)算請(qǐng)求后,只輸出計(jì)算結(jié)果值,而計(jì)算過(guò)程及過(guò)程數(shù)據(jù)無(wú)法體現(xiàn),導(dǎo)致用戶不能直觀驗(yàn)證數(shù)據(jù)的正確性、費(fèi)用審核不便。
【發(fā)明內(nèi)容】
[0004]本發(fā)明旨在提供一種簡(jiǎn)單易用、且執(zhí)行高效的工程造價(jià)計(jì)算描述語(yǔ)言及其編譯執(zhí)行方法,實(shí)現(xiàn)在滿足復(fù)雜工程造價(jià)計(jì)算需求的同時(shí),有效記錄并還原工程造價(jià)計(jì)算過(guò)程,解決計(jì)算結(jié)果正確性無(wú)法直觀驗(yàn)證問(wèn)題。
[0005]為實(shí)現(xiàn)以上目的,本發(fā)明根據(jù)工程造價(jià)計(jì)算需求,提供以下技術(shù)方案:
一種BCL工程造價(jià)計(jì)算描述語(yǔ)言,它能獨(dú)立于不同產(chǎn)品、項(xiàng)目,具有開(kāi)發(fā)語(yǔ)言無(wú)關(guān)性和平臺(tái)無(wú)關(guān)性。其實(shí)現(xiàn)過(guò)程包括了:
(I)設(shè)計(jì)描述具體計(jì)算算法規(guī)則的代數(shù)式及擴(kuò)展運(yùn)算表達(dá)式結(jié)構(gòu),即EL表達(dá)式;
所述EL表達(dá)式是對(duì)計(jì)算算法規(guī)則的一個(gè)完整描述,以${和}作為起始和結(jié)束標(biāo)記;它在沿襲傳統(tǒng)代數(shù)表達(dá)式運(yùn)算特點(diǎn)的同時(shí),支持用于包含多種表達(dá)式選擇的條件選擇運(yùn)算和完成具體計(jì)算規(guī)則的函數(shù)運(yùn)算在內(nèi)的其它高級(jí)運(yùn)算功能。與傳統(tǒng)代數(shù)運(yùn)算不同,所述EL表達(dá)式包含種類多元化的操作數(shù),支持?jǐn)?shù)值、字符串和變量等類型,其中,變量類型操作數(shù)是所述EL表達(dá)式支持動(dòng)態(tài)數(shù)據(jù)掛接的典型體現(xiàn),其值可以為外部對(duì)象的引用,也可以為執(zhí)行階段設(shè)定的具體數(shù)據(jù)值;
所述條件選擇表達(dá)式以#{和}作為起始和結(jié)束標(biāo)記,其內(nèi)部包含多個(gè)條件分支和至多一個(gè)缺省條件分支,每個(gè)分支對(duì)應(yīng)一個(gè)EL表達(dá)式,整個(gè)條件選擇表達(dá)式的取值為當(dāng)前被激活條件分支對(duì)應(yīng)的EL表達(dá)式計(jì)算結(jié)果,如:
#{->條件1: EL表達(dá)式1 ;
->條件2: EL表達(dá)式2 ;
->:EL表達(dá)式3;
}
所述函數(shù)運(yùn)算定義了具體的計(jì)算規(guī)則,以滿足工程造價(jià)特定計(jì)算需求;其語(yǔ)法結(jié)構(gòu)與C語(yǔ)言兼容,并支持BCL的擴(kuò)展數(shù)據(jù)類型;除此之外,所述函數(shù)的調(diào)用還支持把EL表達(dá)式作為參數(shù)進(jìn)行輸入,能夠?qū)崿F(xiàn)指定工程數(shù)據(jù)范圍與EL表達(dá)式的動(dòng)態(tài)綁定,進(jìn)而減少表達(dá)式代碼冗余,語(yǔ)法格式為:
sum (數(shù)據(jù)源標(biāo)記,數(shù)據(jù)源包裝名,? EL表達(dá)式);
(2)分析工程造價(jià)計(jì)算需求,確定除EL表達(dá)式以外的其它計(jì)算邏輯單元;
通過(guò)對(duì)造價(jià)工程數(shù)據(jù)及計(jì)算算法、過(guò)程的總結(jié)歸納,得出任何工程的工程造價(jià)復(fù)雜計(jì)算算法都可分解為最小的原子計(jì)算邏輯單元,即:EL表達(dá)式、宏表、變量、參數(shù)、數(shù)據(jù)源和包。其中,所述宏表能完整的表示一個(gè)具有遞歸、多字段、多記錄、有匯總關(guān)系的計(jì)算規(guī)則。所述數(shù)據(jù)源用于描述一個(gè)工程的數(shù)據(jù)及其數(shù)據(jù)范圍,它是BCL語(yǔ)言與工程數(shù)據(jù)的粘合劑,實(shí)現(xiàn)真實(shí)數(shù)據(jù)的傳遞。所述變量是包含數(shù)據(jù)源、數(shù)據(jù)過(guò)濾算法以及費(fèi)用計(jì)算算法規(guī)則在內(nèi)的具體費(fèi)用計(jì)算結(jié)構(gòu),相較與僅包含具體數(shù)值的參數(shù)而言,變量的計(jì)算有一定的先后次序,更為復(fù)雜,但功能強(qiáng)大。所述包為其它原子計(jì)算邏輯單元的容器,能劃定計(jì)算邏輯單元的作用范圍,屏蔽命名沖突。
[0006]一種BCL語(yǔ)言的編譯執(zhí)行裝置,包括:BCL編譯器裝置、BCL腳本解析裝置和BCL執(zhí)行器裝置。
[0007]所述BCL編譯器裝置用于對(duì)外界輸入的待計(jì)算BCL元素進(jìn)行編譯處理,形成包含BCL語(yǔ)法樹(shù)結(jié)構(gòu)的BCL對(duì)象。內(nèi)部過(guò)程涉及工程反應(yīng)器模塊、工程環(huán)境模塊、工程文件解析模塊、工程語(yǔ)法分析模塊和分析上下文模塊。其中,待計(jì)算BCL元素由工程文件解析模塊生成,被傳遞給工程語(yǔ)法分析模塊。依據(jù)BCL元素類型的不同,控制BCL元素編譯,獲取相應(yīng)待計(jì)算EL表達(dá)式集合,在分析上下文模塊的協(xié)助下,對(duì)其進(jìn)行詞法和語(yǔ)法分析,生成被稱之為BCL語(yǔ)法樹(shù)的內(nèi)存對(duì)象,并關(guān)聯(lián)到相應(yīng)BCL對(duì)象中。
[0008]其中,所述BCL元素是本發(fā)明的最小待計(jì)算單元,內(nèi)部包含描述計(jì)算算法規(guī)則的EL表達(dá)式集合。與BCL語(yǔ)言體系中的原子計(jì)算邏輯單元相對(duì)應(yīng),BCL元素至少應(yīng)包含BCL包元素、BCL變量元素、BCL宏表元素、BCL記錄元素、BCL字段元素、BCL參數(shù)元素和BCL數(shù)據(jù)源元素七種。其中,BCL包元素作為其它元素的容器存在,不具備值表達(dá)式。而B(niǎo)CL變量元素包含BCL數(shù)據(jù)源元素對(duì)象、過(guò)濾表達(dá)式和值表達(dá)式,通過(guò)執(zhí)行過(guò)濾表達(dá)式,可從數(shù)據(jù)來(lái)源中篩選形成符合條件的數(shù)據(jù)范圍,應(yīng)用于其值表達(dá)式的計(jì)算過(guò)程當(dāng)中。
[0009]所述BCL腳本解析裝置包含了 BCL腳本文件生成器和腳本解析器,用于實(shí)現(xiàn)BCL對(duì)象集合與BCL腳本文件之間的相互轉(zhuǎn)換,能夠有效記錄或還原指定BCL對(duì)象,避免在同一計(jì)算需求下重復(fù)編譯處理,有效減少工程造價(jià)計(jì)算時(shí)間。
[0010]所述BCL執(zhí)行器裝置在經(jīng)編譯處理之后,解釋執(zhí)行生成的BCL對(duì)象,將過(guò)程數(shù)據(jù)和計(jì)算結(jié)果分別存儲(chǔ)在BCL語(yǔ)法樹(shù)結(jié)點(diǎn)和BCL對(duì)象當(dāng)中。為實(shí)現(xiàn)以上功能,BCL執(zhí)行器裝置內(nèi)部需包含BCL對(duì)象計(jì)算模塊、結(jié)點(diǎn)計(jì)算模塊、運(yùn)行上下文模塊、函數(shù)注冊(cè)器模塊和數(shù)據(jù)包裝模塊。其中,BCL對(duì)象計(jì)算模塊控制BCL對(duì)象的解釋執(zhí)行過(guò)程,利用結(jié)點(diǎn)計(jì)算模塊對(duì)BCL對(duì)象內(nèi)部包含的BCL語(yǔ)法樹(shù)中的每個(gè)結(jié)點(diǎn)進(jìn)行計(jì)算,并將計(jì)算過(guò)程和過(guò)程數(shù)據(jù)記錄在各結(jié)點(diǎn)當(dāng)中,進(jìn)而獲取計(jì)算結(jié)果數(shù)據(jù),完成執(zhí)行任務(wù)。
[0011]一種BCL工程造價(jià)計(jì)算描述語(yǔ)言的編譯執(zhí)行方法,其步驟如下:
第一步:分析BCL元素,獲取待計(jì)算EL表達(dá)式集合;
根據(jù)BCL元素類型的不同,采取不同的分析過(guò)程,包括:
(1)若為BCL包元素,則先轉(zhuǎn)向執(zhí)行第四步。再將該包元素中的所有BCL元素轉(zhuǎn)向執(zhí)行
第一步;
(2)若為BCL宏表元素,則先將內(nèi)部包含的所有BCL記錄元素轉(zhuǎn)向執(zhí)行第一步,再獲取當(dāng)前宏表元素對(duì)應(yīng)的EL值表達(dá)式;
(3)若為BCL記錄元素,則先將內(nèi)部包含的所有BCL記錄元素和BCL字段元素執(zhí)行第一步,再獲取該記錄元素對(duì)應(yīng)的EL值表達(dá)式;
(4)若為BCL字段元素,則直接獲取當(dāng)前字段元素對(duì)應(yīng)的EL值表達(dá)式;
(5 )若為BCL變量元素,則先從工程反應(yīng)器對(duì)象中獲取當(dāng)前變量元素對(duì)應(yīng)的BCL數(shù)據(jù)源元素,生成相應(yīng)BCL數(shù)據(jù)源對(duì)象。并關(guān)聯(lián)到當(dāng)前分析上下文對(duì)象中,然后獲取變量元素對(duì)應(yīng)的過(guò)濾表達(dá)式及值表達(dá)式;
(6)若為BCL參數(shù)或數(shù)據(jù)源元素時(shí),則轉(zhuǎn)向執(zhí)行第四步。
[0012]第二步:對(duì)EL表達(dá)式進(jìn)行詞法分析,生成有效單詞序列;
第三步:在工程反應(yīng)數(shù)據(jù)及工程環(huán)境數(shù)據(jù)的協(xié)同下,采用專用語(yǔ)法分析器,處理序列中的所有單詞,生成相應(yīng)BCL語(yǔ)法樹(shù)結(jié)點(diǎn),進(jìn)而形成完整的BCL語(yǔ)法樹(shù)。該過(guò)程若存在語(yǔ)法錯(cuò)誤,則轉(zhuǎn)向執(zhí)行第九步;
BCL語(yǔ)法樹(shù)結(jié)點(diǎn)包含結(jié)點(diǎn)值屬性、結(jié)點(diǎn)類型屬性、當(dāng)前結(jié)點(diǎn)引用的對(duì)象地址值以及左右結(jié)點(diǎn)的關(guān)聯(lián)屬性。當(dāng)單詞類型為變量型操作數(shù)時(shí),語(yǔ)法分析器將該單詞傳遞給當(dāng)前分析上下文模塊,進(jìn)行變量匹配。若匹配不成功,則生成未知變量結(jié)點(diǎn);若匹配成功,則創(chuàng)建引用變量結(jié)點(diǎn)。分析匹配結(jié)果類型,若為BCL元素,則先將該BCL元素進(jìn)行編譯處理,生成對(duì)應(yīng)BCL對(duì)象,作為當(dāng)前引用變量結(jié)點(diǎn)的外部引用對(duì)象。若為BCL對(duì)象,則直接將當(dāng)前引用變量結(jié)點(diǎn)指向該BCL對(duì)象。
[0013]第四步,創(chuàng)建相應(yīng)BCL對(duì)象,并關(guān)聯(lián)經(jīng)語(yǔ)法分析后得到的BCL語(yǔ)法樹(shù);
此時(shí),為避免同一計(jì)算需求下的重復(fù)編譯,可利用BCL腳本文件生成器和腳本解析器分別生成和解析工程BCL腳本文件,實(shí)現(xiàn)記錄和還原編譯結(jié)果,從而有效提高執(zhí)行效率。
[0014]第五步,通過(guò)對(duì)生成的BCL對(duì)象進(jìn)行分析,獲取待計(jì)算BCL語(yǔ)法樹(shù)對(duì)象;
根據(jù)BCL對(duì)象類型的不同,采取不同分析方式:
(1)若為BCL包對(duì)象,則將當(dāng)前包對(duì)象中的所有BCL對(duì)象執(zhí)行第五步;
(2)若為BCL宏表、記錄或字段對(duì)象,則先讓內(nèi)部對(duì)象執(zhí)行第五步,再將其對(duì)象本身對(duì)應(yīng)的BCL語(yǔ)法樹(shù)執(zhí)行第六步,得到當(dāng)前對(duì)象的結(jié)果值;
(3)若為BCL變量對(duì)象,則先將過(guò)濾表達(dá)式對(duì)應(yīng)的BCL語(yǔ)法樹(shù)執(zhí)行第六步,對(duì)原始BCL數(shù)據(jù)源進(jìn)行過(guò)濾,再將值表達(dá)式對(duì)應(yīng)的BCL語(yǔ)法樹(shù)對(duì)象執(zhí)行第六步,得到當(dāng)前變量對(duì)象的結(jié)果值;
(4)若為BCL參數(shù)或數(shù)據(jù)源對(duì)象時(shí),則不做處理。
[0015]第六步,解釋執(zhí)行當(dāng)前BCL語(yǔ)法樹(shù),按照后序遍歷的方式處理語(yǔ)法樹(shù)中的結(jié)點(diǎn)。同時(shí),將計(jì)算過(guò)程及過(guò)程數(shù)據(jù)保存在BCL語(yǔ)法樹(shù)的各個(gè)結(jié)點(diǎn)當(dāng)中;
該過(guò)程涉及的處理包括:
(1)若當(dāng)前結(jié)點(diǎn)為傳統(tǒng)代數(shù)運(yùn)算符結(jié)點(diǎn),則分別計(jì)算并獲取左右結(jié)點(diǎn)值,作為左右操作數(shù),進(jìn)行代數(shù)運(yùn)算,并將運(yùn)算結(jié)果值作為當(dāng)前結(jié)點(diǎn)的值;
(2)若當(dāng)前結(jié)點(diǎn)為引用變量結(jié)點(diǎn),則將該結(jié)點(diǎn)對(duì)應(yīng)的外部引用對(duì)象的值作為當(dāng)前結(jié)點(diǎn)的結(jié)果值;
(3)若當(dāng)前結(jié)點(diǎn)為函數(shù)參數(shù)EL表達(dá)式結(jié)點(diǎn),則忽略計(jì)算該結(jié)點(diǎn)及其左右子樹(shù),待執(zhí)行相應(yīng)函數(shù)時(shí),再進(jìn)行計(jì)算;
(4)若當(dāng)前結(jié)點(diǎn)為函數(shù)結(jié)點(diǎn),則利用函數(shù)注冊(cè)器,匹配并執(zhí)行相應(yīng)函數(shù);
(5)若當(dāng)前結(jié)點(diǎn)為未知變量結(jié)點(diǎn),則匹配并設(shè)置為當(dāng)前運(yùn)行上下文中數(shù)據(jù)源的屬性
值;
第七步,判斷是否存在錯(cuò)誤信息,若存在,則轉(zhuǎn)向執(zhí)行第九步;反之,執(zhí)行第八步;第八步,將BCL語(yǔ)法樹(shù)對(duì)象的根結(jié)點(diǎn)的值作為當(dāng)前BCL對(duì)象的結(jié)果值,進(jìn)而完成執(zhí)行任務(wù),流程結(jié)束;
第九步,生成相應(yīng)錯(cuò)誤信息報(bào)表,流程結(jié)束。
[0016]本發(fā)明的有益效果是:本發(fā)明所述的BCL工程造價(jià)計(jì)算描述語(yǔ)言及其編譯執(zhí)行方法是在現(xiàn)有計(jì)算描述語(yǔ)言的基礎(chǔ)上,針對(duì)工程造價(jià)的特點(diǎn)而設(shè)計(jì)。通過(guò)設(shè)計(jì)具有高級(jí)運(yùn)算功能的EL表達(dá)式和具有一定結(jié)構(gòu)和規(guī)則的多元化計(jì)算邏輯單元,能夠滿足工程造價(jià)計(jì)算算法多樣性、計(jì)算數(shù)據(jù)層次性和個(gè)別性需求。同時(shí),由于所述編譯執(zhí)行方法采用邊計(jì)算邊記錄的形式,將計(jì)算過(guò)程和過(guò)程數(shù)據(jù)保存在BCL語(yǔ)法樹(shù)的各個(gè)結(jié)點(diǎn)當(dāng)中。因此,可以真實(shí)的還原費(fèi)用計(jì)算過(guò)程,便于用戶直觀瀏覽費(fèi)用的生成過(guò)程和數(shù)據(jù)來(lái)源等內(nèi)容。除此之外,所述BCL腳本解析裝置提供BCL對(duì)象集合與BCL腳本文件之間的相互轉(zhuǎn)換功能,實(shí)現(xiàn)一次生成多次執(zhí)行,從而有效提高執(zhí)行效率。
【專利附圖】
【附圖說(shuō)明】
[0017]圖1是本發(fā)明實(shí)施例中BCL語(yǔ)言的編譯執(zhí)行機(jī)制圖;
圖2是本發(fā)明實(shí)施例給出的一種BCL語(yǔ)言的編譯執(zhí)行流程示意圖;
圖3是本發(fā)明實(shí)施例中BCL對(duì)象內(nèi)部和與其它BCL對(duì)象之間的數(shù)據(jù)結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0018]下面將結(jié)合本發(fā)明實(shí)施例,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0019]本發(fā)明實(shí)施例以電力工程造價(jià)費(fèi)用計(jì)算為例,提供一種BCL語(yǔ)言的編譯執(zhí)行實(shí)現(xiàn)機(jī)制,如圖1所示。該實(shí)現(xiàn)機(jī)制的具體實(shí)施過(guò)程包括了以下三個(gè)步驟,參照?qǐng)D2可知:
步驟Al:初始化工程環(huán)境模塊數(shù)據(jù),注冊(cè)變量模板、通用函數(shù)、業(yè)務(wù)函數(shù)和數(shù)據(jù)源包
裝;
工程環(huán)境模塊提供工程造價(jià)費(fèi)用計(jì)算所需的通用業(yè)務(wù)支持,與特定工程造價(jià)文件數(shù)據(jù)無(wú)關(guān)。其中,變量模板是采用BCL語(yǔ)言重新編寫(xiě)的工程造價(jià)計(jì)算算法,它具有通用性、易讀性及可配置性等優(yōu)點(diǎn);
步驟A2:解析工程造價(jià)文件,形成待計(jì)算BCL元素并配置工程反應(yīng)器模塊數(shù)據(jù);
針對(duì)工程造價(jià)文件中包含的計(jì)算需求,生成相應(yīng)種類和數(shù)量的待計(jì)算BCL元素。以電力工程造價(jià)中單個(gè)項(xiàng)目劃分為例,內(nèi)部包含的取費(fèi)宏表生成對(duì)應(yīng)BCL宏表元素,其對(duì)應(yīng)的工程量作為BCL數(shù)據(jù)源元素配置存儲(chǔ)在工程反應(yīng)器模塊中,參與后續(xù)BCL元素的計(jì)算;步驟A3:對(duì)BCL元素進(jìn)行編譯執(zhí)行,生成包含計(jì)算過(guò)程和過(guò)程數(shù)據(jù)的BCL對(duì)象,得出計(jì)算結(jié)果,保存在工程造價(jià)文件中。
[0020]采用專用語(yǔ)法分析器,在工程反應(yīng)數(shù)據(jù)及工程環(huán)境數(shù)據(jù)的協(xié)同下,把待計(jì)算BCL元素編譯成BCL語(yǔ)法樹(shù),進(jìn)而生成具有層次結(jié)構(gòu)的BCL對(duì)象(如圖3所示)存入BCL文檔中。此時(shí),為避免同一計(jì)算需求下的重復(fù)編譯,可利用BCL腳本文件生成器和腳本解析器分別生成和解析工程BCL腳本文件,以記錄和還原編譯結(jié)果。解釋執(zhí)行BCL對(duì)象,依據(jù)相應(yīng)BCL數(shù)據(jù)源元素指定的數(shù)據(jù)范圍,通過(guò)數(shù)據(jù)源包裝對(duì)象關(guān)聯(lián)真實(shí)數(shù)據(jù),調(diào)用相關(guān)函數(shù),計(jì)算得出過(guò)程數(shù)據(jù)和結(jié)果數(shù)據(jù),分別保存在BCL語(yǔ)法樹(shù)結(jié)點(diǎn)和BCL對(duì)象中。通過(guò)持久化操作,生成包含計(jì)算結(jié)果和計(jì)算軌跡在內(nèi)的計(jì)算結(jié)果文件,存入工程文件當(dāng)中。
【權(quán)利要求】
1.BCL工程造價(jià)計(jì)算描述語(yǔ)言及其編譯執(zhí)行方法,其特征在于: 一種BCL工程造價(jià)計(jì)算描述語(yǔ)言,其實(shí)現(xiàn)過(guò)程包括: (1)設(shè)計(jì)描述具體計(jì)算算法規(guī)則的代數(shù)式及擴(kuò)展運(yùn)算表達(dá)式結(jié)構(gòu),即EL表達(dá)式; 所述EL表達(dá)式是對(duì)計(jì)算算法規(guī)則的一個(gè)完整描述,以${和}作為起始和結(jié)束標(biāo)記;它在沿襲傳統(tǒng)代數(shù)表達(dá)式運(yùn)算特點(diǎn)的同時(shí),支持用于包含多種表達(dá)式選擇的條件選擇運(yùn)算和完成具體計(jì)算規(guī)則的函數(shù)運(yùn)算在內(nèi)的其它高級(jí)運(yùn)算功能; 與傳統(tǒng)代數(shù)運(yùn)算不同,所述EL表達(dá)式包含種類多元化的操作數(shù),支持?jǐn)?shù)值、字符串和變量等類型,其中,變量類型操作數(shù)是所述EL表達(dá)式支持動(dòng)態(tài)數(shù)據(jù)掛接的典型體現(xiàn),其值可以為外部對(duì)象的引用,也可以為執(zhí)行階段設(shè)定的具體數(shù)據(jù)值; 所述條件選擇表達(dá)式以#{和}作為起始和結(jié)束標(biāo)記,其內(nèi)部包含多個(gè)條件分支和至多一個(gè)缺省條件分支,每個(gè)分支對(duì)應(yīng)一個(gè)EL表達(dá)式,整個(gè)條件選擇表達(dá)式的取值為當(dāng)前被激活條件分支對(duì)應(yīng)的EL表達(dá)式計(jì)算結(jié)果,如:
#{
->條件1: EL表達(dá)式I ;
->條件2: EL表達(dá)式2 ;
->:EL表達(dá)式3;
} 所述函數(shù)運(yùn)算定義了具體的計(jì)算規(guī)則,以滿足工程造價(jià)特定計(jì)算需求;其語(yǔ)法結(jié)構(gòu)與C語(yǔ)言兼容,并支持BCL的擴(kuò)展數(shù)據(jù)類型;除此之外,所述函數(shù)的調(diào)用還支持把EL表達(dá)式作為參數(shù)進(jìn)行輸入,能夠?qū)崿F(xiàn)指定工程數(shù)據(jù)范圍與EL表達(dá)式的動(dòng)態(tài)綁定,進(jìn)而減少表達(dá)式代碼冗余,語(yǔ)法格式為: sum (數(shù)據(jù)源標(biāo)記,數(shù)據(jù)源包裝名,? EL表達(dá)式); (2)分析工程造價(jià)計(jì)算需求,確定除EL表達(dá)式以外的其它計(jì)算邏輯單元; 通過(guò)對(duì)造價(jià)工程數(shù)據(jù)及計(jì)算算法、過(guò)程的總結(jié)歸納,得出任何工程的工程造價(jià)復(fù)雜計(jì)算算法都可分解為最小的原子計(jì)算邏輯單元,即:EL表達(dá)式、宏表、變量、參數(shù)、數(shù)據(jù)源和包;其中,所述宏表能完整的表示一個(gè)具有遞歸、多字段、多記錄、有匯總關(guān)系的計(jì)算規(guī)則;所述數(shù)據(jù)源用于描述一個(gè)工程的數(shù)據(jù)及其數(shù)據(jù)范圍,它是BCL語(yǔ)言與工程數(shù)據(jù)的粘合劑,實(shí)現(xiàn)真實(shí)數(shù)據(jù)的傳遞; 所述變量是包含數(shù)據(jù)源、數(shù)據(jù)過(guò)濾算法以及費(fèi)用計(jì)算算法規(guī)則在內(nèi)的具體費(fèi)用計(jì)算結(jié)構(gòu),相較與僅包含具體數(shù)值的參數(shù)而言,變量的計(jì)算有一定的先后次序,更為復(fù)雜,但功能強(qiáng)大;所述包為其它原子計(jì)算邏輯單元的容器,能劃定計(jì)算邏輯單元的作用范圍,屏蔽命名沖突; 一種BCL語(yǔ)言的編譯執(zhí)行裝置,包括:BCL編譯器裝置、BCL腳本解析裝置和BCL執(zhí)行器裝置; 所述BCL編譯器裝置用于對(duì)外界輸入的待計(jì)算BCL元素進(jìn)行編譯處理,形成包含BCL語(yǔ)法樹(shù)結(jié)構(gòu)的BCL對(duì)象;內(nèi)部過(guò)程涉及工程反應(yīng)器模塊、工程環(huán)境模塊、工程文件解析模塊、工程語(yǔ)法分析模塊和分析上下文模塊; 其中,待計(jì)算BCL元素由工程文件解析模塊生成,被傳遞給工程語(yǔ)法分析模塊;依據(jù)BCL元素類型的不同,控制BCL元素編譯,獲取相應(yīng)待計(jì)算EL表達(dá)式集合,在分析上下文模塊的協(xié)助下,對(duì)其進(jìn)行詞法和語(yǔ)法分析,生成被稱之為BCL語(yǔ)法樹(shù)的內(nèi)存對(duì)象,并關(guān)聯(lián)到相應(yīng)BCL對(duì)象中; 其中,所述BCL元素是本發(fā)明的最小待計(jì)算單元,內(nèi)部包含描述計(jì)算算法規(guī)則的EL表達(dá)式集合;與BCL語(yǔ)言體系中的原子計(jì)算邏輯單元相對(duì)應(yīng),BCL元素至少應(yīng)包含BCL包元素、BCL變量元素、BCL宏表元素、BCL記錄元素、BCL字段元素、BCL參數(shù)元素和BCL數(shù)據(jù)源元素七種;其中,BCL包元素作為其它元素的容器存在,不具備值表達(dá)式; 而B(niǎo)CL變量元素包含BCL數(shù)據(jù)源元素對(duì)象、過(guò)濾表達(dá)式和值表達(dá)式,通過(guò)執(zhí)行過(guò)濾表達(dá)式,可從數(shù)據(jù)來(lái)源中篩選形成符合條件的數(shù)據(jù)范圍,應(yīng)用于其值表達(dá)式的計(jì)算過(guò)程當(dāng)中;所述BCL腳本解析裝置包含了 BCL腳本文件生成器和腳本解析器,用于實(shí)現(xiàn)BCL對(duì)象集合與BCL腳本文件之間的相互轉(zhuǎn)換,能夠有效記錄或還原指定BCL對(duì)象,避免在同一計(jì)算需求下重復(fù)編譯處理,有效減少工程造價(jià)計(jì)算時(shí)間; 所述BCL執(zhí)行器裝置在經(jīng)編譯處理之后,解釋執(zhí)行生成的BCL對(duì)象,將過(guò)程數(shù)據(jù)和計(jì)算結(jié)果分別存儲(chǔ)在BCL語(yǔ)法樹(shù)結(jié)點(diǎn)和BCL對(duì)象當(dāng)中; 為實(shí)現(xiàn)以上功能,BCL執(zhí)行器裝置內(nèi)部需包含BCL對(duì)象計(jì)算模塊、結(jié)點(diǎn)計(jì)算模塊、運(yùn)行上下文模塊、函數(shù)注冊(cè)器模塊和數(shù)據(jù)包裝模塊;其中,BCL對(duì)象計(jì)算模塊控制BCL對(duì)象的解釋執(zhí)行過(guò)程,利用結(jié)點(diǎn)計(jì)算模塊對(duì)BCL對(duì)象內(nèi)部包含的BCL語(yǔ)法樹(shù)中的每個(gè)結(jié)點(diǎn)進(jìn)行計(jì)算,并將計(jì)算過(guò)程和過(guò)程數(shù)據(jù)記錄在各結(jié)點(diǎn)當(dāng)中,進(jìn)而獲取計(jì)算結(jié)果數(shù)據(jù),完成執(zhí)行任務(wù); 一種BCL工程造價(jià)計(jì)算描述語(yǔ)言的編譯執(zhí)行方法,其步驟如下: 第一步:分析BCL元素,獲取待計(jì)算EL表達(dá)式集合; 根據(jù)BCL元素類型的不同,采取不同的分析過(guò)程,包括: (1)若為BCL包元素,則先轉(zhuǎn)向執(zhí)行第四步; 再將該包元素中的所有BCL元素轉(zhuǎn)向執(zhí)行第一步; (2)若為BCL宏表元素,則先將內(nèi)部包含的所有BCL記錄元素轉(zhuǎn)向執(zhí)行第一步,再獲取當(dāng)前宏表元素對(duì)應(yīng)的EL值表達(dá)式; (3)若為BCL記錄元素,則先將內(nèi)部包含的所有BCL記錄元素和BCL字段元素執(zhí)行第一步,再獲取該記錄元素對(duì)應(yīng)的EL值表達(dá)式; (4)若為BCL字段元素,則直接獲取當(dāng)前字段元素對(duì)應(yīng)的EL值表達(dá)式; (5 )若為BCL變量元素,則先從工程反應(yīng)器對(duì)象中獲取當(dāng)前變量元素對(duì)應(yīng)的BCL數(shù)據(jù)源元素,生成相應(yīng)BCL數(shù)據(jù)源對(duì)象;并關(guān)聯(lián)到當(dāng)前分析上下文對(duì)象中,然后獲取變量元素對(duì)應(yīng)的過(guò)濾表達(dá)式及值表達(dá)式; (6 )若為BCL參數(shù)或數(shù)據(jù)源元素時(shí),則轉(zhuǎn)向執(zhí)行第四步; 第二步:對(duì)EL表達(dá)式進(jìn)行詞法分析,生成有效單詞序列; 第三步:在工程反應(yīng)數(shù)據(jù)及工程環(huán)境數(shù)據(jù)的協(xié)同下,采用專用語(yǔ)法分析器,處理序列中的所有單詞,生成相應(yīng)BCL語(yǔ)法樹(shù)結(jié)點(diǎn),進(jìn)而形成完整的BCL語(yǔ)法樹(shù);該過(guò)程若存在語(yǔ)法錯(cuò)誤,則轉(zhuǎn)向執(zhí)行第九步; BCL語(yǔ)法樹(shù)結(jié)點(diǎn)包含結(jié)點(diǎn)值屬性、結(jié)點(diǎn)類型屬性、當(dāng)前結(jié)點(diǎn)引用的對(duì)象地址值以及左右結(jié)點(diǎn)的關(guān)聯(lián)屬性;當(dāng)單詞類型為變量型操作數(shù)時(shí),語(yǔ)法分析器將該單詞傳遞給當(dāng)前分析上下文模塊,進(jìn)行變量匹配; 若匹配不成功,則生成未知變量結(jié)點(diǎn);若匹配成功,則創(chuàng)建引用變量結(jié)點(diǎn);分析匹配結(jié)果類型,若為BCL元素,則先將該BCL元素進(jìn)行編譯處理,生成對(duì)應(yīng)BCL對(duì)象,作為當(dāng)前引用變量結(jié)點(diǎn)的外部引用對(duì)象; 若為BCL對(duì)象,則直接將當(dāng)前引用變量結(jié)點(diǎn)指向該BCL對(duì)象; 第四步,創(chuàng)建相應(yīng)BCL對(duì)象,并關(guān)聯(lián)經(jīng)語(yǔ)法分析后得到的BCL語(yǔ)法樹(shù); 此時(shí),為避免同一計(jì)算需求下的重復(fù)編譯,可利用BCL腳本文件生成器和腳本解析器分別生成和解析工程BCL腳本文件,實(shí)現(xiàn)記錄和還原編譯結(jié)果,從而有效提高執(zhí)行效率;第五步,通過(guò)對(duì)生成的BCL對(duì)象進(jìn)行分析,獲取待計(jì)算BCL語(yǔ)法樹(shù)對(duì)象; 根據(jù)BCL對(duì)象類型的不同,采取不同分析方式: (1)若為BCL包對(duì)象,則將當(dāng)前包對(duì)象中的所有BCL對(duì)象執(zhí)行第五步; (2)若為BCL宏表、記錄或字段對(duì)象,則先讓內(nèi)部對(duì)象執(zhí)行第五步,再將其對(duì)象本身對(duì)應(yīng)的BCL語(yǔ)法樹(shù)執(zhí)行第六步,得到當(dāng)前對(duì)象的結(jié)果值; (3)若為BCL變量對(duì)象,則先將過(guò)濾表達(dá)式對(duì)應(yīng)的BCL語(yǔ)法樹(shù)執(zhí)行第六步,對(duì)原始BCL數(shù)據(jù)源進(jìn)行過(guò)濾,再將值表達(dá)式對(duì)應(yīng)的BCL語(yǔ)法樹(shù)對(duì)象執(zhí)行第六步,得到當(dāng)前變量對(duì)象的結(jié)果值; (4)若為BCL參數(shù)或數(shù)據(jù)源對(duì)象時(shí),則不做處理; 第六步,解釋執(zhí)行當(dāng)前BCL語(yǔ)法樹(shù),按照后序遍歷的方式處理語(yǔ)法樹(shù)中的結(jié)點(diǎn); 同時(shí),將計(jì)算過(guò)程及過(guò) 程數(shù)據(jù)保存在BCL語(yǔ)法樹(shù)的各個(gè)結(jié)點(diǎn)當(dāng)中; 該過(guò)程涉及的處理包括: (1)若當(dāng)前結(jié)點(diǎn)為傳統(tǒng)代數(shù)運(yùn)算符結(jié)點(diǎn),則分別計(jì)算并獲取左右結(jié)點(diǎn)值,作為左右操作數(shù),進(jìn)行代數(shù)運(yùn)算,并將運(yùn)算結(jié)果值作為當(dāng)前結(jié)點(diǎn)的值; (2)若當(dāng)前結(jié)點(diǎn)為引用變量結(jié)點(diǎn),則將該結(jié)點(diǎn)對(duì)應(yīng)的外部引用對(duì)象的值作為當(dāng)前結(jié)點(diǎn)的結(jié)果值; (3)若當(dāng)前結(jié)點(diǎn)為函數(shù)參數(shù)EL表達(dá)式結(jié)點(diǎn),則忽略計(jì)算該結(jié)點(diǎn)及其左右子樹(shù),待執(zhí)行相應(yīng)函數(shù)時(shí),再進(jìn)行計(jì)算; (4)若當(dāng)前結(jié)點(diǎn)為函數(shù)結(jié)點(diǎn),則利用函數(shù)注冊(cè)器,匹配并執(zhí)行相應(yīng)函數(shù); (5)若當(dāng)前結(jié)點(diǎn)為未知變量結(jié)點(diǎn),則匹配并設(shè)置為當(dāng)前運(yùn)行上下文中數(shù)據(jù)源的屬性值; 第七步,判斷是否存在錯(cuò)誤信息,若存在,則轉(zhuǎn)向執(zhí)行第九步;反之,執(zhí)行第八步;第八步,將BCL語(yǔ)法樹(shù)對(duì)象的根結(jié)點(diǎn)的值作為當(dāng)前BCL對(duì)象的結(jié)果值,進(jìn)而完成執(zhí)行任務(wù),流程結(jié)束; 第九步,生成相應(yīng)錯(cuò)誤信息報(bào)表,流程結(jié)束。
【文檔編號(hào)】G06F9/45GK103645929SQ201310687744
【公開(kāi)日】2014年3月19日 申請(qǐng)日期:2013年12月17日 優(yōu)先權(quán)日:2013年12月17日
【發(fā)明者】廖成慧, 萬(wàn)慧建, 歐陽(yáng)強(qiáng), 郝海風(fēng), 于雪, 劉夢(mèng)清 申請(qǐng)人:江西博微新技術(shù)有限公司