用于改进消息代理中的消息语法分析的方法和系统的制作方法

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

发明内容
本发明的目的是添加能够处理诸如电子邮件消息的高度灵活的语法消息的消息代理分析程序。
通过使用如权利要求1至6所要求保护的方法来达到这些目的,该方法用于用针对电子邮件之类类型的消息的分析程序增强在数据处理系统中运行的消息代理。该方法包括起始步骤,通过给上下文无关编程语言生成器提供与所述电子邮件之类类型的消息的语法对应的LL(k)文法(grammar)的规则,用所述上下文无关编程语言生成器来生成编译程序的源代码;然后,用所述编译程序源代码产生可执行代码;并在消息代理中安装并生成作为针对所述电子邮件之类类型的消息的新分析程序的可执行代码;当消息代理接收到消息并识别该消息为所述电子邮件之类类型的时候,用该可执行代码将所述消息作为上下文无关编程语言来分析;通常,由翻译程序(translator)和链接编辑程序使用由编译程序在存储器中建立的消息的逻辑表达,以从消息生成可执行代码。在本发明的情况下,由消息代理的接下来的处理步骤来使用作为执行前述步骤的输出的消息的逻辑表达。
用包括适配为执行根据权利要求1至6中任何一项的方法的装置的计算系统也实现这些目的。
因为以一组本领域技术人员可以方便地定义的LL(k)文法规则为基础,可以分析这些消息的语法,所以基于上下文无关语言的消息可以以LL(k)文法为基础。到目前为止对高级编程语言编译公知的LL(k)文法被特别适配为对基于上下文无关语言的消息的语法分析。
通过使用LL(k)文法,记号(token)发现过程被适应于基于上下文无关语言的消息,从而避免了已标记地或数据结构化地使用的重复记号发现过程为基础的算法的弱点。一个结果是执行语法分析的对应代码的良好品质,以及对该代码的维护的简化。
本发明的一个优点是可能重新使用基于现有LL(k)文法的编程语言编译程序生成器,开发者通常使用该编程语言编译程序生成器来产生与其生成的新高级编程语言对应的新编译程序。
通过本发明的解决方案,购买消息代理以建立EAI环境的顾客可以使用插入到消息代理的接口的分析程序,来添加电子邮件之类类型的消息分析程序。消息代理程序厂商可以通过将这样的分析程序添加到消息代理程序来丰富程序。使用本发明的解决方案,消息代理程序厂商也可以包括作为程序部分的编译程序生成器以及其对应树适应部分,并使用户自己把分析程序插入到消息代理中,以处理用户期望的任何类型的电子邮件类型消息。


