表达式的解析处理系统和解析处理方法

文档序号:6372472阅读:163来源:国知局
专利名称:表达式的解析处理系统和解析处理方法
技术领域
本发明涉及计算机技术领域,具体而言,涉及ー种表达式的解析处理系统和解析处理方法。
背景技术
从业务应用角度,在处理业务对象过程中,经常遇到如下问题I)通过过滤条件,筛选出符合业务规则的结果集合。2)某个业务对象的属性可能由其他属性决定或其他多个属性通过运算获取。基于以上两个方面的应用,需要定义出一种值表达式设计或运行的业务模型,满足上述两方面的要求。从技术角度,在描述业务对象属性时,有时该属性是有由他属性決定的,即由其他属性通过计算获得,计算的过程需要提前定义,该定义就是对表达式的描述。业务对象有多种表现形式,如表単,报表以及其过滤条件等等。在现有技术中,通常有如下两种解决方案I.对于解释型表达式框架,通过构造一个动态解析引擎,对表达式字符串动态解析处理,识别其中函数(系统函数和自定义函数)、參数、逻辑运算符以及运算的优先级,在运行时动态的调用相应的函数和參数转换。2.基于Lamda表达式引擎,通过构造Lamda表达式树,编译后,传參调用,获取结果值。方案I的问题在于表达式处理复杂度高。方案2的问题在于支持不够全面,目前 只支持C#表达式,例如要生成Sql表达式则需要重新构造ー套处理引擎,这是Lamda表达式局限性的ー个方面,另ー个方面则在于灵活性和扩展性无法满足复杂场景的业务要求。因此,需要一种新的表达式的解析处理技术,可以有效解决构造动态解析引擎复杂度高的问题,还可以提供面向业务的易用性,并且支持复杂的业务场景的要求。

发明内容
本发明正是基于上述问题,提出了一种新的表达式的解析处理技术,可以有效解决构造动态解析引擎复杂度高的问题,还可以提供面向业务的易用性,并且支持复杂的业务场景的要求。有鉴于此,本发明提出了一种表达式的解析处理系统,包括生成単元,用于生成表达式语句;转换单元,用于对所述表达式语句进行转换,使之符合预设语言规则;编译单元,用于对符合所述预设语言规则的表达式语句进行编译,以创建所述表达式语句的表达式组件,并将所述表达式组件生成为ニ进制流;存储单元,用于将所述ニ进制流存储至数据库中,以供使用。在该技术方案中,通过表达式语句的转换,降低了编译难度和复杂程度,且具有更高的扩展性。在上述技术方案中,优选地,还包括规则设置単元,用于设置自定义元素的转换规则;所述转换単元还用于获取所述表达式语句中的自定义元素,井根据所述自定义元素的种类,对所述自定义元素进行相应的转换,以将所述表达式语句转换为符合所述预设语言规则的表达式语句。在上述技术方案中,优选地,所述转换单元进行转换的自定义元素包括自定义函数和/或自定义參数。在上述技术方案中,优选地,还包括加载单元,用于从数据库中获取所述ニ进制流,将所述ニ进制流反射为对应的表达式组件对象,并将所述表达式组件对象加载至缓存中;执行单元,用于调用所述表达式组件对象的执行接ロ,输入业务參数,以执行所述表达式组件对象,并返回执行結果。在上述技术方案中,优选地,还包括标识缓存单元,用于在加载所述表达式组件对象时,缓存所述表达式组件对象的第一时间戳和/或第一标识;判断単元,用于在所述执行单元进行操作之前,获取所述表达式组件对象的第二时间戳和/或第二标识,并判断所 述第一时间戳与所述第二时间戳、和/或所述第一标识与所述第二标识是否发生变化,若是,则清除缓存,并由所述加载単元重新加载所述表达式组件对象。根据本发明的又一方面,还提出了一种表达式的解析处理方法,包括步骤202,生成表达式语句,并对所述表达式语句进行转换,使之符合预设语言规则;步骤204,对符合所述预设语言规则的表达式语句进行编译,以创建所述表达式语句的表达式组件,并将所述表达式组件生成为ニ进制流;步骤206,将所述ニ进制流存储至数据库中,以供使用。在该技术方案中,通过表达式语句的转换,降低了编译难度和复杂程度,且具有更高的扩展性。在上述技术方案中,优选地,所述步骤202之前,还包括设置自定义元素的转换规则;获取所述表达式语句中的自定义元素,井根据所述自定义元素的种类,对所述自定义元素进行相应的转换,以将所述表达式语句转换为符合所述预设语言规则的表达式语句。在上述技术方案中,优选地,所述自定义元素包括自定义函数和/或自定义參数。在上述技术方案中,优选地,所述步骤206之后,还包括步骤208,从数据库中获取所述ニ进制流,将所述ニ进制流反射为对应的表达式组件对象,并将所述表达式组件对象加载至缓存中;步骤210,调用所述表达式组件对象的执行接ロ,输入业务參数,以执行所述表达式组件对象,并返回执行結果。在上述技术方案中,优选地,所述步骤208还包括缓存所述表达式组件对象的第一时间戳和/或第一标识;所述步骤210之前还包括获取所述表达式组件对象的第二时间戳和/或第二标识,并判断所述第一时间戳与所述第二时间戳、和/或所述第一标识与所述第二标识是否发生变化,若是,则清除缓存,并返回所述步骤208以重新加载所述表达式组件对象。通过以上技术方案,可以有效解决构造动态解析引擎复杂度高的问题,还可以提供面向业务的易用性,并且支持复杂的业务场景的要求。


