掌桥专利:专业的专利平台
掌桥专利
首页

一种可支持多语言文本解析的装置及其方法

文献发布时间:2024-04-18 19:59:31


一种可支持多语言文本解析的装置及其方法

技术领域

本发明涉及计算机程序技术领域,具体涉及一种可支持多语言文本解析的装置以及应用该装置的解析方法。

背景技术

目前模板引擎作为实现界面与数据分离广泛使用,同时能大大提升开发效率。而规则引擎则可以把复杂、重复的业务规则同各个业务系统分离开,以提高业务逻辑的复用能力和开发变更效率,降低应用程序的维护和可扩展性.业务需求千变万化,开发人员不断需要更改代码去完成各种各样的业务需求。传统的模板引擎能实现界面和数据分离,规则引擎能降低程序的维护和可扩展,但往往这两个都属于不同的第三方组件,开发人员需要同时学习,学习曲线增大。

而同时开发人员也不是最懂得实际业务的人,需要和需求端不断沟通增加开发成本。如果能让需求端人员,通过少量的改动,程序不需要重新编译,就能实现其业务目的,就能大大提升生产力。但是往往业务人员也不懂得编程,在本国也许能了解逻辑,但是不懂得英文。因此我们需要一个可以同时满足模板引擎和规则引擎,又能使得非开发人员能容易上手的方案去解决和满足这些需求。

因此,现有技术存在以下几个缺点:

1、对于不断新增的用户需求,目前没有模板引擎和规则引擎需要同时学习,大大增加了开发人员的学习曲线和维护成本。

2、由于业务变更,需求端人员需要和开发人员不断沟通,最后由开发人员修改代码,编译再发布。

3、如果一部分的业务逻辑可以由业务人员实现,将大大降低沟通,理解的时间成本,大大提高生产力。

发明内容

本发明提供的一种可支持多语言文本解析的装置及其方法,该装置和方法提供一套模仿JAVA语法,并扩展基于文本解析和规则引擎的特殊标签,用户只需要在启动文本解析前设置标签对应语言即可完成不同语言的切换。

本发明通过以下技术方案来实现上述目的:

一种可支持多语言文本解析的装置,包括读取模块,用于读取系统启动前的配置信息;

转化模块,用于将读取到的结构化文本转换为char数组;

结构接口解析模块,对结构化文本进行解析,将该文本中的结构化标签解析生成AST语法树;

属性接口解析模块,对结构化文本进行解析,将该文本中的属性添加到对应的语法树节点;

语法树运行模块,用于运行生成的语法树。

一种可支持多语言文本解析的方法,应用于上述的一种可支持多语言文本解析的装置进行多语言文本解析,包括:

设置文本模板的关键字和语法规则,将其定位为标签,并定义关键字和关键字接口类的绑定器;其中,绑定器用于绑定关键字和关键字接口类的关系,通过绑定器来解耦关键字;

设计每个标签对应结构的分析接口和属性解析接口,根据不同标签的分析接口和属性解析接口实现默认为英文的实现类,通过实现抽象类AbstractLanguageTagFactory即可令模板增加不同语言;

读取结构化文本,将读取到的结构化文本转换为char数组,并将该文本的结构化标签转换为关键字接口类,生成AST语法树;

对AST语法树进行解析,并生成可执行单元;

实现可执单元运行器,客户端通过调用该运行器最终调用可执行单元。

根据本发明所提供的一种可支持多语言文本解析的方法,所述定义关键字和关键字接口类的绑定器,包括:

所有关键字接口均继承于父类BlueprintTag,每一个接口对应一个关键字而且默认是英文,通过绑定器解耦并变更关键字的语言;

若使用需要定义特定语言的关键字,则需要创建特定的绑定器,通过继承抽象类AbstractLanguageTagFactory来实现特定绑定器的创建。

根据本发明所提供的一种可支持多语言文本解析的方法,所述通过绑定器来解耦关键字,包括:

通过抽象类AbstractLanguageTagFactory绑定关键字和关键字接口。

根据本发明所提供的一种可支持多语言文本解析的方法,所述设计每个标签对应结构的分析接口和属性解析接口,包括:

在整个程序设计中,若关键字呈包裹形态出现即由“关键字:xxxx”开始,以“#xxx”结束,并且关键字体里面能包含其他关键字的实现,称其为结构化接口,即该关键字类为结构化类,结构化接口包括结构化接口和属性接口;若exec结束不带#的,exec为属性接口,属性接口不能同时包含属性接口和结构化接口。

根据本发明所提供的一种可支持多语言文本解析的方法,在将文本的结构化标签转换为关键字接口类时,先把字符串转为数组,通过StandardScannerDispatch中的analyzing函数分析字符串数组;

在analyzing函数读取到一个数组后,analyzing函数会从数组下标0开始直到数组结束逐个字符分析,直到选择出唯一的一个结构接口或属性解析接口的实现类。

根据本发明所提供的一种可支持多语言文本解析的方法,当选出最匹配结构接口或属性解析接口的实现类时,该实现类挂载到AnalysisSupport类中;

