[发明专利]工程造价计算描述语言BCL的编译执行装置及编译执行方法有效
申请号: | 201310687744.0 | 申请日: | 2013-12-17 |
公开(公告)号: | CN103645929B | 公开(公告)日: | 2016-11-30 |
发明(设计)人: | 廖成慧;万慧建;欧阳强;郝海风;于雪;刘梦清 | 申请(专利权)人: | 江西博微新技术有限公司 |
主分类号: | G06F9/45 | 分类号: | G06F9/45;G06F17/30 |
代理公司: | 南昌市平凡知识产权代理事务所 36122 | 代理人: | 夏材祥 |
地址: | 330096 江西省*** | 国省代码: | 江西;36 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 工程造价 计算 描述 语言 bcl 编译 执行 装置 方法 | ||
1.BCL工程造价计算描述语言及其编译执行方法,其特征在于:
一种BCL工程造价计算描述语言,其实现过程包括:
(1)设计描述具体计算算法规则的代数式及扩展运算表达式结构,即EL表达式;
所述EL表达式是对计算算法规则的一个完整描述,以${和}作为起始和结束标记;它在沿袭传统代数表达式运算特点的同时,支持用于包含多种表达式选择的条件选择运算和完成具体计算规则的函数运算在内的其它高级运算功能;
与传统代数运算不同,所述EL表达式包含种类多元化的操作数,支持数值、字符串和变量等类型,其中,变量类型操作数是所述EL表达式支持动态数据挂接的典型体现,其值可以为外部对象的引用,也可以为执行阶段设定的具体数据值;
所述条件选择表达式以#{和}作为起始和结束标记,其内部包含多个条件分支和至多一个缺省条件分支,每个分支对应一个EL表达式,整个条件选择表达式的取值为当前被激活条件分支对应的EL表达式计算结果,如:
#{
-> 条件1 : EL表达式1 ;
-> 条件2 : EL表达式2 ;
-> : EL表达式3;
}
所述函数运算定义了具体的计算规则,以满足工程造价特定计算需求;其语法结构与C语言兼容,并支持BCL的扩展数据类型;除此之外,所述函数的调用还支持把EL表达式作为参数进行输入,能够实现指定工程数据范围与EL表达式的动态绑定,进而减少表达式代码冗余,语法格式为:
sum(数据源标记, 数据源包装名 ,? EL表达式);
(2)分析工程造价计算需求,确定除EL表达式以外的其它计算逻辑单元;
通过对造价工程数据及计算算法、过程的总结归纳,得出任何工程的工程造价复杂计算算法都可分解为最小的原子计算逻辑单元,即:EL表达式、宏表、变量、参数、数据源和包;其中,所述宏表能完整的表示一个具有递归、多字段、多记录、有汇总关系的计算规则;所述数据源用于描述一个工程的数据及其数据范围,它是BCL语言与工程数据的粘合剂,实现真实数据的传递;所述变量是包含数据源、数据过滤算法以及费用计算算法规则在内的具体费用计算结构,相较与仅包含具体数值的参数而言,变量的计算有一定的先后次序,更为复杂,但功能强大;所述包为其它原子计算逻辑单元的容器,能划定计算逻辑单元的作用范围,屏蔽命名冲突;
一种BCL语言的编译执行装置,包括:BCL编译器装置、BCL脚本解析装置和BCL执行器装置;
所述BCL编译器装置用于对外界输入的待计算BCL元素进行编译处理,形成包含BCL语法树结构的BCL对象;内部过程涉及工程反应器模块、工程环境模块、工程文件解析模块、工程语法分析模块和分析上下文模块;
其中,待计算BCL元素由工程文件解析模块生成,被传递给工程语法分析模块;依据BCL元素类型的不同,控制BCL元素编译,获取相应待计算EL表达式集合,在分析上下文模块的协助下,对其进行词法和语法分析,生成被称之为BCL语法树的内存对象,并关联到相应BCL对象中;
其中,所述BCL元素是本发明的最小待计算单元,内部包含描述计算算法规则的EL表达式集合;与BCL语言体系中的原子计算逻辑单元相对应,BCL元素至少应包含BCL包元素、BCL变量元素、BCL宏表元素、BCL记录元素、BCL字段元素、BCL参数元素和BCL数据源元素七种;其中,BCL包元素作为其它元素的容器存在,不具备值表达式;
而BCL变量元素包含BCL数据源元素对象、过滤表达式和值表达式,通过执行过滤表达式,可从数据来源中筛选形成符合条件的数据范围,应用于其值表达式的计算过程当中;
所述BCL脚本解析装置包含了BCL脚本文件生成器和脚本解析器,用于实现BCL对象集合与BCL脚本文件之间的相互转换,能够有效记录或还原指定BCL对象,避免在同一计算需求下重复编译处理,有效减少工程造价计算时间;
所述BCL执行器装置在经编译处理之后,解释执行生成的BCL对象,将过程数据和计算结果分别存储在BCL语法树结点和BCL对象当中;
为实现以上功能,BCL执行器装置内部需包含BCL对象计算模块、结点计算模块、运行上下文模块、函数注册器模块和数据包装模块;其中,BCL对象计算模块控制BCL对象的解释执行过程,利用结点计算模块对BCL对象内部包含的BCL语法树中的每个结点进行计算,并将计算过程和过程数据记录在各结点当中,进而获取计算结果数据,完成执行任务;
一种BCL工程造价计算描述语言的编译执行方法,其步骤如下:
第一步:分析BCL元素,获取待计算EL表达式集合;
根据BCL元素类型的不同,采取不同的分析过程,包括:
(1)若为BCL包元素,则先转向执行第四步;
再将该包元素中的所有BCL元素转向执行第一步;
(2)若为BCL宏表元素,则先将内部包含的所有BCL记录元素转向执行第一步,再获取当前宏表元素对应的EL值表达式;
(3)若为BCL记录元素,则先将内部包含的所有BCL记录元素和BCL字段元素执行第一步,再获取该记录元素对应的EL值表达式;
(4)若为BCL字段元素,则直接获取当前字段元素对应的EL值表达式;
(5)若为BCL变量元素,则先从工程反应器对象中获取当前变量元素对应的BCL数据源元素,生成相应BCL数据源对象;并关联到当前分析上下文对象中,然后获取变量元素对应的过滤表达式及值表达式;
(6)若为BCL参数或数据源元素时,则转向执行第四步;
第二步:对EL表达式进行词法分析,生成有效单词序列;
第三步:在工程反应数据及工程环境数据的协同下,采用专用语法分析器,处理序列中的所有单词,生成相应BCL语法树结点,进而形成完整的BCL语法树;该过程若存在语法错误,则转向执行第九步;
BCL语法树结点包含结点值属性、结点类型属性、当前结点引用的对象地址值以及左右结点的关联属性;当单词类型为变量型操作数时,语法分析器将该单词传递给当前分析上下文模块,进行变量匹配;
若匹配不成功,则生成未知变量结点;若匹配成功,则创建引用变量结点;分析匹配结果类型,若为BCL元素,则先将该BCL元素进行编译处理,生成对应BCL对象,作为当前引用变量结点的外部引用对象;
若为BCL对象,则直接将当前引用变量结点指向该BCL对象;
第四步,创建相应BCL对象,并关联经语法分析后得到的BCL语法树;
此时,为避免同一计算需求下的重复编译,可利用BCL脚本文件生成器和脚本解析器分别生成和解析工程BCL脚本文件,实现记录和还原编译结果,从而有效提高执行效率;
第五步,通过对生成的BCL对象进行分析,获取待计算BCL语法树对象;
根据BCL对象类型的不同,采取不同分析方式:
(1)若为BCL包对象,则将当前包对象中的所有BCL对象执行第五步;
(2)若为BCL宏表、记录或字段对象,则先让内部对象执行第五步,再将其对象本身对应的BCL语法树执行第六步,得到当前对象的结果值;
(3)若为BCL变量对象,则先将过滤表达式对应的BCL语法树执行第六步,对原始BCL数据源进行过滤,再将值表达式对应的BCL语法树对象执行第六步,得到当前变量对象的结果值;
(4)若为BCL参数或数据源对象时,则不做处理;
第六步,解释执行当前BCL语法树,按照后序遍历的方式处理语法树中的结点;
同时,将计算过程及过程数据保存在BCL语法树的各个结点当中;
该过程涉及的处理包括:
(1)若当前结点为传统代数运算符结点,则分别计算并获取左右结点值,作为左右操作数,进行代数运算,并将运算结果值作为当前结点的值;
(2)若当前结点为引用变量结点,则将该结点对应的外部引用对象的值作为当前结点的结果值;
(3)若当前结点为函数参数EL表达式结点,则忽略计算该结点及其左右子树,待执行相应函数时,再进行计算;
(4)若当前结点为函数结点,则利用函数注册器,匹配并执行相应函数;
(5)若当前结点为未知变量结点,则匹配并设置为当前运行上下文中数据源的属性值;
第七步,判断是否存在错误信息,若存在,则转向执行第九步;反之,执行第八步;
第八步,将BCL语法树对象的根结点的值作为当前BCL对象的结果值,进而完成执行任务,流程结束;
第九步,生成相应错误信息报表,流程结束。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于江西博微新技术有限公司,未经江西博微新技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310687744.0/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种用于烘干地瓜叶设备的烘盘
- 下一篇:一种生物灭蝇的药物