图I示出了根据本发明的一个实施例的表达式的解析处理系统的框图;图2示出了根据本发明的一个实施例的表达式的解析处理方法的流程图3示出了根据本发明的一个实施例的表达式编辑器的框图;图4示出了根据本发明的另ー个实施例的表达式的解析处理方法的流程图;图5是图4所示的实施例的表达式解析处理的模块执行示意图。
具体实施例方式为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式
对本发明进行进一歩的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互組合。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。

图I示出了根据本发明的一个实施例的表达式的解析处理系统的框图。如图I所示,根据本发明的一个实施例的表达式的解析处理系统100,包括生成単元102,用于生成表达式语句;转换单元104,用于对表达式语句进行转换,使之符合预设语言规则;编译单元106,用于对符合预设语言规则的表达式语句进行编译,以创建表达式语句的表达式组件,并将表达式组件生成为ニ进制流;存储单元108,用于将ニ进制流存储至数据库中,以供使用。在该技术方案中,通过表达式语句的转换,降低了编译难度和复杂程度,且具有更高的扩展性。在上述技术方案中,优选地,还包括规则设置単元110,用于设置自定义元素的转换规则;转换单元104还用于获取表达式语句中的自定义元素,并根据自定义元素的种类,对自定义元素进行相应的转换,以将表达式语句转换为符合预设语言规则的表达式语句。在上述技术方案中,优选地,转换单元104进行转换的自定义元素包括自定义函数和/或自定义參数。在上述技术方案中,优选地,还包括加载单元112,用于从数据库中获取ニ进制流,将ニ进制流反射为对应的表达式组件对象,并将表达式组件对象加载至缓存中;执行单元114,用于调用表达式组件对象的执行接ロ,输入业务參数,以执行表达式组件对象,并返回执行結果。在上述技术方案中,优选地,还包括标识缓存单元116,用于在加载表达式组件对象时,缓存表达式组件对象的第一时间戳和/或第一标识;判断単元118,用于在执行单元进行操作之前,获取表达式组件对象的第二时间戳和/或第二标识,并判断第一时间戳与第二时间戳、和/或第一标识与第二标识是否发生变化,若是,则清除缓存,并由加载单元112重新加载表达式组件对象。图2示出了根据本发明的一个实施例的表达式的解析处理方法的流程图。如图2所示,根据本发明的一个实施例的表达式的解析处理方法,包括步骤202,生成表达式语句,并对表达式语句进行转换,使之符合预设语言规则;步骤204,对符合预设语言规则的表达式语句进行编译,以创建表达式语句的表达式组件,并将表达式组件生成为ニ进制流;步骤206,将ニ进制流存储至数据库中,以供使用。在该技术方案中,通过表达式语句的转换,降低了编译难度和复杂程度,且具有更高的扩展性。
在上述技术方案中,优选地,步骤202之前,还包括设置自定义元素的转换规则;获取表达式语句中的自定义元素,并根据自定义元素的种类,对自定义元素进行相应的转换,以将表达式语句转换为符合预设语言规则的表达式语句。在上述技术方案中,优选地,自定义元素包括自定义函数和/或自定义參数。在上述技术方案中,优选地,步骤206之后,还包括步骤208,从数据库中获取ニ进制流,将ニ进制流反射为对应的表达式组件对象,并将表达式组件对象加载至缓存中;步骤210,调用表达式组件对象的执行接ロ,输入业务參数,以执行表达式组件对象,并返回执行結果。在上述技术方案中,优选地,步骤208还包括缓存表达式组件对象的第一时间戳和/或第一标识;步骤210之前还包括获取表达式组件对象的第二时间戳和/或第二标识,并判断第一时间戳与第二时间戳、和/或第一标识与第二标识是否发生变化,若是,则清除缓存,并返回步骤208以重新加载表达式组件对象。 图3示出了根据本发明的一个实施例的表达式编辑器的框图。如图3所示,根据本发明的一个实施例的表达式编辑器,包括规则定义模块,设置对自定义元素进行处理的规则。编译模块,通过转换模块获取符合C#语法的表达式语句,然后通过.NET的CodeDom技术动态编译成可调用的组件,并以ニ进制的形式存储在数据库中。规则处理模块在所述自定义元素为自定义函数吋,按照所述规则,将所述自定义函数处理对应的.NET类的函数作为所述处理结果,或取得所述自定义函数的调用结果作为所述处理結果。转换模块,对表达式进行转换并符合C#语法结构的表达式语句(字符串)。通过规则信息,将用户所见的字符串转变为后台实际自定义元素自符串。如果自定义元素为自定义函数时,将其转换为“类名.函数名”的形式;如果是自定义參数时,通过将其转换数组对象中的一个为当前表达式中的输入项,例如args[2],同时为了使函数具有强类型的特征,并根据当前參数的类型,在实际的表达式中为TypeConvertor. Convert〈T>(args [2])的形式,其中 T 可以是 string、int、char、DateTime 以及 Dictionary 等等。执行模块,通过基于ニ进制流动态的加载和卸载可调用表达式组件,从而实现组件的热插拔,从而满足了系统设计时和运行时并行工作的业务场景。加载器,通过ニ进制流加载并实例化表达式组件。组件缓存器,缓存组件、组件标示和时间戳,动态监测组件的变化。组件的卸载器,按需卸载已加载入内存中的组件。图4示出了根据本发明的另ー个实施例的表达式的解析处理方法的流程图。如图4所示,根据本发明的另ー个实施例的表达式的解析处理方法,包括步骤402,设置对自定义元素进行处理的规则;步骤404,对用户设计的表达式进行转换处理,最終输入出为符合C#语法结构的表达式语句;步骤406,对表达式语句进行编译,取得可调用组件ニ进制流;步骤408,通过ニ进制流动态的加载和卸载可调用表达式组件,获取表达式的执行体对象。
下面结合图4所示的表达式的解析处理方法和图5所示的表达式解析处理的模块,对本发明的技术方案进行详细说明整个过程可以分为表达式设计阶段、转换阶段、编译阶段和执行阶段。I、表达式设计过程,用户通过双击或拖拽界面上的函数节点或參数节点,将函数或參数显示在编辑器鼠标所在的位置。用户看到的信息都是与业务相关的信息,简单易懂,例如获取当前日期的年度值,例子$〈年〉($〈当前日期〉),符合用户的使用习惯,并易于理解,用户无需理解计算机语言。2、转换阶段,转换器502,设计的表达式($〈年>($〈当前日期〉))进行转换处理,转换成符合C#语法结构的表达式语句,首先我们需要对其中函数和參数进行识别并进行替换,至于语法是否符合C#规范,完全由编译模块处理。识别过程不同于常规的解析引擎对函数和參数的识别,只需要识别出函数“$〈年〉”替换成常规的函数$〈DateFUnCti0n.Year〉即可,并将參数$〈当前日期 > 替换成$〈currentDate>。在转换器中,对表达式实际 进行了两次处理,上述中是转换的第一歩,该步骤做要的工作将表达式中对应的函数显示名称转换为实际的函数名,參数显示名转换为參数的编码。该表达式持久化到数据库中,在用户多语显示时会有不同的显示。第二步转换实际上是为编译阶段准备的,该步骤会将第一步转化的表达式转换为符合C#语法结构的表达式语句,主要做如下工作■ $<DateFunction. Year〉会转换为 DateFunction. Year。其中 DateFunction 代表类对象,Year代表DateFunction的公共静态函数。■ $<currentDate> 会转换为 TypeConverter. Convert〈DateTime>(args
),args
的来源于參数currentDate的位于整个表达式參数首次出现的次序,其中相同的參数会使用ー个位置标量。例如a, b, c, b, do其中最后ー个b的參数形式args [I]。整个转换过程如下所示$〈年〉($〈当前日期〉)=>$<DateFunction. Year〉($<currentDate =>DateFunction.Year (TypeConverter. Convert<DateTime>(args
))3、编译阶段,编译器504,通过转换阶段,编辑器获取了完整的C#表达式语句,并组织成标准的“return表达式语句;” C#语句。通过CodeDom构造出执行器类,并将该语句编译到执行器的执行函数中,创建出表达式组件,并将其转换为ニ进制流持久化到数据库中。4、执行阶段,执行器506,简单描述就是从数据库中,提取当前表达式的ニ进制流。并通过加载器加载到内存中,并实例化该表达式组件。然后通过缓存器缓存当前的表达式组件对象,并缓存当前表达式的时间戳和标示,毎次加载前都要进行对比,检测表达式是否发生变化。如果发生变化,则需要通过卸载器将当前缓存中的表达式组件对象进行卸载处理。之后重新进入加载程序。最后,直接调用该组件借ロ,将业务參数输入给当前组件的表达式执行接ロ。如此实现了运行时和设计时互不干扰的业务场景。该过程实际上是表达式的运行吋,系统会通过编辑器的运行时接ロ,获取表达式需要传入的參数的字典,并为每ー个參数按其类型进行赋值操作,将调用编辑器的执行接ロ,执行该表达式。执行过程按如下步骤进行■首先检查当前缓存中是否存在该表达式的组件的对象,如果存在,则校验其时间戳是否发生变化,如果发生变化则执行第二歩。否则直接跳过第二步,进行第三部。■通过加载器从库中读取表达式的组件的ニ进制流,并将其反射为执行器组件对象,并缓存到当前的全局缓存中。■执行器执行操作,根据用户提供的參数字典,将其按顺序组织成參数数组,传入该执行器的执行函数中,并得出最終的结果。如果期间发生错误,系统会直接返回空值或默认值。通过以上技术方案,可以实现一种值表达式的设计和解析处理的方法,既能有效解决自定义解析引擎的高复杂的问题,还可以提供面向业务的易用性,并且支持一定程度上的复杂语句。
以上结合附图详细说明了本发明的技术方案,考虑到相关技术中,解析引擎复杂、扩展性差,因此,本发明提供了一种表达式的解析处理系统和方法可以有效解决构造动态解析引擎复杂度高的问题,还可以提供面向业务的易用性,并且支持复杂的业务场景的要求。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种表达式的解析处理系统,其特征在于,包括 生成単元,用于生成表达式语句; 转换单元,用于对所述表达式语句进行转换,使之符合预设语言规则; 编译单元,用于对符合所述预设语言规则的表达式语句进行编译,以创建所述表达式语句的表达式组件,并将所述表达式组件生成为ニ进制流; 存储单元,用于将所述ニ进制流存储至数据库中,以供使用。
2.根据权利要求I所述的表达式的解析处理系统,其特征在于,还包括 规则设置単元,用于设置自定义元素的转换规则; 所述转换単元还用于获取所述表达式语句中的自定义元素,井根据所述自定义元素的种类,对所述自定义元素进行相应的转换,以将所述表达式语句转换为符合所述预设语言规则的表达式语句。
3.根据权利要求2所述的表达式的解析处理系统,其特征在于,所述转换単元进行转换的自定义元素包括自定义函数和/或自定义參数。
4.根据权利要求I至3中任一项所述的表达式的解析处理系统,其特征在于,还包括 加载单元,用于从数据库中获取所述ニ进制流,将所述ニ进制流反射为对应的表达式组件对象,并将所述表达式组件对象加载至缓存中; 执行单元,用于调用所述表达式组件对象的执行接ロ,输入业务參数,以执行所述表达式组件对象,并返回执行結果。
5.根据权利要求4所述的表达式的解析处理系统,其特征在于,还包括 标识缓存单元,用于在加载所述表达式组件对象时,缓存所述表达式组件对象的第一时间戳和/或第一标识; 判断単元,用于在所述执行单元进行操作之前,获取所述表达式组件对象的第二时间戳和/或第二标识,并判断所述第一时间戳与所述第二时间戳、和/或所述第一标识与所述第二标识是否发生变化,若是,则清除缓存,并由所述加载単元重新加载所述表达式组件对象。
6.—种表达式的解析处理方法,其特征在于,包括 步骤202,生成表达式语句,并对所述表达式语句进行转换,使之符合预设语言规则;步骤204,对符合所述预设语言规则的表达式语句进行编译,以创建所述表达式语句的表达式组件,并将所述表达式组件生成为ニ进制流; 步骤206,将所述ニ进制流存储至数据库中,以供使用。
7.根据权利要求6所述的表达式的解析处理方法,其特征在于,所述步骤202之前,还包括 设置自定义元素的转换规则; 获取所述表达式语句中的自定义元素,井根据所述自定义元素的种类,对所述自定义元素进行相应的转换,以将所述表达式语句转换为符合所述预设语言规则的表达式语句。
8.根据权利要求7所述的表达式的解析处理方法,其特征在于,所述自定义元素包括自定义函数和/或自定义參数。
9.根据权利要求6至8中任一项所述的表达式的解析处理方法,其特征在于,所述步骤206之后,还包括步骤208,从数据库中获取所述ニ进制流,将所述ニ进制流反射为对应的表达式组件对象,并将所述表达式组件对象加载至缓存中; 步骤210,调用所述表达式组件对象的执行接ロ,输入业务參数,以执行所述表达式组件对象,并返回执行結果。
10.根据权利要求9所述的表达式的解析处理方法,其特征在干,所述步骤208还包括 缓存所述表达式组件对象的第一时间戳和/或第一标识; 所述步骤210之前还包括 获取所述表达式组件对象的第二时间戳和/或第二标识,并判断所述第一时间戳与所述第二时间戳、和/或所述第一标识与所述第二标识是否发生变化,若是,则清除缓存,并返回所述步骤208以重新加载所述表达式组件对象。
全文摘要
本发明提供了一种表达式的解析处理系统,包括生成单元,用于生成表达式语句;转换单元,用于对所述表达式语句进行转换,使之符合预设语言规则;编译单元,用于对符合所述预设语言规则的表达式语句进行编译,以创建所述表达式语句的表达式组件,并将所述表达式组件生成为二进制流;存储单元,用于将所述二进制流存储至数据库中,以供使用。相应地,本发明还提出了一种表达式的解析处理方法。通过本发明的技术方案,可以有效解决构造动态解析引擎复杂度高的问题,还可以提供面向业务的易用性,并且支持复杂的业务场景的要求。
文档编号G06F9/44GK102779044SQ20121022362
公开日2012年11月14日 申请日期2012年6月28日 优先权日2012年6月28日
发明者商平锋 申请人:用友软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1