然后自身继续调用analyzing函数找处下一个最匹配的结构接口或属性解析接口的实现类。

根据本发明所提供的一种可支持多语言文本解析的方法,当AST语法树构建完毕后,调用AttributeManger中的analyse函数封装AST,然后调用CompileManger的compile函数把AST语法树转为可执行单元MetaAssemble。

根据本发明所提供的一种可支持多语言文本解析的方法,当程序生成可执行单元后,通过InstallManager递归加载可执行单元,按最大结构package返回一个PackageContext的列表;

然后将PackageContext列表加载到VirtualRun类中,最终通过实例化该类,传入对应的参数即可执行出相应的结果。

由此可见,相比较于现有技术,本发明提供一种可支持多语言文本解析的方案及架构,该方案及架构在Java语言下实现,通过提供一套模仿JAVA语法,并扩展基于文本解析和规则引擎的特殊标签,通过使用本发明的用户只需要在启动文本解析前设置标签对应语言即可完成不同语言的切换。因此,本发明通过统一模板引擎和规则引擎实减少开发人员学习曲线,通过配置器可以简单实现多语言。

下面结合附图和具体实施方式对本发明作进一步详细说明。

附图说明

图1是本发明一种可支持多语言文本解析的方法实施例第一流程图。

图2是本发明一种可支持多语言文本解析的方法实施例第二流程图。

图3是本发明一种可支持多语言文本解析的方法实施例中使用英文的绑定器的程序代码示意图。

图4是本发明一种可支持多语言文本解析的方法实施例中关于RetrunTag.class接口的程序代码示意图。

图5是本发明一种可支持多语言文本解析的方法实施例中关于结构接口和属性解析接口的程序代码示意图。

图6是本发明一种可支持多语言文本解析的方法实施例中关于analyzing函数的第一程序代码示意图。

图7是本发明一种可支持多语言文本解析的方法实施例中关于analyzing函数的第二程序代码示意图。

图8是本发明一种可支持多语言文本解析的方法实施例中关于analyzing函数的第三程序代码示意图。

图9是本发明一种可支持多语言文本解析的方法实施例中关于PackageContext列表的程序代码示意图。

图10是本发明一种可支持多语言文本解析的方法实施例中关于执行结果的第一程序代码示意图。

图11是本发明一种可支持多语言文本解析的方法实施例中关于执行结果的第二程序代码示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例的附图,对本发明实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于所描述的本发明的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

首先,对本申请中所涉及的部分用语和相关技术进行解释说明,以便于本领域技术人员理解。

接口(interface)Java语言中是一个抽象类型,是抽象方法的集合,接口通常用interface来声明。一个类通过继承接口的方式,从而来继承并且实现接口中的抽象方法.

注解(Annotation),也叫元数据,一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明。

模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。

规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。

一种可支持多语言文本解析的装置实施例

参见图1与图2,本发明所涉及的一种可支持多语言文本解析的装置,包括:读取模块,用于读取系统启动前的配置信息;

转化模块,用于将读取到的结构化文本转换为char数组;

结构接口解析模块,对结构化文本进行解析,将该文本中的结构化标签解析生成AST语法树;

属性接口解析模块,对结构化文本进行解析,将该文本中的属性添加到对应的语法树节点;

语法树运行模块,用于运行生成的语法树。

一种可支持多语言文本解析的方法实施例:

本实施例公开一种可支持多语言文本解析的方案及架构.目前该方案及架构已经在Java语言下实现,并且提供一套模仿JAVA语法,并扩展基于文本解析和规则引擎的特殊标签。本实施例提供的一种可支持多语言文本解析的方法,应用于上述的一种可支持多语言文本解析的装置进行多语言文本解析,包括以下步骤:

步骤S1,设置文本模板的关键字和语法规则,将其定位为标签,并定义关键字和关键字接口类的绑定器;其中,绑定器用于绑定关键字和关键字接口类的关系,通过绑定器来解耦关键字(英文,中文等等对应相同一个接口类);

步骤S2,设计每个标签(例如if else等)对应结构的分析接口和属性解析接口(例如:if(i==0)其中”(i==0)”为属性),并且根据不同标签的分析接口和属性解析接口实现默认为英文的实现类,通过实现抽象类AbstractLanguageTagFactory即可令模板增加不同语言;

步骤S3,实现标签读取器,读取结构化文本,将读取到的结构化文本转换为char数组,并将该文本的结构化标签转换为关键字接口类,通过读取器读取完毕后,把char[]字符交给结构接口和属性接口,使其把char数组生成AST语法树,生成AST语法树;

步骤S4,通过标签解析接口的实现,对AST语法树进行解析,并生成可执行单元。其中,步骤S4的重点在于关键字是基于接口而不是关键字的文字本身,只要配置绑定器,不同的关键字字面上的意义会转为统一的关键字接口类的表达,整个程序遇到关键字接口类,就会把关键字的文字本身当做关键字接口类在程序上的意义),并生成文本解析的可执行单元。

