[發(fā)明專利]工程造價計算描述語言BCL的編譯執(zhí)行裝置及編譯執(zhí)行方法有效
| 申請?zhí)枺?/td> | 201310687744.0 | 申請日: | 2013-12-17 |
| 公開(公告)號: | CN103645929B | 公開(公告)日: | 2016-11-30 |
| 發(fā)明(設(shè)計)人: | 廖成慧;萬慧建;歐陽強;郝海風(fēng);于雪;劉夢清 | 申請(專利權(quán))人: | 江西博微新技術(shù)有限公司 |
| 主分類號: | G06F9/45 | 分類號: | G06F9/45;G06F17/30 |
| 代理公司: | 南昌市平凡知識產(chǎn)權(quán)代理事務(wù)所 36122 | 代理人: | 夏材祥 |
| 地址: | 330096 江西省*** | 國省代碼: | 江西;36 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 工程造價 計算 描述 語言 bcl 編譯 執(zhí)行 裝置 方法 | ||
1.BCL工程造價計算描述語言及其編譯執(zhí)行方法,其特征在于:
一種BCL工程造價計算描述語言,其實現(xiàn)過程包括:
(1)設(shè)計描述具體計算算法規(guī)則的代數(shù)式及擴展運算表達式結(jié)構(gòu),即EL表達式;
所述EL表達式是對計算算法規(guī)則的一個完整描述,以${和}作為起始和結(jié)束標(biāo)記;它在沿襲傳統(tǒng)代數(shù)表達式運算特點的同時,支持用于包含多種表達式選擇的條件選擇運算和完成具體計算規(guī)則的函數(shù)運算在內(nèi)的其它高級運算功能;
與傳統(tǒng)代數(shù)運算不同,所述EL表達式包含種類多元化的操作數(shù),支持數(shù)值、字符串和變量等類型,其中,變量類型操作數(shù)是所述EL表達式支持動態(tài)數(shù)據(jù)掛接的典型體現(xiàn),其值可以為外部對象的引用,也可以為執(zhí)行階段設(shè)定的具體數(shù)據(jù)值;
所述條件選擇表達式以#{和}作為起始和結(jié)束標(biāo)記,其內(nèi)部包含多個條件分支和至多一個缺省條件分支,每個分支對應(yīng)一個EL表達式,整個條件選擇表達式的取值為當(dāng)前被激活條件分支對應(yīng)的EL表達式計算結(jié)果,如:
??#{
??????->?條件1?:?EL表達式1?;
??????->?條件2?:?EL表達式2?;
??????->?:?EL表達式3;???
??}?
所述函數(shù)運算定義了具體的計算規(guī)則,以滿足工程造價特定計算需求;其語法結(jié)構(gòu)與C語言兼容,并支持BCL的擴展數(shù)據(jù)類型;除此之外,所述函數(shù)的調(diào)用還支持把EL表達式作為參數(shù)進行輸入,能夠?qū)崿F(xiàn)指定工程數(shù)據(jù)范圍與EL表達式的動態(tài)綁定,進而減少表達式代碼冗余,語法格式為:
sum(數(shù)據(jù)源標(biāo)記,?數(shù)據(jù)源包裝名?,??EL表達式);
(2)分析工程造價計算需求,確定除EL表達式以外的其它計算邏輯單元;
通過對造價工程數(shù)據(jù)及計算算法、過程的總結(jié)歸納,得出任何工程的工程造價復(fù)雜計算算法都可分解為最小的原子計算邏輯單元,即:EL表達式、宏表、變量、參數(shù)、數(shù)據(jù)源和包;其中,所述宏表能完整的表示一個具有遞歸、多字段、多記錄、有匯總關(guān)系的計算規(guī)則;所述數(shù)據(jù)源用于描述一個工程的數(shù)據(jù)及其數(shù)據(jù)范圍,它是BCL語言與工程數(shù)據(jù)的粘合劑,實現(xiàn)真實數(shù)據(jù)的傳遞;所述變量是包含數(shù)據(jù)源、數(shù)據(jù)過濾算法以及費用計算算法規(guī)則在內(nèi)的具體費用計算結(jié)構(gòu),相較與僅包含具體數(shù)值的參數(shù)而言,變量的計算有一定的先后次序,更為復(fù)雜,但功能強大;所述包為其它原子計算邏輯單元的容器,能劃定計算邏輯單元的作用范圍,屏蔽命名沖突;
一種BCL語言的編譯執(zhí)行裝置,包括:BCL編譯器裝置、BCL腳本解析裝置和BCL執(zhí)行器裝置;
所述BCL編譯器裝置用于對外界輸入的待計算BCL元素進行編譯處理,形成包含BCL語法樹結(jié)構(gòu)的BCL對象;內(nèi)部過程涉及工程反應(yīng)器模塊、工程環(huán)境模塊、工程文件解析模塊、工程語法分析模塊和分析上下文模塊;
其中,待計算BCL元素由工程文件解析模塊生成,被傳遞給工程語法分析模塊;依據(jù)BCL元素類型的不同,控制BCL元素編譯,獲取相應(yīng)待計算EL表達式集合,在分析上下文模塊的協(xié)助下,對其進行詞法和語法分析,生成被稱之為BCL語法樹的內(nèi)存對象,并關(guān)聯(lián)到相應(yīng)BCL對象中;
其中,所述BCL元素是本發(fā)明的最小待計算單元,內(nèi)部包含描述計算算法規(guī)則的EL表達式集合;與BCL語言體系中的原子計算邏輯單元相對應(yīng),BCL元素至少應(yīng)包含BCL包元素、BCL變量元素、BCL宏表元素、BCL記錄元素、BCL字段元素、BCL參數(shù)元素和BCL數(shù)據(jù)源元素七種;其中,BCL包元素作為其它元素的容器存在,不具備值表達式;
而BCL變量元素包含BCL數(shù)據(jù)源元素對象、過濾表達式和值表達式,通過執(zhí)行過濾表達式,可從數(shù)據(jù)來源中篩選形成符合條件的數(shù)據(jù)范圍,應(yīng)用于其值表達式的計算過程當(dāng)中;
所述BCL腳本解析裝置包含了BCL腳本文件生成器和腳本解析器,用于實現(xiàn)BCL對象集合與BCL腳本文件之間的相互轉(zhuǎn)換,能夠有效記錄或還原指定BCL對象,避免在同一計算需求下重復(fù)編譯處理,有效減少工程造價計算時間;
所述BCL執(zhí)行器裝置在經(jīng)編譯處理之后,解釋執(zhí)行生成的BCL對象,將過程數(shù)據(jù)和計算結(jié)果分別存儲在BCL語法樹結(jié)點和BCL對象當(dāng)中;
為實現(xiàn)以上功能,BCL執(zhí)行器裝置內(nèi)部需包含BCL對象計算模塊、結(jié)點計算模塊、運行上下文模塊、函數(shù)注冊器模塊和數(shù)據(jù)包裝模塊;其中,BCL對象計算模塊控制BCL對象的解釋執(zhí)行過程,利用結(jié)點計算模塊對BCL對象內(nèi)部包含的BCL語法樹中的每個結(jié)點進行計算,并將計算過程和過程數(shù)據(jù)記錄在各結(jié)點當(dāng)中,進而獲取計算結(jié)果數(shù)據(jù),完成執(zhí)行任務(wù);
一種BCL工程造價計算描述語言的編譯執(zhí)行方法,其步驟如下:
第一步:分析BCL元素,獲取待計算EL表達式集合;
根據(jù)BCL元素類型的不同,采取不同的分析過程,包括:
(1)若為BCL包元素,則先轉(zhuǎn)向執(zhí)行第四步;
再將該包元素中的所有BCL元素轉(zhuǎn)向執(zhí)行第一步;
(2)若為BCL宏表元素,則先將內(nèi)部包含的所有BCL記錄元素轉(zhuǎn)向執(zhí)行第一步,再獲取當(dāng)前宏表元素對應(yīng)的EL值表達式;
(3)若為BCL記錄元素,則先將內(nèi)部包含的所有BCL記錄元素和BCL字段元素執(zhí)行第一步,再獲取該記錄元素對應(yīng)的EL值表達式;
(4)若為BCL字段元素,則直接獲取當(dāng)前字段元素對應(yīng)的EL值表達式;
(5)若為BCL變量元素,則先從工程反應(yīng)器對象中獲取當(dāng)前變量元素對應(yīng)的BCL數(shù)據(jù)源元素,生成相應(yīng)BCL數(shù)據(jù)源對象;并關(guān)聯(lián)到當(dāng)前分析上下文對象中,然后獲取變量元素對應(yīng)的過濾表達式及值表達式;
(6)若為BCL參數(shù)或數(shù)據(jù)源元素時,則轉(zhuǎn)向執(zhí)行第四步;
第二步:對EL表達式進行詞法分析,生成有效單詞序列;
第三步:在工程反應(yīng)數(shù)據(jù)及工程環(huán)境數(shù)據(jù)的協(xié)同下,采用專用語法分析器,處理序列中的所有單詞,生成相應(yīng)BCL語法樹結(jié)點,進而形成完整的BCL語法樹;該過程若存在語法錯誤,則轉(zhuǎn)向執(zhí)行第九步;
BCL語法樹結(jié)點包含結(jié)點值屬性、結(jié)點類型屬性、當(dāng)前結(jié)點引用的對象地址值以及左右結(jié)點的關(guān)聯(lián)屬性;當(dāng)單詞類型為變量型操作數(shù)時,語法分析器將該單詞傳遞給當(dāng)前分析上下文模塊,進行變量匹配;
若匹配不成功,則生成未知變量結(jié)點;若匹配成功,則創(chuàng)建引用變量結(jié)點;分析匹配結(jié)果類型,若為BCL元素,則先將該BCL元素進行編譯處理,生成對應(yīng)BCL對象,作為當(dāng)前引用變量結(jié)點的外部引用對象;
若為BCL對象,則直接將當(dāng)前引用變量結(jié)點指向該BCL對象;
第四步,創(chuàng)建相應(yīng)BCL對象,并關(guān)聯(lián)經(jīng)語法分析后得到的BCL語法樹;
此時,為避免同一計算需求下的重復(fù)編譯,可利用BCL腳本文件生成器和腳本解析器分別生成和解析工程BCL腳本文件,實現(xiàn)記錄和還原編譯結(jié)果,從而有效提高執(zhí)行效率;
第五步,通過對生成的BCL對象進行分析,獲取待計算BCL語法樹對象;
根據(jù)BCL對象類型的不同,采取不同分析方式:
(1)若為BCL包對象,則將當(dāng)前包對象中的所有BCL對象執(zhí)行第五步;
(2)若為BCL宏表、記錄或字段對象,則先讓內(nèi)部對象執(zhí)行第五步,再將其對象本身對應(yīng)的BCL語法樹執(zhí)行第六步,得到當(dāng)前對象的結(jié)果值;
(3)若為BCL變量對象,則先將過濾表達式對應(yīng)的BCL語法樹執(zhí)行第六步,對原始BCL數(shù)據(jù)源進行過濾,再將值表達式對應(yīng)的BCL語法樹對象執(zhí)行第六步,得到當(dāng)前變量對象的結(jié)果值;
(4)若為BCL參數(shù)或數(shù)據(jù)源對象時,則不做處理;
第六步,解釋執(zhí)行當(dāng)前BCL語法樹,按照后序遍歷的方式處理語法樹中的結(jié)點;
同時,將計算過程及過程數(shù)據(jù)保存在BCL語法樹的各個結(jié)點當(dāng)中;
該過程涉及的處理包括:
(1)若當(dāng)前結(jié)點為傳統(tǒng)代數(shù)運算符結(jié)點,則分別計算并獲取左右結(jié)點值,作為左右操作數(shù),進行代數(shù)運算,并將運算結(jié)果值作為當(dāng)前結(jié)點的值;
(2)若當(dāng)前結(jié)點為引用變量結(jié)點,則將該結(jié)點對應(yīng)的外部引用對象的值作為當(dāng)前結(jié)點的結(jié)果值;
(3)若當(dāng)前結(jié)點為函數(shù)參數(shù)EL表達式結(jié)點,則忽略計算該結(jié)點及其左右子樹,待執(zhí)行相應(yīng)函數(shù)時,再進行計算;
(4)若當(dāng)前結(jié)點為函數(shù)結(jié)點,則利用函數(shù)注冊器,匹配并執(zhí)行相應(yīng)函數(shù);
(5)若當(dāng)前結(jié)點為未知變量結(jié)點,則匹配并設(shè)置為當(dāng)前運行上下文中數(shù)據(jù)源的屬性值;
第七步,判斷是否存在錯誤信息,若存在,則轉(zhuǎn)向執(zhí)行第九步;反之,執(zhí)行第八步;
第八步,將BCL語法樹對象的根結(jié)點的值作為當(dāng)前BCL對象的結(jié)果值,進而完成執(zhí)行任務(wù),流程結(jié)束;
第九步,生成相應(yīng)錯誤信息報表,流程結(jié)束。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于江西博微新技術(shù)有限公司,未經(jīng)江西博微新技術(shù)有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310687744.0/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 上一篇:一種用于烘干地瓜葉設(shè)備的烘盤
- 下一篇:一種生物滅蠅的藥物