图1图解允许一组不同应用一起通信的EAI环境;
图2示出根据优选实施例的消息代理的逻辑块,其实施为在计算机系统中执行的程序;
图3示出根据优选实施例的消息代理的方法的总体流程图4示出根据优选实施例的生成在用于代理消息的方法中使用的分析程序的方法的流程图5示出了根据优选实施例的用于分析电子邮件之类类型的消息的方法的流程图。
具体实施例方式
图1图解了消息代理(105)在用于典型的商业环境的企业应用集成程序中的使用。一组应用(140)可以在通过公用或私用的局域(150)或广域网(130)通信的不同计算机上运行。EAI程序优选地安装并运行在连接到应用计算机的分离计算机上。任何应用都可以从其它应用接收消息,并送还回答或通过EAI计算机向其它应用发送新请求。通过公用网络连接到SMTP服务器(140)的孤立用户(110、120)也可以通过EAI程序与应用通信。通过EAI程序通信的应用根据其开发时间可能使用不同的编程语言,其也可以在计算机上使用不同的硬件和操作系统。MOM软件(115)使用诸如HTTP或者TCP/IP的公共传输协议,来执行与应用间的异步通信。将MOM接收的消息发送到消息代理,该消息代理浏览消息的内容,并将消息路由发送到针对目标应用的MOM队列。消息代理软件层已经适合于应用环境,其知道消息格式、处理规则,并支持不同类型的消息。根据本发明的优选实施例,消息代理能够接收电子邮件之类类型的消息。
图2描述了根据优选实施例的消息代理(200)的程序逻辑块。虚线描述电子邮件之类类型的消息在消息代理逻辑块中所使用的路径。消息代理通过输入/输出接口逻辑块(250)从应用接收消息。该输入/输出接口可以是不同的类型消息代理可以具有与应用(241、215)间的直接API接口,或者可以具有对MOM的接口,该MOM为所有应用(例如HTTP)处理(235、245、265)公共传输层。该接口逻辑块的输出是包含需要由消息代理处理并传输到目标应用的信息的字节流。由消息代理经由MOM接收电子邮件之类类型的消息(245)。消息类型识别块(255)把消息字节流切换到分析程序逻辑块(260、265、270)之一。分析程序执行对消息的语法分析,并且提供下述内容作为输出如果消息包含语法错误就提供例外错误,或者存储器中消息代理用来建立目标应用所期望的精确格式的消息的逻辑表达。在图2中表示了多于一个分析程序,每个分析程序对应于特定的消息类型。一些分析程序可以由消息代理提供,而另一些分析程序可以使用在大多数消息代理中可得到的分析程序插件API来添加。将电子邮件之类类型的消息发送到特定的分析程序(270),该分析程序是根据优选实施例产生的基于上下文无关文法的编程语言编译程序,后面将参考相同的附图来描述该优选实施例。由分析程序对消息字节流执行的语法分析的结果是存储在存储器中的消息的逻辑表达。需要注意的是,大多数消息代理具有对消息的基于树的表达。根据用作电子邮件类型消息分析程序的编译程序的类型,由分析程序产生的消息的逻辑表达可以不需要适合于消息代理(280)的接下来的逻辑块使用的存储器中的逻辑表达。因此,新逻辑块(275)说明将消息的基于树的表达重新格式化为在处理逻辑块之后的消息代理所期望的新的基于树的表达的适应。然后在消息内容处理逻辑块(280)中使用该树来产生目标应用所期望的消息内容。根据EAI环境管理员所定义的处理规则(290)来执行该处理。处理规则用于分析特定的消息语义内容(例如,更新银行帐户的消息格式),并执行逻辑路由发送。根据特定的处理规则,在处理中也可以丰富规则,以使消息内容处理逻辑块(280)也可以计算目标应用所期望的新领域。然后通过输入/输出接口逻辑块(250),将消息内容发送到一个或多个目标应用或者MOM中的一个或多个特定消息对列。将消息格式(295)施加到输出接口(250),以产生目标应用所期望的物理字节流。
根据优选实施例,消息代理包括一个新逻辑块,即针对基于LL(k)文法的编程语言(242)的编译程序生成器。其可以是现有技术的编译程序生成器,例如,对于Java代码,可以是缩写为JAVACC的JAVA编译程序的编译程序(JAVA Compiler Compiler)(`JAVA Compiler Compiler`是Sun Microsystems的商标),或者对于Java代码或者C++代码,可以是可从ANTLR网站http//www.antlr.org/.免费下载的ANTLR分析程序生成器。编译程序生成器为程序员(230)提供了录入(enter)文法规则的接口。在输出端,编译程序生成器提供了某一语言下的源代码,作为任何源代码,其必须能被编译并被转换成机器可读(可执行)代码。作为结果的可执行代码是基于在生成器中定义的LL(k)文法的编译程序。其用作新分析程序,以对消息代理接收的新的电子邮件之类类型的消息进行语法分析。事实上,就像输入字节流是编程语言源代码一样,由基于LL(k)文法的编译程序逻辑块分析作为电子邮件之类类型的消息内容的输入字节流。块(270)的输出是计算机的存储器中存储的电子邮件之类类型的消息的逻辑表达。还添加读取存储器中的消息的逻辑表达的新逻辑块(275),并使该新逻辑块适应于消息代理(280)的下一个激活的逻辑块所期望的消息的逻辑(通常基于树)表达,所述消息代理(280)处理并格式化用于目标应用的消息。要注意的是,LL(k)文法编译程序的输出中提供的消息内容的逻辑表达也是基于树的。树适应逻辑块存在于存储器中的树的重新排列中。
通常,发明新编程语言的程序员使用基于LL(k)文法的编译程序生成器,来为他们的新语言产生编译程序。编译程序生成器为程序员提供描述语法规则的接口。现有技术的编译程序提供了录入LL(k)文法规则的编程语言。也可以用图形用户界面来录入文法规则。一旦录入了文法规则,程序员就激活新编译程序的源代码的输出中提供的生成器。程序员编译新编译程序的源代码,并获得用于编译将使用新编程语言生成的源代码的可执行程序。新编译程序读取新编程语言源代码文件,并执行对该代码的语法分析。程序员首先使用新编译程序来识别代码中的所有错误。在开发用新编程语言写的程序的期间,用语法错误检测来`调试′源代码。编译程序的一个常用性能标准首先是其检测编程语言错误的能力。当没有错误地执行编译程序时,该编译程序停止,并在存储器中存储所分析的源代码的逻辑表达。翻译程序和链接编辑程序使用该输出来产生可执行代码。由编译程序的开发者产生这个后面的程序。这个后面的程序是这样的程序其读取已经由编译程序存储到存储器中的已分析的源代码的逻辑表达,并产生可以由计算机执行的可执行代码。
当在优选实施例中使用基于LL(k)文法的编译程序,以分析电子邮件之类类型的消息的时候,如果没有语法错误,则存储器中电子邮件之类消息的逻辑表达用于消息代理的接下来的操作。一个适应程序将修改消息代理在计算机的存储器中的表达。
因为可以通过LL(k)文法的规则良好地定义每一个电子邮件之类类型的消息语法,所以使上述内容变得可能。电子邮件之类类型的消息的一个类型对应于特定的LL(k)文法。将参考在本文档中后面提供的电子邮件消息分析的例子来说明这一点。
通过定义与这种电子邮件之类类型的消息对应的LL(k)文法、产生LL(k)文法编译程序的逻辑块(在优选实施例中由编译程序生成器产生)、并产生与该编译程序对应(或者在优选实施例中与编译程序生成器产生的所有编译程序对应)的适应逻辑块,可以将电子邮件之类类型的消息分析程序添加到消息代理,该逻辑块能够将编译程序分析的消息在存储器中的逻辑表达读取成在消息代理中使用的表达。
因为电子邮件消息类型的语法接近于高级编程语言,并通过文法规则进行了良好的定义,所以有可能使用基于LL(k)文法的编译程序来分析电子邮件的消息类型。典型的LL文法(k是作为在找到终端之前发现并检查规则的记号的最大数量的预期最大数量),其中,第一个L代表对输入信息从左到右的扫描,而第二个L代表产生最左端导出式(也称为自上而下的分析)。分析程序首先找到根之子(children of root)等等。其还产生能够映射到大多数消息代理的语法树的语法树。LL文法编译程序能够分析任何种类的输入,包括不可打印的二进制输入,这使其甚至更适合于EAI类型的消息分析。
图3示出了根据优选实施例的消息代理的方法的总体流程图。根据优选实施例,在运行支持电子邮件之类类型的消息的消息代理之前,EAI管理员必须产生对应的分析程序。为了实现这一点,管理员执行可以并行进行的两个初始步骤。一个初始步骤是生成基于LL(k)文法的编程语言编译程序可执行程序。另一个初始步骤是产生能够读取由编译程序编译的源代码文件在存储器中的逻辑表达、并以与消息代理兼容的方式产生源代码的等价逻辑表达的程序。在生成器存储器表达与消息代理兼容的情况下,第二步骤是可选的。如果使用与消息代理的厂商不同的厂商的现有编译程序生成器,则不得不执行适应程序。如果为了消息代理的目的来开发编译程序生成器,则该表达将直接是消息代理的表达。这个适应程序是为了用生成器产生第一电子邮件之类类型的消息分析程序而产生的。一旦产生,适应程序将用于所有用相同生成器生成的分析程序。要注意的是,基于LL(k)文法的编程语言的编译程序在存储器中使用已编译代码的基于树的表达。大多数消息代理也使用它们处理的消息的基于树的逻辑表达。
当生成电子邮件之类类型的分析程序时,其在消息代理中生成以便消息类型识别辩认这种类型的消息并将其发送给新分析程序。用于在消息代理中生成并安装新分析程序的工具是消息代理基本功能的一部分。新的电子邮件之类类型的消息一旦被安装,就由消息代理用来与使用这类消息的应用对接。假设消息代理从EAI接口接收字节流,则第一步骤是识别消息的类型。在消息类型识别逻辑块中使用消息报头中的一些信息或者在它自己的属性中指定的一些信息,来确定如何分析消息体
-如果消息具有可辩认的路由发送报头,在报头中识别的域用于决定调用那个消息分析程序。
-如果消息不具有可辩认的报头,或者报头不识别域,但是在消息类型识别逻辑块中的属性指示了消息的域,则调用该属性所指定的分析程序。指定的分析程序可以是插件分析程序如电子邮件之类类型的消息分析程序。
-如果不能识别消息域,则将消息作为二进制对象处理。
一旦识别了消息类型,且如果是电子邮件之类类型的消息,则将字节流发送到用一个或两个步骤初始化进程产生的对应的电子邮件之类类型的分析程序。在接下来的步骤中,由基于LL(k)文法的编译程序对字节流进行语法分析,如同字节流是编程语言源代码一样。因为消息是不可辩认的,所以分析的结果可能是语法错误。当电子邮件之类类型的语法正确时,该结果是位于计算机的存储器中的输入消息的(通常基于树的)逻辑表达。在下一个步骤中适应这个表达。如前所述,根据如何产生分析程序,上一个步骤是可选的。下一个步骤是处理该消息的内容,如同该消息的内容是XML或者Cobol类型的消息一样。上一个步骤是把这个电子邮件之类类型的消息路由发送到目标应用,就像在消息代理中对任何类型的消息所进行的一样。在消息代理中上两个步骤没有改变。
图4描述了在消息代理中能够支持电子邮件之类类型的消息的分析程序的初始化步骤。通常由EAI程序管理员执行初始化,管理员需要与支持这类消息的新应用对接。第一步骤是激活为这个目的而开发的、或者可以是JAVACC或ANTLR的LL(k)文法编译程序生成器。在本文档的后面接下来的说明性例子中,使用了ANTLR。管理员录入文法规则,该文法规则定义了新应用所支持的电子邮件之类类型的消息的语法。在本文档后面的说明性例子中,消息是RFC2822所定义的电子邮件消息。生成器产生分析程序源代码,管理员用该代码生成可执行代码。必要时,如果编译程序在存储器中产生的树结构与在消息代理中定义的树结构不兼容,则生成消息逻辑表达适应程序,以把编译程序在存储器中产生的树结构映射到在消息代理中定义的树结构。当管理员想添加第二个电子邮件之类类型的分析程序时,我们简直是(only not)重复逻辑表达适应的上一步骤。上一步骤是包括编译程序,且可能的话,包括例如使用分析程序插件API的消息代理中的适应程序。
图5示出根据优选实施例的在消息代理中执行的电子邮件之类类型的分析操作的流程图。第一步骤是读取与消息代理传输的将要分析的消息对应的字节流。在优选实施例中,第二步骤是激活编译程序,该编译程序通过发现所使用的语法并与在编译程序生成阶段存储的文法规则进行比较来执行分析。与分析同时地,编译程序在存储器内建立消息的逻辑表达。如果编译程序找到语法错误,编译程序就停止,并且将例外消息发送到消息代理,该消息代理本身将错误消息发送到源应用。如果编译程序完成语法分析而没有错误,则该编译程序将在存储器中的消息的逻辑表达的索引(reference)返回给消息代理。如果需要适应,则将该索引给予逻辑表达适应程序,所述逻辑表达适应程序自动启动并将被索引的消息逻辑表达映射到适应于消息代理的表达。适应消息把消息的适应逻辑表达的索引返回给消息代理。
作为例子,EAI管理员可以根据优选实施例决定产生并在消息代理中包括针对RFC2822定义的电子邮件消息的分析程序。管理员可以使用ANTLR,即一种能够从ANTLR网站http//www.antlr.org/.免费下载的用于Java代码或C++代码的编译程序生成器。ANTLR提供文本输入以描述文法。RFC2822用于使用如下的代码来录入文法规则
  class eMailParser extends Parser;  options{buildAST=true;}/*Build a syntax tree*/  message(fields)*;  fields(from   |to   |sender   |reply_to   |subject   |return_path   |date   |received   |message id<!-- SIPO <DP n="9"> --><dp n="d9"/>  )(CRLF|body);  bodyBody{#body=#([BODY,″Body text″],#body);};/*{#body=..}creates a<br/>dummy tree root named″Body text″*/  from″From^{parseAddress(##);};/*the″^″makes″From″the root of the<br/>AST*/   /*parseAddress(##)sWitches to the eMail address parser*/  sender″Sender″^{parseAddress(##);};  reply_to″Reply-To″^{parseAddress(##);};  to″To″^{parseAddress(##);}  subject″Subject″^utext;  message_id″Message-ID″^utext;  retum_path″Retum-Path″^{parseAddress(##);};  received″Received″^(FWS|WS)*Atom utext;  date″Date″^utext;  utext(Atom|FWS|NO_WS_CTL|WS  |Comma|Dot|At|Colon|Semicolon  |Lt|Gt|Escape|KEYWORD  |Other_Ascii  )*;  class eMailLexer extends Lexer;/*Extract of the lexical analysis see full lexer<br/>in te provided source*/  ………………………………………………  protected Atext(ALPHA|DIGIT|//Any character except controls,  ″!″|″#″|//Space,and specials.  ″$″|″%″|//Used for atoms  ″&amp;″|″″|″*″|″+″|″-″|″/″|″=″|″?″|  ″^″|″_″|″`″|″{″|″|″|″}″|″~″);  Atom(Atext)+(′′{$setType(KEYWORD);})?;  …………………………………………………………………