步骤S5,实现可执单元运行器,客户端通过调用该运行器最终调用可执行单元。

在本实施例中,定义关键字和关键字接口类的绑定器,包括:

所有关键字接口均继承于父类BlueprintTag,每一个接口对应一个关键字而且默认是英文,通过绑定器解耦并变更关键字的语言;

若使用需要定义特定语言的关键字,则需要创建特定的绑定器,通过继承抽象类AbstractLanguageTagFactory来实现特定绑定器的创建。

在本实施例中,关键字是程序编写的时候已经固定的(是JAVA代码中的Interface(接口),所有关键字Interface都继承于父类BlueprintTag)每一个Interface对应一个关键字而且默认是英文,使用者不能随意添加,因为关键字定义后还需要实现关键字的逻辑,这里需要硬编码.但可以通过绑定器解耦并变更关键字的语言例如中文,泰语,日语等等。

如果使用需要定义特定语言的关键字,则需要创建特定的绑定器,通过继承抽象类AbstractLanguageTagFactory来实现特定绑定器的创建。

在本实施例中,通过绑定器来解耦关键字,包括:

系统通过抽象类AbstractLanguageTagFactory绑定关键字和关键字接口。

如图3所示,例如:RetrunTag.class接口对应的关键字就是return,程序默认的就是使用英文的绑定器。同时也提供了一个CNLanguageTagFactory的中文绑定器。如果需要实现更多的语言,则需要自行继承AbstractLanguageTagFactory,并且重写static的静态绑定。

如图4所示,RetrunTag.class接口对应的关键字就是返回。

在本实施例中,设计每个标签对应结构的分析接口和属性解析接口,包括:

在整个程序设计中,若关键字呈包裹形态出现即由“关键字:xxxx”开始,以“#xxx”结束,并且关键字体里面能包含其他关键字的实现,称其为结构化接口,即该关键字类为结构化类,结构化接口包括结构化接口和属性接口;若exec结束不带#的,exec为属性接口,属性接口不能同时包含属性接口和结构化接口。

具体的,在整个程序设计中,如果关键字呈包裹形态出现即由“关键字:xxxx”开始以“#xxx”,并且关键字体里面能包含其他关键字的实现,本实施例称其为结构化接口,那么该关键字类就是结构化类,结构化的类在模板中的体现是。例如图5中的[template:funcDemo(list)]关键字,后跟funcDemo(list),结束[#funcDemo]结束带有#号,那么template这个关键字接口就是结构化接口;例如[if:@list==null][else][#if]这里结束带有#符号if else就是一结构化接口;例如[exec:’两袖清风’]exec结束不带#的,exec就是属性接口,因为exec里面不能包含其他属性接口或结构化接口。可见,结构化接口在模板中的体现是结构化接口能包含结构化接口和属性接口,属性接口不能包含属性接口和结构化接口。

在本实施例中,如图6至图8所示,读取到的结构化文本其实是一个字符串,在将文本的结构化标签转换为关键字接口类时,先把字符串转为数组,通过StandardScannerDispatch中的analyzing函数分析字符串数组;

在analyzing函数读取到一个数组后,analyzing函数会从数组下标0开始直到数组结束逐个字符分析,例如:读取到数组下标为0的字符是“p”,analyzing就会到结构接口和属性解析接口的实现类中匹配,通过权重算法获取最匹配的结构接口和属性解析接口的实现类,如果有多个,那么数组继续读取下一个下标,直到选择出唯一的一个结构接口或属性解析接口的实现类。

当选出最匹配结构接口或属性解析接口的实现类时,该实现类挂载到AnalysisSupport类中;

然后自身继续调用analyzing函数找处下一个最匹配的结构接口或属性解析接口的实现类。

在本实施例中,AnalysisSupport是AST的管理类,该类自身维护了一个AST树(NodeUnit)。当char数组读取完毕时,AST就构建完毕。当AST树构建完毕后,程序会调用AttributeManger中的analyse函数封装AST,然后调用CompileManger的compile函数最终把AST转为可执行单元MetaAssemble。

当程序生成可执行单元后,通过InstallManager递归加载可执行单元,按最大结构package返回一个PackageContext的列表,如图9所示。

然后将PackageContext列表加载到VirtualRun类中,最终通过实例化该类,传入对应的参数即可执行出相应的结果,如图10和图11所示。

由此可见,相比较于现有技术,本实施例提供一种可支持多语言文本解析的方案及架构,该方案及架构在Java语言下实现,通过提供一套模仿JAVA语法,并扩展基于文本解析和规则引擎的特殊标签,通过使用本发明的用户只需要在启动文本解析前设置标签对应语言即可完成不同语言的切换。因此,本实施例通过统一模板引擎和规则引擎实减少开发人员学习曲线,通过配置器可以简单实现多语言。

上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。

相关技术
  • 陆相湖盆浅水三角洲识别方法
  • 浅水湖盆三角洲生长规律与沉积模式的获取方法及装置
技术分类

06120116521761