用于在消息代理器中动态创建分析器的方法和系统的制作方法

文档序号:6376202阅读:152来源:国知局
专利名称:用于在消息代理器中动态创建分析器的方法和系统的制作方法
技术领域
本发明一般涉及企业应用集成程序,尤其涉及由消息代理器(message broker)执行的消息分析的功能,消息代理器对从第一应用中接收的消息的内容进行变换,使得该内容可以被目标应用理解。
背景技术
随着面向消息的中间件(MOM)程序的使用,不同种类的应用能够在不了解通信装置的情况下在它们之间通信。利用异步通信协议,MOM程序在无连接模式下变得松散耦合的应用之间提供消息管理。MOM处理消息传输层并为应用管理消息队列。然而,使用MOM的服务的每个应用都需要知道与其通信的应用的消息的格式。
为了提供更深层次的企业应用集成(EAI),应用适合于以使用实时消息传送机制(例如,公布/预定,请求/应答,同步,异步)来呈现为面向事务处理的。一种新的编程层,即消息代理器程序,负责浏览消息内容以识别消息类型,查看相应的消息格式,识别消息的逻辑内容,必要时修改消息内容,启动与目标应用的格式化适应,以及向MOM队列路由消息或直接向目标应用路由消息。其中一个例子是IBM的WebSphere MQIntegrator V2(在本文中标记为WMQI)(IBM,WebSphere和MQIntegrator是IBM公司在某些国家的商标)。
EAI软件生产商目前售出的消息代理器支持二进制形式(C语言或Cobol消息)消息,任选地包含固定格式的标记消息(如SWIFT,EDI或者FIX消息),或者支持有标记但灵活的自描述消息,如利用XML协议。
消息代理器可以用不同的分析器(parser)生成,每种分析器执行不同消息类型的语法分析。通常,消息代理器程序提供用以增加更多分析器的接口。然而,消息代理器无法支持更为高度灵活的语法消息,如电子邮件消息。这种消息是众所周知的名叫基于上下文无关语言的消息。在本文的其余部分,它们将被称为“类似电子邮件”类型消息。WMQI消息代理器支持XML类型消息或类似Cobol的定制有线格式消息或者标记消息。这些类似电子邮件类型消息是具有无法用Cobol或C结构或标记来描述的更为复杂的结构的消息。举例来说,电子邮件地址可以包括在该地址的任何位置的“(”和“)”之间的任意注释。根据描述电子邮件语法的RFC2822,Dupont.(I am the greatest)Marc@(the)Vegas.WBA的表达式是一个有效地址,并且等效于Dupont.Marc@Vegas.WBA, 或甚至等效于Dupont(Iam).(the)Marc(greatest)@(The)Vegas(in nevada).WBA。如果一个消息包含这种可变的内容文字,则固定的语法分析无法处理它,而且使用“(”的标记描述将导致太复杂的定义,因为在任何位置都可以出现这种注释。另外,这些消息包含无法用固定的标记描述的语法结构,因为它们的解释依赖于一个大的记号序列,而不是一个简单的标记/值,或者甚至标记/子标记递归序列。因此,到目前为止,在于修改消息代理器分析器的解决方案将导致大量代码要重复执行,以便将标记消息或数据结构化消息记号发现应用于该消息中的多个任意位置,即重复执行次数与这些高度灵活的消息的语法所授权的这些位置的数量一样多。此外,所有这些新的情况都不能由这种语法分析来覆盖。这种方案的另一个缺陷是用于维护目的的对应代码的质量较差。
应指出,为了用新的分析器来丰富当前的消息代理器,目前可以使用由大部分的消息代理器提供的分析器插件API。WMQI提供一种C语言API以增加一种分析器,使得其能够处理任何给定的消息类型或格式,只要有适当的分析器可用。插入到消息代理器中的任何新的分析器也应该能够适于提供与存储器中的逻辑消息表示兼容的输出格式,如消息代理器的其它功能(路由选择,格式化)所期望的那样。

发明内容
本发明的一个目的是向消息代理器添加能够处理诸如电子邮件消息的基于上下文无关语言消息的分析器。
本发明的另一个目的是提供一种快速和简单的方式来在消息代理器中添加基于上下文无关语言消息分析器。
这些目的是通过使用如权利要求1-9所述的方法实现的,用于利用为类似电子邮件类型的消息动态创建的分析器增强工作于数据处理系统中的消息代理器。该方法包括步骤为每种类型的类似电子邮件类型的消息,在存储器中创建一个规则树,该规则树是对应于该类型的类似电子邮件类型的消息的LL(k)文法(grammer)的规则在存储器中的基于树的逻辑表示;在一个消息被消息代理器接收和识别为所述类似电子邮件类型的一种类型时,读出对应的规则树,并尝试在所述消息上匹配LL(k)文法规则;如果文法规则匹配,则在存储器中建立消息树,该消息树是该消息在存储器中的基于树的逻辑表示;然后,读出在先前步骤执行的输出中在存储器中建立的消息的逻辑表示,并在消息代理器的后续处理步骤中使用它。由EAI管理员对LL(k)文法规则的输入优选用图形编辑器进行,以便为分析器的创建带来更多的动态性。
利用包括适合于执行根据权利要求1-9任何一项的方法的装置的计算系统,也可到达上述目的。
基于上下文无关语言的消息可以基于LL(k)文法,因为这些消息的语法(syntax)可以基于本领域的技术人员能简单定义的一组LL(k)文法规则来分析。至今为高级编程语言编译已知的LL(k)文法,特别适合于基于上下文无关语言的消息的语法分析。
随着LL(k)文法的使用,记号发现过程适合于基于上下文无关语言的消息,由此避免了基于与标记或数据结构化一起使用的重复记号发现过程的算法的弱点。一个结果是用于执行语法分析的对应代码的高质量和维护该代码的简便性。
本发明的另一个优点是一趟式(in one pass)创建对应于基于一种上下文无关语言的消息类型的规则树的可能性。一个通用的分析器被一次创建并被插入到消息代理器。将能够通过利用刚刚定义的规则树对基于上下文无关语言的消息进行语法分析。
该解决方案提供了高动态性,因为在存储器中的规则树创建可以通过根据本优选实施例的图形用户界面来推动。此外,EAI管理员不仅能创建一个对应于新的LL(k)文法的新的规则树,而且能修改现有的规则树文件,如果他想反映该LL(k)文法的规则中的变化的话。
因此,利用本发明的解决方案,利用处理诸如由RFC2822定义的电子邮件消息的不同的基于上下文无关语言的消息的不同分析器,可以一趟式丰富消息代理器。
利用本发明的解决方案,购买消息代理器以建立EAI环境的用户可以使用消息代理器的分析器插件接口来添加类似电子邮件类型的消息分析器。消息代理器程序生产商可以通过在消息代理器程序中增加这种分析器来丰富该程序。利用本发明的解决方案,消息代理器程序生产商也可包括规则树生成器和通用LL(k)文法分析器作为程序组件,以便让用户自己生成分析器来处理他所期望的任何类型的电子邮件类型消息。


图1示意了允许一组不同种类的应用一起通信的EAI环境;图2示出了根据本优选实施例,被实现为在计算系统中执行的程序的消息代理器的逻辑框图;图3示出了根据本优选实施例的消息代理器的方法的一般流程;图4示出了根据本优选实施例,用于生成在用于代理消息的方法中使用的分析器的方法的流程图;图5示出了规则树存储器的图形表示;图6示意了在寻找与LL(k)文法的一个规则匹配的一个例子中,使用面向对象的编程语言的本发明的一个实施例;
图7示出了作为例子的一个规则的图形表示。
具体实施例方式
图1示意了在用于典型的商业环境的企业应用集成程序中的消息代理器(105)的使用。一组应用(140)可以在通过公用的或专用的局域网(150)或广域网(130)通信的不同计算机上工作。EAI程序优选安装于与应用计算机相连的分离计算机(100)之上并在该计算机上工作。任何应用都可以从其它应用接收消息,并通过EAI计算机向其它应用回送应答或发送新的请求。独立的用户(110,120)可通过公众网络与一个SMTP服务器(140)相连,SMTP服务器也可通过EAI程序与这些应用通信。通过EAI程序通信的应用可以使用不同的编程语言,这取决于它们开发的时间,它们还可以在计算机上使用不同硬件和操作系统。MOM软件(115)利用诸如HTTP或TCP/IP的公用传输协议来执行与这些应用的异步通信。由MOM接收的消息被发送给消息代理器,消息代理器浏览它们的内容并将它们路由到用于目标应用的MOM队列。消息代理器软件层已经适用于应用环境,其知道消息格式,处理规则并支持不同类型的消息。根据本发明的优选实施例的消息代理器能够接收类似电子邮件类型的消息。
图2描述了根据本优选实施例的消息代理器(200)的程序逻辑框图。虚线描述了在消息代理器逻辑框图中由类似电子邮件类型的消息使用的路径。消息代理器通过INPUT/OUTPUT(输入/输出)接口逻辑功能块(250)从应用接收消息。INPUT/OUTPUT接口可以有不同类型消息代理器可具有与应用(241,215)的直接API接口,或者可以具有与MOM的接口,MOM为所有应用(以HTTP为例)处理(235,245,265)公用协议层。这种接口逻辑功能块的输出是包含消息的字节流,其需要通过消息代理器来处理并发送给目标应用。类似电子邮件类型的消息通过消息代理器经由MOM(245)接收。消息类型识别功能块(255)将消息字节流转换为分析器逻辑功能块(260,265,270)之一。在图2中表示了不止一个分析器,其中每个分析器都对应于一个特定的消息类型。一些分析器可以由消息代理器提供,其它分析器已经利用在大部分消息代理器中可用的分析器API插件来添加。类似电子邮件类型的消息被发送给逻辑功能决(270),用于执行能够对任何类似电子邮件类型的消息进行语法分析的通用代码。为了指定电子邮件类型的消息,消息类型识别功能块(255)为电子邮件类型消息分析器(270)提供一个指针,以指向在规则树数据库(275)中保存的一个特定的LL(k)文法规则树。后面将参照同一附图在本文中说明,LL(k)文法规则树已经预先通过一个新的逻辑功能块(242)来创建。因此,用于执行用于语法分析的通用代码的逻辑功能块(270)接收消息字节流和指向特定规则树的指针作为输入数据。在语法分析逻辑功能块中执行的消息的语法分析在于读出该消息,并识别与规则树中的规则的匹配。语法分析的输出可以是发送给消息代理器的异常错误,如果没有找到与规则的匹配,则消息代理器向发起者应用回送一个错误。如果在该消息的语法分析过程期间找到了匹配,则该消息遵循该文法规则,而且语法分析功能块的输出是在消息分析期间已经在存储器中建立的消息的逻辑表示。应指出,大部分的消息代理器具有该消息的基于树的表示。因此,大部分时候,语法分析逻辑功能块向消息代理器提供在存储器中的类似电子邮件类型消息的基于树的表示。消息代理器利用消息树来创建在消息内容处理逻辑功能块(280)中的目标应用所期望的消息内容。根据由EAI环境管理员所定义的处理规则(290)执行该处理。该处理规则用于分析一个特定的消息语义内容(例如更新银行帐户的消息格式)以及执行逻辑路由选择。根据特定的处理规则,消息内容处理逻辑功能块(280)可以计算一个目标应用所期望的新的字段。该消息内容然后通过INPUT/OUTPUT接口逻辑功能块(250)发给一个或多个目标应用或者MOM中的一个或多个特定的消息队列。消息格式(295)被应用在输出接口(250),用于产生目标应用所期望的物理字节流。
用于对类似电子邮件类型的消息进行语法分析的通用代码是基于LL(k)文法的语法分析器。此外,这种分析器读出字节流消息,并参考表示存储器中的LL(k)文法规则的规则树,找出在该消息中与文法规则的可能匹配。回到消息代理器,在本优选实施例中,添加一个逻辑功能块(242),用于允许EAI管理员在计算机上输入对应于特定的电子邮件类型消息的语法的LL(k)文法的规则描述。在该逻辑功能块中,执行文法规则的基于树的表示在存储器中的建立。规则树可以存储在数据库中用于进一步的使用。
应指出,在本优选实施例中,通过图形用户界面执行文法规则输入。事实上,文法规则可以很容易地用图形表示为树。规则树是图形表示的逻辑视图。还应指出,在用于规则树预备的逻辑功能块中,可以编辑存储器中的现有规则树用于修改文法规则。
由EAI管理员所创建的每个规则树对应于LL(k)文法语法,由此对应于一个类似电子邮件类型的消息。即将要说明的是,对于给定的类似电子邮件的消息类型所对应的规则树的访问被指配给消息类型识别逻辑功能块(255)中的分析器(270)。分析器将执行在前一逻辑功能块中识别的类似电子邮件类型所对应的字节流的语法分析,并将以遵循逻辑功能块(280)的消息代理器所期望的方式在存储器中建立表示该消息的消息树。因此,EAI管理员通过创建规则树能够动态地使通用的类似电子邮件类型的消息分析器(270)能支持类似电子邮件类型的对应类型的消息的语法分析。
由于语法文法通常是用称为语法元语言的符号表示法(notation)描述的,因此这是可能的。这种符号表示法用于定义描述编程语言的结构的规则集合。常用的符号表示法得自BNF(Backus-Naur形式),从Algol 60编程语言(Naur,1960)开始的符号表示。一些最近的形式称为eBNF(扩展的BNF),并且在ISO/IEC 14977标准中描述。举例来说,UNIX系统提供了使用BNF形式的lex和yacc正式记号化器和分析器。当用于编译基于上下文无关的编程语言时,LL文法,其第一个L代表从左至右扫描输入的编程源代码,而第二个L代表产生最左派生(也称为从上至下的语法分析(top down parsing))。基于LL文法的编译程序根据名称与规则匹配的专用函数调用产生源代码。
图3示出了根据本优选实施例的消息代理器的方法的一般流程。根据本优选实施例,EAI管理员必须使消息代理器能够支持类似电子邮件类型的消息(300)。EAI管理员优选利用图形编辑器来输入对应于这些类似电子邮件类型消息的语法的LL(k)文法规则的图形表示。诸如XML的编程语言或描述语言可以用于输入文法规则,但是这种操作模式不是优选的,因为其相比用图形编辑器的动态性要差。在该输入结束时,在存储器中创建规则树并保存规则树,用于消息代理器的进一步使用。规则树通常存储在操作EAI程序的计算机可访问的数据库中。管理员将在消息代理器中生成对该规则树的新的引用,以便消息类型识别能够识别这种新类型的消息和这种新的规则树。用于在消息代理器中生成和安装新的分析器的工具是消息代理器基本功能的一部分。
一旦产生了规则树,消息代理器可以在任何时候处理类似电子邮件类型的消息,对于类似电子邮件类型的消息,该语法遵循在规则树中描述的文法规则。当消息代理器接收到这种消息时,执行信息类型识别,并且向可以是任何类型的分析器发送该消息。在该信息类型识别逻辑功能块,使用消息头部中的一些信息或在其自己的特性中指定的一些信息来确定如何对消息体进行语法分析-如果该消息具有可识别的路由头部,在该头部中识别的域被用于决定调用什么消息分析器。
-如果该消息没有可识别的头部,或者该头部没有识别该域,但是在消息类型识别逻辑功能块中的特性指示了该消息的域,则调用由该特性指定的分析器。所指定的分析器可以是插件型分析器,如类似电子邮件类型的消息分析器。
-如果该消息域无法被识别,则将该消息作为二进制对象处理。
如果该消息是对应于新的规则树的电子邮件类型(对测试315回答‘是’),则向用于类似电子邮件类型的消息解释的通用分析器提供消息字节流。这种解释步骤(330)在于读出该消息,并分析该语法是否与在该树中读出的文法规则一致。后面将参照图6在本文中描述,将研究规则树的树枝以查找与该消息的内容的一个或多个规则匹配。在查找匹配过程期间建立消息树,每当找到一个匹配时建立一个树枝。在解释结束时,以适合于语法分析之后的消息代理器处理步骤(380)的格式在存储器中存储消息树。根据本优选实施例的语法分析步骤是解释而不是编译,因为其执行导致在存储器中创建直接可用的数据,即消息树。消息树在消息代理器的之后步骤中被使用来创建如接收它的目标应用所期望的消息内容(360)。该消息然后向目标应用路由(370)。这两个最后的步骤在消息代理器中没有发生变化。
图4描述了由EAI管理员对规则树的动态创建的步骤。当管理员启动规则树创建(400)时,启动图形树编辑器(410)。如果要输入LL(k)文法规则或节点(对测试420回答‘是’),绘出一个节点作为一片叶子,和/或绘出一个规则作为树的枝(430)。于是在存储器(440)中创建了叶子和树枝的对应的逻辑表示。如果不用再输入新的节点或规则(对测试420回答‘否’),所绘出的树被保存在存储器中。这种保存可以在具有指令表(repertory)的数据库中进行,在该指令表中,一个输入包含LL(k)文法规则树的初始规则名称和指向它的指针。并且,当管理员改变现有规则时,他能够启动规则树创建(400),并选择在其已经通过其初始规则名称识别的已经保存的规则树上启动。图形编辑器(410)检索该规则树,显示它,并允许删除树,树枝或叶子,或者在他要输入新的规则或节点的情况下(对测试420回答‘是’),输入新的叶子或新的树枝。
一种LL(k)文法规则的一个例子是StopChkAudRs:([Status]RqUID[AsyncRqUID Custid])[[RecCtrlOut](DepAcctId|CardAcctId|LoanAcctId)][SelRangeDt ChkRange](StopChkMsgRec)*];这种LL(k)文法规则用图形表示为图7中的树,图7是作为例子给出的上述LL(k)恩法规则的视觉表示。在显示操作由规则树预备操作(图2中的逻辑功能块242)激活的图形编辑器的EAI管理员时,它被表示为完整的LL(k)文法规则的树的一部分。
StopChkAudRs(700)是表示为树的命名规则。当指示了用于序列的属性SEQ时(710,720,730),以下的规则序列必须以所指出的顺序匹配。如果属性是SWT,指示用于转换(760), 则任何一种都可以匹配。
+是在这种图形表示中使用的符号,以指示该元素不是终端,而且这是对另外一个命名规则的引用。在图7中的规则的例子中,只有3个元素(740,750,770)是终端/最终元素。
非终端元素770具有从1到n的基数(cardinality),这意味着其可能不会被找到,或者可以被重复多达n次。这也可通过表示任选路径的虚线表示(这些路径的基数意味着基数可以是0或1)。这就是为什么通过虚线可连接的元素770的基数可以从0到n。
图5是在显示操作由规则树预备操作(图2中的逻辑功能块242)激活的图形编辑器的EAI管理员时,作为树的一般LL(k)文法的虚拟表示。类似电子邮件的消息类型语法可以很好地由LL(k)文法的规则来定义。语法文法通常是用称为语法元语言的符号表示法来描述的。命名了不同的语法部分。终端元素通常称为记号,汇总这些终端的规则称为非终端。用于语言或消息的符号的有效序列是利用符号表示法来描述的。还描述了任何有效语言或消息结构的语法。
树(500)具有输入点,该输入点是初始规则名称表(510)。从作为该树的根的这个表附加具有命名的主节点(520,580)的两个树枝(也称为子树)(515,580)。第一树枝(515)是该树的主树枝。在第一树枝中有两个对第二树枝(580)的引用(550,570)。这暗示当发现第一树枝(515)时,找到3个不同的子树枝(530,560,570),每个树枝均具有子子树枝(540,550)或者为叶子(530,560,570)。叶子可以是对命名规则(550,570)的引用,这暗示了该树的树枝向具有在规则名称散列表中存储的输入点的新树枝(580)的虚拟扩展。
在LL(k)文法中,规则树中的每个节点与一种类型和任意的属性相关联。该类型可以是规则,循环,任意,匹配和转换。属性可以定义前视深度(k),要找到的记号标识符,该节点的任意属性。节点类型和属性的使用将在之后参考图6在本文中进行说明。图6描述了根据在规则树中描述的LL(k)文法规则,执行字节流消息的语法分析的方法。
根据图6的优选实施例由消息类型标识符发送的类似电子邮件类型的消息是通过根据特定的LL(k)文法规则树的分析器分析的。分析器通过读出规则树数据库的规则树指令表访问规则树的输入。图6的流程图的步骤描述了研究该消息以找到与规则树的不同树枝的匹配。
举例来说,EAI管理员可根据本优选实施例决定创建用于RFC2822定义的电子邮件消息的规则树,并将该规则树包括在消息代理器中。提供以下的电子邮件作为对于电子邮件分析器的字节流Received:from x.y.test by example.netvia TCP with ESMTP id ABC12345for<mary@example.net>;21 Nov 1997 10:05:43-0600Received:from machine.example by x.y.test;21 Nov 1997 10:01:22-0600From:John Doe<jdoe@machine.example>
To:Mary Smith<mary@example.net>,from@domain,″:sysmail″@Some-Group.Some-Org,Guess.(I am the greatest) Who @(the)Vegas.WBAReply-To:reply@domainSender:sender@domainSubject:Saying Hello.test of a subject with@special\(characters)(insideof the #~subjectDate:Fri,21 Nov 1997 09:55:06-0600Message-ID:<1234@local.machine.example>
This is a message just to say hello.
So,″Hello″.
一旦根据所描述的方法进行了语法分析,就可得到以下的消息树。
Message---+--->Received:from x.etc......
+--->Received:from machine.etc......
+--->From:----+--->Angle address +--->display-name:JohnDoe| +--->local-address:jdoe| +--->domain :machine.example|+--->To:------+---->Angle address+--->display-name:Mary Smith|| +--->local-address:mary|| +--->domain :example.net||+--->Classic address+--->local-address:from|| +--->domain :domain|||+--->Quoted address+--->local-adress::sysmail|| +--->domain :Some-Group.Some-Org|||+--->Classic address+--->local-address:Guess.Who|+--->domain :Vegas.WBA|+--->Reply-To:+--->Classic address+--->local-address:reply| +--->domain :domain|+--->Sender:+--->Classic address+--->local-address:sender| +--->domain :domain|+--->Subject:Saying Hello.test of a subject............
+--->Date:Fri,21 Nov 1997..........
+--->Message-ID:<1234@local.machine...............
+--->Body of message This is a message..................
该消息语法分析在于,如果消息字节流遵循在规则树中所描述的语法规则,则创建消息树。LL(k)文法规则的树表示的每个节点的类型和属性,规则树被读出,以便找到与输入的字节流消息的匹配。在规则树的树枝中,节点类型“规则”汇总其它节点并具有能够在诸如匹配的其它规则中被引用的名称。如果节点类型是“循环”,通用代码将围绕所有的子节点循环直到记号匹配失败。如果节点类型是“任意”,则对于一个匹配测试所有的子节点。如果节点类型是“匹配”,则记号标识符或命名规则被匹配。如果节点类型是“转换”,则属性指定分析器名称,该分析器将继续对消息的后续分析,然后返回当前的分析器。在缺省情况下,顺序处理所有子节点。如果在节点中出现不能识别,则具有任意属性的任何节点将不产生语法分析故障。通用代码将产生消息树,经语法分析的字节流消息缓存器的语法树的存储器内表示。
图6示意了当由EAI管理员搜创建的LL(K文语法规则树实际上是用于对象编程语言的规则-对象模型时,本发明的一个不同实施例。此外,用于语法分析的通用代码是使用由EAI管理员动态创建的LL(k)文法规则-对象模型的面向对象的编程代码。面向对象的编程语言可以是Smalltalk或Java(Java是SUN微系统公司在某些国家的商标),或者任何其它面向对象的编程语言。类似电子邮件类型的消息的语法分析结果是消息-对象,消息-对象是逻辑表示比消息树更一般的消息的方式。这种逻辑表示可以被例如,消息代理器的进一步处理使用。
图6的流程图描述了根据本发明的该特定的面向对象的实施方式,对类似电子邮件类型的消息进行语法分析的方法的一部分(规则A)。该方法的一部分用于查找消息语法和LL(k)文法的一个特定规则的匹配。为了执行类似电子邮件类型消息的完整语法分析,这一部分用依赖于初始规则的LL(k)文法的所有规则重复执行,直到找到一个匹配。如果规则A是LL(k)文法的初始规则,则在图6中示意的过程的结果是类似电子邮件类型的消息的语法分析结果。如果规则A匹配过程(680)的结果是OK(a)(680),则a是消息-对象。如果结果是NotOk,则将为该消息发出一个异常错误。
在图6中,假设EAI管理员已经输入了人们想要进行语法分析的类似电子邮件类型的消息的语法所对应的LL(k)文法夫人规则。EAI管理员已经创建了规则-对象模型。用于规则A匹配(605)的过程由第一消息”getObject(s)”触发,其中s是类似电子邮件类型的消息字节流。getObject消息的含义是检查是否存在与规则和字节流的匹配,如果存在匹配,则返回结果消息-对象。在匹配过程中使用另一消息是”hydrateAsNeeded(a,s)”,a是为消息-对象分配的缓冲器,并且将在匹配过程期间填充。消息“hydrateAsNeeded”是指所分配的消息-对象缓冲器必须通过其它元素填满或完成。在图6的例子中,假设规则A包括两个规则的相继执行规则B和规则C;这些规则的每一个必须被匹配n次,即具有一定的基数。如果基数是0,这种情况肯定没有被验证,如果基数是n,则这种情况必定被验证了n次,如果不是这样,则有错。利用以下的对象表示描述相同过程。
例如,在此模型中,如图6所示,通过5个对象(610,620,630,650,660)表示规则A,这5个对象是具有作为示例的类A的规则A对象(610),具有水合(hydrate)结果(a)的方法(mb)的对象基本CB(620),其规则B处理对象(630),具有水合结果(a)的方法mc的对象基本CC(650)。
通过向规则B发送具有要进行语法分析的消息字节流s的消息getObject(s),启动查找匹配的方法(600)。规则A预备与该规则相关的类别ClassA的实例a(“a=new ClassA;”)。
然后规则A对象调用每一个基数对象以水合该实例。
向第一个基数对象CB发送hydrateAsNeeded(a,s)(615)。该基数对象将根据需要(根据基数规则)通过向规则B对象(630)发送(625)getObject(s)消息调用规则B过程。注意没有显示规则B过程的细节(该过程类似于规则A匹配过程)。该消息的结果可以是OK(具有适当的b对象)或NotOk(635)。如果返回的是OK,则通过向其发送具有该结果的mb消息作为参数“a.mb(b)”水合a对象。如果满足基数规范,则返回OK或Not Ok结果(640)。注意如果规则B不是被强制的话(基数可以是0),基数的结果可以是OK,即使规则B的结果是NotOk。
如果规则A对象是复合的(序列),则通过向第二基数发送hydrate(a,s)消息(645)从规则A对象继续该过程。类似于为规则B验证的匹配,如下所述用规则C验证匹配。向第一基数对象cc发送(645)hydrateAsNeeded(a,s)。这种基数对象将根据需要(根据基数规则)通过向规则C对象(660)发送(655)getObject(s)消息调用规则C过程。注意没有显示规则C过程的细节(该过程类似于规则A匹配过程)。该消息的结果可以是OK(具有适当的C对象)或NotOk(665)。如果返回的是OK,则通过向a对象发送具有该结果的mc消息作为参数“a.mc(c)”水合a对象。如果满足基数规范,则返回OK或NotOk结果(670)。注意如果规则C不是强制性的(基数可以为0),则基数的结果可以是OK,即使规则CB的结果是NotOk。
如果规则A没有匹配(从基数对象接收到NotOk,例如在640或670),则返回NotOk对象,并且在字节流中的当前光标被复位为其初始位置(600)。在此情况下,在第一调用程序(getObject消息600的发送方)的级别继续该过程。如果规则A匹配,则返回OK结果,并且以a对象作为被识别的记号对象(680)。
在面向对象的编程代码中实现的语法分析结果是一个消息对象实例,其可以被也使用面向对象的编程语言的消息代理器的之后处理使用。
权利要求
1.一种用于利用为类似电子邮件类型的消息动态创建的分析器,增强工作于数据处理系统中的消息代理器的方法,该方法包括步骤为每种类型的类似电子邮件类型的消息,在存储器中创建一个规则树,该规则树是对应于该类型的类似电子邮件类型的消息的LL(k)文法的规则在存储器中的基于树的逻辑表示;在一个消息被消息代理器接收和识别为所述类似电子邮件类型的一种类型时,读出对应的规则树,并尝试在所述消息上匹配LL(k)文法规则;如果文法规则匹配,则在存储器中建立消息树,该消息树是该消息在存储器中的基于树的逻辑表示;读出在先前步骤执行的输出中在存储器中建立的消息的逻辑表示,并在消息代理器的后续处理步骤中使用它。
2.根据权利要求1的方法,其中如果没有文法规则相匹配,则由于LL(k)文法规则在所述消息中不匹配,向消息代理器回送一个关于该消息的语法的异常错误。
3.根据权利要求1或2的方法,其中在存储器中创建规则树的步骤进一步包括,利用图形用户界面绘制表示文法规则的树的步骤。
4.根据权利要求1或2的方法,其中在存储器中创建规则树的步骤进一步包括,利用编程语言输入表示文法规则的树的步骤。
5.根据权利要求1至4任何一项的方法,其中在存储器中创建规则树的步骤进一步包括,编辑器允许修改或删除现有的规则树。
6.根据权利要求1至5任何一项的方法,进一步包括在创建规则树的步骤中在数据库中存储规则树的步骤,并且在读出对应的规则树的步骤中,在所述数据库中读出规则树。
7.根据权利要求1至6任何一项的方法,其中在规则树数据库中,有一个指令表,用于指向规则树的初始命名规则。
8.根据权利要求1至7任何一项的方法,其中每个规则树都包括一个散列表,作为LL(k)文法规则树的所有命名规则的指令表。
9.根据权利要求1至8任何一项的方法,其中创建规则树的步骤用于创建规则-对象模型,其中读出规则树的步骤用于读出规则-对象模型,并且其中在存储器中建立消息树的步骤用于建立消息对象,该消息对象是消息在存储器中的面向对象的逻辑表示。
10.一种包括适合于执行根据权利要求1至9任何一项的方法的装置的计算系统。
全文摘要
公开了一种用于利用为类似电子邮件类型的消息动态创建的分析器增强工作于数据处理系统中的消息代理器的方法。该方法包括步骤为每种类型的类似电子邮件类型的消息,在存储器中创建一个规则树,该规则树是对应于该类型的类似电子邮件类型的消息的LL(k)文法的规则在存储器中的基于树的逻辑表示;在一个消息被消息代理器接收和识别为所述类似电子邮件类型的一种类型时,读出对应的规则树,并尝试在所述消息上匹配LL(k)文法规则;如果文法规则匹配,则在存储器中建立消息树,该消息树是该消息在存储器中的基于树的逻辑表示;然后,读出在先前步骤执行的输出中在存储器中建立的消息的逻辑表示,并在消息代理器的后续处理步骤中使用它。由EAI管理员对LL(k)文法规则的输入优选用图形编辑器进行,以便为分析器创建带来更多动态性。
文档编号G06F9/45GK1997965SQ200380108346
公开日2007年7月11日 申请日期2003年11月14日 优先权日2003年1月7日
发明者马克·菲亚芒特, 热拉德·西蒙 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1