用ANTLR编译程序生成器可以录入多于一个文法这符合如RFC2822中描述的可以用两种文法描述的电子邮件消息语法的特征,一种针对消息本身,一种针对电子邮件地址。并非所有的编译程序生成器都接受多于一个文法的录入。然而,在生成器不接受多于一个文法的录入的情况下,本领域的技术人员知道如何用一种文法描述电子邮件的语法。
一旦录入描述文法的文本,就执行ANTLR并产生例如C++语言的输出源代码文件,该输出源代码文件是能够分析电子邮件消息的编译程序的源代码。生成对应于编译程序源代码的可执行代码,这将是电子邮件分析程序的主要部分。如果管理员第一次使用这个ANTLR生成器,且如果所生成的编译程序的树表达与消息代理不兼容,则管理员必须生成第二可执行代码,以读取存储器中的用ANTLR生成的编译程序自己所生成的树表达,并生成另一个由将要包括电子邮件分析程序的消息代理所使用的逻辑表达。以ANTLR文献来描述这个树结构。
提供下述电子邮件作为到电子邮件分析程序的字节流
Receivedfrom x.y.test by example.net via TCP with ESMTP id ABC12345
For<mary@example.net>;21 Nov 1997 10∶05∶43-0600
Receivedfrom machine.example by x.y.test;21 Nov 1997 10∶01∶22-0600FromJohn Doe<jdoe@machine.example>
ToMary Smith<mary@example.net>,from@domain,″sysmail″@
Some-Group.Some-Org,Guess.(I am greatest)Who@(the)Vegas.WBA
Reply-Toreply@domain
Sendersender@domain
SubjectSaying Hello.test of a subject with@special\(characters)(inside
of the#~subject
DateFri,21 Nov 1997 09∶55∶06-0600
Message-ID<1234@local.machine.example>
This is message just to say hello.
So,“hello”.
一旦根据所描述的方法分析,就得到下面的树
Message---+--->Receivedfrom x.etc……
+--->Receivedfrom machine.etc……
+--->From-----+--->Angle address+--->display-nameJohn Doe
| +--->local-addressjdoe
| +--->domainmachine.example
|
+--->To------+--->Angle address+--->display-nameMary Smith
| | +--->local addressmary
| | +--->domainexample.net
| |
| +--->Classic address+--->local-addressfrom
| | +--->domaindomain
| |
| +--->Quoted address+--->local-addresssysmail
| | +--->domainSome-Group.Some-Org
| |
| +--->Classic address+--->local-addressGuess.Who
| +--->domainVegas.WBA
|
+--->Reply-To+--->Classic address+--->local-addressreply
| +--->domain domain
|
+--->Sender+--->Classic address+--->local-address;sender
| +--->domaindomain
|
+--->SubjectSaying Hello.test of a subject…………
+--->DateFri,21 Nov 1997………
+--->Message-ID<1234@local.machine…………
+--->Body ofmessage This is a message…………
然后,写电子邮件分析程序的主程序。该主程序包括用于读取消息代理提供的电子邮件消息字节流、并激活用ANTLR产生的编译程序部分的指令。该主程序还包括读取编译程序执行的输出的指令,由于其包括语法错误消息和由编译程序建立的电子邮件消息的基于树的表达的索引,所以是双重的。如果有错误消息,则程序结束,并且可以在存储器中读取错误消息。如果没有错误消息,则将该索引给予为了树适应而产生的第二可执行代码,在树适应之后,主程序接收消息代理可以使用的电子邮件消息的逻辑表达的索引。需要注意的是,由于用两种文法生成编译程序,所以编译程序将在存储器中建立两种树,并且将给出两个索引作为编译程序的输出。对两个树执行树适应,且电子邮件分析程序的主程序结果包括消息代理可以使用的电子邮件消息的逻辑表达的两个索引。
在该例子中,刚产生的电子邮件分析程序可以包括在使用C语言分析程序API的WMQI中。如果电子邮件有正确语法,则消息代理就用输入的电子邮件字节流呼叫电子邮件分析程序,并接收错误消息或者电子邮件消息树的索引。消息代理将错误消息传输到引发错误消息的源应用。如果没有错误,则消息代理使用分析程序给出的两个树索引来处理消息内容(280),如参考图2所述。
权利要求
1.一种用针对电子邮件之类类型的消息的分析程序来增强在数据处理系统中运行的消息代理的方法,所述方法包括以下步骤
-通过给上下文无关编程语言生成器提供与所述电子邮件之类类型的消息的语法对应的LL(k)文法的规则,用所述上下文无关编程语言生成器生成编译程序的源代码;
-用所述编译程序源代码产生可执行代码;
-在消息代理中安装并生成作为针对所述电子邮件之类类型的消息的新分析程序的可执行代码;
-当消息代理接收到消息并识别该消息为所述电子邮件之类类型的时候,用该可执行代码将所述消息作为上下文无关编程语言来处理;
-在前面步骤执行的输出中读取在存储器中建立的消息的逻辑表达,并在消息代理的接下来的处理步骤中使用该逻辑表达。
2.如权利要求1所述的方法,其特征在于,读取消息的逻辑表达的步骤还包括修改该逻辑表达以使其适应于消息代理的接下来的处理步骤所接受的格式的步骤。
3.如权利要求1或2中的任何一项所述的方法,其特征在于,因为LL(k)文法规则在所述的消息中不匹配,所以不通过在存储器中建立消息的逻辑表达来完成用可执行代码处理所述消息的步骤,而是通过将消息的语法中的例外错误发回消息代理来完成用可执行代码处理所述消息的步骤。
4.如权利要求1至3中的任何一项所述的方法,其特征在于,在生成步骤中,通过编程语言将LL(k)文法规则提供给编译程序生成器。
5.如权利要求1至3中的任何一项所述的方法,其特征在于,在生成步骤中,通过图形用户界面将LL(k)文法规则提供给编译程序生成器。
6.如权利要求1至5中的任何一项所述的方法,其特征在于,通过用可执行代码对所述消息的处理而在存储器中建立的消息的逻辑表达是基于树的表达。
7.一种计算系统,包括适配为执行根据权利要求1至6中的任何一项的方法的装置。
全文摘要
公开了一种用针对电子邮件之类类型的消息的分析程序来增强在数据处理系统中运行的消息代理的方法。该方法包括起始步骤,通过给上下文无关编程语言生成器提供与所述电子邮件之类类型的消息的语法对应的LL(k)文法的规则,用所述生成器生成编译程序的源代码;然后,用所述编译程序源代码产生可执行代码;并在消息代理中安装并生成作为针对所述电子邮件之类类型的消息的新分析程序的可执行代码;当消息代理接收到消息并识别该消息为所述电子邮件之类类型的时候,用该可执行代码将所述消息作为上下文无关编程语言来分析;通常,由翻译程序和链接编辑程序使用由编译程序在存储器中建立的消息的逻辑表达,以从消息生成可执行代码。在本发明的情况下,由消息代理的接下来的处理步骤来使用作为执行前述步骤的输出的消息的逻辑表达。
文档编号G06F9/44GK1735863SQ20038010842
公开日2006年2月15日 申请日期2003年11月14日 优先权日2003年1月7日
发明者马克·法曼特 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1