CN103345464B - 模块化森林自动机 - Google Patents
模块化森林自动机 Download PDFInfo
- Publication number
- CN103345464B CN103345464B CN201310269593.7A CN201310269593A CN103345464B CN 103345464 B CN103345464 B CN 103345464B CN 201310269593 A CN201310269593 A CN 201310269593A CN 103345464 B CN103345464 B CN 103345464B
- Authority
- CN
- China
- Prior art keywords
- mfa
- conversion
- state
- pattern
- tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4498—Finite state machines
Abstract
本发明涉及一种模块化森林自动机。模块化森林自动机(MFA)提供部分有序的正则树模式的统一描述。MFA还提供用于这些模式的确定化、子类型化、交集、以及补集的简单方法。MFA支持高性能的模式分析和匹配。模块化森林转换器,结合模块化森林自动机,允许编译器对任何状态转换施加语义动作,而同时又支持带标记的有向图的高效转换。
Description
本发明专利申请是国际申请号为PCT/US2009/054457,国际申请日为2009年8月20日,进入中国国家阶段的申请号为200980139411.6,名称为“模块化森林自动机”的发明专利申请的分案申请。
技术领域
本发明涉及一种模块化森林自动机。
背景技术
编程语言可以使用模式来区别值的类。例如,下面的两行伪代码定义计算一列整数的总和的函数。
Sum(nil)=0;
Sum(cons[head,tail])=head+Sum(tail);
此示例中的模式有两个目的。首先,它们区别输入情况。其次,它们允许通过使用模式变量和类型推断来进行简洁值解构。
模式与结构类型紧密相关。此处所描述的正则树模式是也可以包括变量绑定的正则树类型。与语义动作相耦合的树模式叫做树变换规则。
诸如XML模式语言之类的结构类型系统定义各类别的值。编程语言常常使用结构类型系统来静态地检查程序安全属性。SQL数据库还使用主要聚焦于结构的类型系统。通过联接所产生的表例如包含可以描述为具有匿名结构类型的元组。数据库管理系统要求各种程序可以解释存储在该系统中的数据。结构类型系统帮助数据库管理系统满足这一要求。
分布式系统也产生对于结构类型的要求。由于等待时间,在分布式程序组件之间交换的消息常常比在对象之间交换的方法参数更大、更加复杂。
存储在数据库中的并且在分布式组件之间交换的值在复杂性方面介于由程序表达式操纵的简单值和图灵机的复杂性之间。如此处所描述的,正则树模式被用来定义结构复杂性的这些中间级别。
表达和分析有序的和无序的正则树模式是有用的和有益的能力。其中分析将被有利地改进的域的示例包括模型校验和使用部分有序的树模式的授权逻辑。诸如XML模式之类的某些现有语言可以使用部分有序的正则树,但是当前缺乏用于进行子类型化(subtyping)的手段。此外,这样的语言可以施加语义约束,以便在当前已知方法下支持有效的实现。
对贪婪正则表达式匹配和编程语言XStatic的某些工作已经研究了如何将正则有序的树类型合并到面向对象的语言中。类似于XDuce,XStatic对于序列使用统一表示。这样的工作将正则有序的树类型映射到对象,但是使用展平处理(flattening)来支持所包括的正则语言的自然语义。最后,trx在Scheme(模式)的上下文中研究正则有序的树类型。
对下推森林自动机(PFA)也完成了某些工作。然而,PFA却不提供子类型化算法,或用于寻址无序的嵌套(多重集)的机制。
发明内容
本发明的各实施例涉及模块化森林自动机(MFA)。此处所描述的模块化森林自动机可以被用来描述和分析正则树模式,并可以创建可以简明地表达带标记的有向图的转换的模块化森林转换器(transducer)(MFT)。图转换是逻辑、过程模型、以及编程语言的实现中的基本成份。模块化森林自动机的实现可以被用来支持高性能的、强类型的图转换。
模块化森林自动机是用于定义、重新组织、以及转换部分有序的、有限的、未分层级(unranked)的树的集合的机制。MFA支持对MFA分层结构的分析和合成。MFA提供对有序的和无序的树模式的统一处理。
此处所描述的实施例包括用于分析正则树模式的方法、系统、以及计算机程序产品。特定实施例允许接收可以被确定或重写为描述序列和集合两者的模块(机器)的数据。可以从根据接收到的数据确定的模块创建并集。所确定的模块和模块的并集可以包括带标记的接受状态。根据带标记的接受状态,可以为模块确定子类型关系。
此处所描述的其他实施例还包括用于表达正则树模式的转换的方法、系统、以及计算机程序产品。可以接收正则树模式,并可以接收特定实例数据。可以从接收到的正则树模式编译转换器。可以利用对应于所需转换的指令来扩充转换器变换。可以根据经扩充的转换器变换和实例数据,确定正则树模式的元素和实例数据的元素之间的对应关系。
提供本发明内容是为了以精简的形式介绍将在以下详细描述中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
本发明的附加特征和优点将在以下描述中叙述,且其一部分根据本描述将是显而易见的,或可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些和其他特征将通过以下描述和所附权利要求书变得更加显而易见,或可通过对下文中所述的本发明的实践来领会。
附图说明
为了描述可获得本发明的上述和其它优点和特征的方式,将通过参考附图中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图只描绘了本发明的各典型实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加特征和细节来描述和解释本发明,在附图中:
图1示出了本发明的原理的实施例可以在其中操作的计算环境;
图2示出了用于模式的嵌套内容的置换模块化森林自动机;
图3示出了特定模式Expr(表达式)的所确定化的转换;
图4示出了用于模式Pond(池塘)的嵌套内容的优化的模块化森林自动机;
图5示出了在子类型分析中确定的各子类型的图形表示;
图6示出了用于模式GTE的嵌套内容的非确定性的模块化森林自动机;
图7示出了用于模式GTE的嵌套内容的所确定化的模块化森林自动机;
图8示出了根据本发明的特定实施例的用于分析正则树模式的方法的流程图;
图9示出了根据本发明的特定实施例的用于表达正则树模式的转换的方法的流程图。
具体实施方式
此处所描述的实施例涉及用于分析正则树模式的方法、系统、以及计算机程序产品。此处所描述的附加实施例涉及用于表达正则树模式的一个或多个转换的方法、系统、以及计算机程序产品。本发明的实施例可以包括含有各种计算机硬件的专用或通用计算机,这将在以下更详细地讨论。
图1描述了其中可以实施此处所描述的实施例的示例计算环境100。计算环境100包括一个或多个计算机处理器110。计算环境100还包括计算机存储器120的一个或多个实例。计算机存储器120可以是已知是合适的任何计算机可读存储器,并包括(但不仅限于)RAM、SRAM、以及闪存。计算机存储器也可以是诸如硬盘、固态盘驱动器、CD ROM、DVD等等之类的持久存储130。计算机存储器120和存储130可以,如可以在任何特定实施例中合适的,是只读的,诸如ROM或CD或DVD,或者它可以是诸如RAM、闪存、以及常见的磁盘驱动器之类的可读和可写的。
计算环境100还包括输入和输出140。输入和输出140可以包括诸如存储在磁盘上的数据,可通过网络访问的数据、或其他数据之类的任何合适的格式或媒体。计算环境100还包括可以向/从其中传输数据的外部持久存储150。类似于存储130,外部持久存储150可以采取任何合适的形式,诸如磁盘、磁带、CD-R/W、或其他形式。
本发明的范围内的实施例还包括用于携带或其上储存有计算机可执行指令或数据结构的计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机访问的任何可用介质。作为示例而非限制,这样的计算机可读介质可包括存储介质,如RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于携带或存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。当信息通过网络或另一通信连接(硬连线、无线、或硬连线或无线的组合)传输或提供给计算机时,计算机将该连接完全视为计算机可读介质。这样的网络或通信连接此处被称为通信介质。因此,任何这样的连接被适当地称为计算机可读介质。上面介质——包括存储介质和通信介质两者——的组合也应该包括在计算机可读介质的范围内。
计算机可执行指令例如包括,使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。这样的计算机可执行指令可以存储在计算机存储器120中、持久存储130中、任何输入/输出介质或设备140上或外部存储150上。也可以通过任何合适的通信介质向合适的计算环境传输计算机可执行指令。
尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求的示例形式公开的。
此处所描述的实施例涉及用于分析正则树模式的方法、系统、以及计算机程序产品。此处所描述的附加实施例涉及用于表达正则树模式的转换的方法、系统、以及计算机程序产品。本发明的实施例可以包括含有各种计算机硬件的专用或通用计算机,这将在以下更详细地讨论。
例如,图8示出了用于分析正则树模式的方法。该方法包括接收810包括正则树模式的数据,该正则树模式包括序列和集合中的至少一个。当树模式包括序列时,确定820对应于该序列的机器。该所确定的机器有时被称为“模块”。序列,如其名称暗示的,是具有特定顺序的一组元素。
当树模式包括集合时,确定830对应于该集合的机器。与具有特定顺序的序列不同,集合可以是没有指定特定顺序的元素的集合。
创建840所确定的机器的并集。从所确定的机器(模块)的并集,确定850一组带标记的接受状态。最后,根据带标记的接受状态,确定860子类型关系。
如此处更全面地描述的,子类型关系可以是等效、子类型、超类型、不相交、以及相交中的一个。如果两个模块M1和M2具有相同的接受状态,则它们是等效的。如果M1包含M2的所有接受状态但是M2不包含M1的所有接受状态,则M1是M2的超类型,M2是M1的子类型。如果M1和M2没有共同的接受状态,则M1和M2不相交。如果M1和M2共享一些接受状态,但是M1和M2中的每一个都具有没有被另一个共享的接受状态,则它们相交。下面结合图5更详细地讨论了子类型关系。
各实施例还包括确定包括到带标记的嵌套的至少一个变换的根级机器(模块)。如此处更全面地描述的,带标记的嵌套可以具有Label[---]或Label{---}的形式。可以创建对应于带标记的嵌套的模块。可以在堆栈中放置对应于从带标记的嵌套的返回的继续状态。在将该继续状态放置到堆栈上之后,可以执行对应于该带标记的嵌套的动作。当达到该带标记的嵌套的接受状态时,从堆栈弹出该继续状态,并且恢复根级机器的处理。
在接收到的数据与定义编程语言中的结构类型的数据相对应时,可以使用此处所描述的实施例。可以通过此处所描述的技术来分析这样的数据,以确定各结构类型是否等效,或者具有如此处所讨论的其他子类型关系中的任何一种。
在接收到的数据与包括数据库的模式和/或模式定义的数据相对应时,可以使用此处所描述的实施例。可以通过此处所描述的技术来分析这样的数据,以确定各模式和各模式定义是否等效,或者具有其他子类型关系中的任何一种。
在接收到的数据对应于XML模式,可以使用此处所描述的实施例。可以通过此处所描述的技术来分析这样的数据,以确定各XML模式是否等效,或者具有其他子类型关系中的任何一种。
可以使用此处所描述的实施例,以确定对应于所确定的子类型关系的结构和逻辑关系并用于编程语言、数据库、对象等等中的数据结构的优化、效率、以及数据转换的目的。
此处所描述的实施例还包括用于表达正则树模式的转换的方法。图9示出了用于表达正则树模式的转换的方法900。该方法包括接收对应于正则树模式的第一数据910。该方法还包括接收对应于实际实例的第二数据920。
例如,包括正则树模式的数据可以包括XML模式,可以包括数据库模式,可以包括编程语言或对象定义的结构类型。对应于实际实例的数据可以包括数据库内的数据,可以包括串行数据输入流,或可以包括在面向对象的对象或在编程语言内所定义的结构类型内包含的数据。
方法900包括将正则树模式编译成转换器。在本说明书的以下章节更详细地描述了对树模式的编译。一旦被编译,则利用对应于所需转换的指令来扩充940转换器变换。在利用指令扩充了变换之后,可以根据经扩充的变换和对应于实际实例的数据,确定950实例的元素和正则树模式的元素之间的对应关系。
例如,可以存在诸如Root[A+,B*,C?](根[A+,B*,C?])之类的模式,以及[aaa,bbb,-]的实例数据(在一环境内给出的)。从该示例中,方法900可以确定特定绑定,以便A=′aaa′,B=′bbb′,C=′-′。此外,可以执行诸如例如动作Root[A,B,C]→Root[A,C]之类的动作。一旦确定了绑定,示例动作可以被视为“delete B(删除B)”动作。
方法900可以用于变量绑定环境中。这样的变量绑定可以确定编程语言、数据库模式、XML模式等等中的结构类型与同这些类型或模式内定义的变量相对应的实际值之间的对应关系。
方法900的指令还可以包括匹配各条件,并可以包括语义动作。方法900的实例数据可以包括XML模式实例,可以包括根据特定数据库模式的数据库内包含的数据的实例,或可以包括根据在编程语言内定义的结构类型来定义或存储的数据。
方法900还可以包括编译查询表达式和确定查询表达式的对应于正则树模式和实际实例数据的结果。例如,这样的查询可以是诸如SQL之类的数据库查询,并可以是诸如数据访问等等之类的授权查询。
应该注意,此处所描述的所有方法和技术可以在各实施例中实现,这些实施例可以包括(但不仅限于)在计算环境内执行的方法、包括用于执行此处所描述的方法和技术的计算机可执行代码的计算机程序产品、以及包括用于执行此处所描述的方法和技术的计算机处理器和计算机可执行代码的计算系统。
下面将是对此处所描述的实施例的办法和技术的更详细和全面的讨论。
正则树模式
列表1描述了可以用于正则树模式的句法。在列表1的语法中,项Action(动作)是引用某一语言来进行语义动作的参数。项Name(名称)、Variable(变量)、以及Label(标记)是各自提供一组被称为字母表的符号的参数。如此处所描述的,假定变量(Variable)、模式名称(Name)、以及标记(Label)符号来自不同的字母表。除这些符号之外,模式可以引用可包括非模式类型或文字值的基本符号。
列表1.正则树模式句法
正则树模式定义只允许嵌套算子的上下文内的递归模式引用(如下面所描述的)。对正则树语法的这样的限制被用来防止正则树语法导致上下文无关的串语法的全功率(full power)。
重复构造*|+|?表示对于它修改的树(Tree)而言所允许的出现的最小和最大数量。出现的最大数量可以是无限的。算子*、+、以及?被分别解释为[0..∞]、[1..∞]、以及[0..1]。换言之,A*被读作零个或更多个A(即,[0..∞]);B+被读作一个或更多个B(即,[1..∞]);而C?被读作零个或一个C(即,[0..1])。此构造支持指定未分层级的树节点的模式。未分层级的树节点可以具有任意数量的子节点。
任何通配符可匹配任何值。算子求解树模式的补集。∧算子表示一对树模式的交集。|算子表示一对树模式的并集。最后,ΛP.b算子表示带有体b和带有模式参数P的多形模式。
嵌套算子L[Forest?]定义带有标记L的有序的未分层级的树节点。这样的有序的项也被称为序列。嵌套算子L{Forest?}定义带有标记L的无序的未分层级的树节点。无序的项目也被称为集合(或多重集)。使用术语“多重集模式”来指形式L{c}的模式,因为c匹配树节点的零个或更多个多重集。使用术语“部分有序的树”来指可以指定有序的和无序的子树的树模式。
部分有序的树模式允许程序员简明地表达使用严格有序的或无序树模式表达起来很繁琐或不可能表达的想法。例如,下面将描述包括列表2中所定义的变换规则的过程模型校验应用程序。
列表2.过程交互规则
带有标记par(并行)的多重集模式对并行地执行的过程集合进行建模。标记为choice(选择)的每一个节点对将通过在一组备选方案之间作出选择来继续的过程进行建模。标记为seq(序列)的每一个节点指示过程的序列。最后,send[x]和receive[x]对应于发送和接收类型x的消息。
该规则对一对过程(绑定到模式中的变量sender(发送者)和receiver(接收者))之间的交互进行建模。sender过程发送类型x的消息,receiver过程接收此消息。在交互之后,并行过程的集合包含sender的继续(CS)、receiver的继续(CR)、以及不参与该交互的过程的集合(procs)。
在一组并行过程内,可以有多对可能进行交互的过程,并且因此当与交互模式相匹配时,可以有多个可能的结果。下面所描述的MFA机制可以被用来生成这些结果中的一个或多个。
多重集模式不光是提供简洁性。它们还允许各实现和特定实施例使用输入集合的固有地无序的表示。诸如搜索树或散列表之类的无序的表示的直接使用可使转换引擎避免为各输入集合构建单独的索引。
例如,评估下面所描述的授权逻辑实现,该实现通过对照断言的和一组规则的数据库来与访问请求进行匹配,以检查该请求是否符合授权策略。授权策略应用程序可以使用直接地对断言数据库的无序的表示进行工作的多重集模式。
如可以理解的,如果从正则树语法中移除多重集模式和多形性,则得出类似于用于XML树形变换的函数型编程语言的正则树类型系统。这样的系统可以用于生成用于确定嵌套的正则表达式的子类型关系的算法。这样的算法使用自上而下的方法来比较模式表达式。该算法详述和扩展了先前关于正则树表达式的理论工作。该项目指出它最初使用自下而上的树自动机确定化(determinization)来判断包括,但是发现这不是可缩放的方法。当应用其子集构造时,对于自下而上的树自动机确定化算法没有考虑左(left)上下文。这可能导致指数爆炸比在留意上下文的情况下更常见。下面示出了模块化森林自动机如何使用左上下文来避免这样的陷阱,同时保留了确定化和子类型化的直接方法的简洁性。
另一实施例利用多形性、函数类型、以及记录扩展了上面的系统。记录要求对标记的唯一性约束。除对于模式变量的相等性约束之外,下面所描述的MFA实现支持唯一性约束。
如可以理解的,周围环境(ambient)演算算子n[]具有与正则树模式算子Label{Forest?}的强对应关系。可以证明,周围环境演算并行合成算子可以被解释为在它们的根处联接一对树的树合成算子。可以建议,可以将周围环境逻辑用作描述和查询树结构的基础。周围环境逻辑是用于对过程进行推理的时空逻辑。与列表1的正则树语法不同,周围环境逻辑只考虑无序的嵌套。在周围环境逻辑中,判断子类型关系相当于判断蕴含(implication)。这对于逻辑的某些变体而言是易处理的。
XML模式语言
此处描述了可以被成功地导入并确定例如W3C XML模式语言的子类型关系的模块化森林自动机(MFA)实现。XSD复杂类型向结构式分配名称。XSD中的结构式被称为内容模型。内容模型包含元素声明(被称为属性清单的无序的嵌套模式)以及粒子合成器。有三个合成器:“所有(all)”、“选择(choice)”以及“序列(secquence)”。正则树语法合并和并置构造器分别对应于选择和序列合成器。
“所有”合成器对应于此处所描述的无序的嵌套算子。XSD对“所有”合成器的使用施加某些限制。例如,这可能要求“所有”合成器内的项目具有有限的多重性。
XML元素声明与正则树语法的有序树构造器Label[Forest?]同构,算子名称Label担任元素限定名(qname)的角色。然而,XML模式语言要求,对于两个内容粒子a和b的任何并集,解析器必须能够执行单一超前唯一粒子属性:只读一个令牌,解析器必须能够标识实例是否与该选择的分支a或b相对应。
模块化森林自动机
上文描述了部分有序的正则树模式。
模块化森林自动机(MFA)提供了提供对有序和无序的正则树模式(序列和集合)的统一处理的机制。这样的有序和无序的正则树模式有时被称为序列和集合。每一MFA都实现支持对MFA分层结构的分析和合成的合同。该合同允许MFA在确定化过程中利用左上下文,如此处将讨论的。使用MFA中的左上下文避免了可以在用于自下而上的树自动机确定化的某些先前方法中发现的可能的状态爆炸。
模块化森林自动机(MFA)是明显下推自动机(VPA)。明显下推自动机是如本领域技术人员所知道的一种下推自动机。对于MFA,下推自动机被定义为元组:
M=(K,Σ,Γ,Δ,s,F)其中
K是状态的有限集
Σ是字母表(输入符号)
Γ是字母表(堆栈符号)
s∈K是初始状态
是最终状态集,以及
变换关系Δ是(K×Σ*×Γ*)×(K×Γ*)的有限子集
变换关系将元组(当前状态、输入符号,要弹出的堆栈符号)映射到对(新状态,要推送的堆栈符号)。
为支持分析,MFA支持明显下推语言(VPL)的堆栈使用限制。此类语言是使用将它们的变换关系限制为符合列表3中的三个下推变换类别中的一个的下推自动机来定义的:
列表3.MFA变换类别
这些类别将Σ分为对应于分别可以导致调用(Call)、返回(Return)、以及本地(Local)变换的符号的三个不相交集合:Σc、Σr、Σl。本地变换与正则有限自动机中的变换相同。来自MFA M0中的状态q0的调用变换读取符号a,将callSite(调用站点)保存在堆栈上,并将控制转移到状态callTarget(调用目标)。返回变换从堆栈弹出callSite,并使continuation(继续)成为当前状态。
除下推自动机的合并、重命名、Kleene星、以及并置闭包属性之外,上文所描述的堆栈纪律(discipline)允许VPL在交集和补集下仍然保持闭合。与一般非确定性的上下文无关语言不同,非确定性的VPL的类相当于确定性的VPL的类。
每一个MFA M都具有调用目标状态的集合T。M的起始状态s处于T中,如可从s通过以调用变换结束的路径达到的任何状态。M可以被视为叫做模块的状态的各不相交集合的分层结构。对于每一个状态t∈T,M具有一个模块。给定调用目标状态t,对应的模块Module(T)是只使用本地变换就可从t达到的状态的集合。
要求模块只包含一个调用目标状态t。调用目标状态t被称为模块的入口点。相应地,MFA不能包含其目标状态可通过本地变换从另一调用目标状态到达的调用变换。包含MFA的起始状态的模块叫做MFA的顶层模块。为了维护堆栈纪律,MFA不允许模块间的ε变换。
有限的附加簿记(bookkeeping)和MFA一起使用,以将VPA的调用/返回策略应用于无序的嵌套模式,并获取可以应用于有序的和无序的嵌套模式的单个子类型化方法。
每一个MFA状态都标记有指示该状态接受零个或更多个模式等效类的位矢量。此标记叫做标签(tag)。每一个MFA都包括映射Tag:K→B,其中B是k位的字符串。对于给定模块M,k是恒定的,k叫做模块M的标签长度。对于F中的每一个最终状态f,Tag(f)必须包含至少一个非零位。
标签的用途是引导作出调用的MFA在从调用返回时如何继续。在MFA中,返回变换没有固定目标状态。相反,来自MFA状态s的返回变换从堆栈弹出作出调用的状态,推送到堆栈Tag(s)上,并将当前状态改变为该作出调用的状态。然后,该作出调用的状态执行将标记从堆栈弹出并将控制转移到继续状态的继续变换。
将继续变换添加到MFA机制不会改变MFA的基本属性,因为可以消除带有继续变换的MFA的继续变换。按如下方式消除具有继续变换的MFA的继续变换。首先,对于带有调用目标状态t的每一个调用站点c,作出Module(t)中的各状态的副本。此副本被称为目标模块。然后,对于目标模块中的每一个返回变换(r;α∈Σr,c)→(c,tag),在作出调用的模块中找到对应的继续变换(c,ε,tag)→(continuation;ε),并移除这两个变换。最后,将返回变换(r;α∈Σr;c)→(continuation;ε)添加到目标模块中。因为如上文所描述的,移除继续变换是可能的,所以可以假设MFA可以具有继续变换。
也可以假设MFA可以访问叫做森林的输入堆栈的堆栈。MFA的执行从MFA的起始状态开始,其中输入堆栈包含原始输入森林。MFA包括当前树的概念。当前树是输入堆栈的森林中的顶层的某棵树。这些概念可以被用来映射到MFA的特定实现。一个调用将当前树的子树推送到输入堆栈上。一个返回将子树弹离堆栈。
如果只考虑模块M的本地变换,则M是识别森林的内容的正则串自动机。可以理解,这可以被用来定义下推森林自动机(PFA)的类。下推森林自动机具有两组状态:森林状态QF和树状态QT。下推森林自动机具有连接森林状态的不相交集合的Entry(入口)和Exit(出口)变换。下推森林自动机还具有将来自出口变换的信息包括到森林状态并将控制从树状态转移到森林状态的变换关系Comb(组合)。
如果从MFA中移除标签,则PFA与MFA同构。可以按如下方式将给定PFA P转换为等效MFA MP:对于P的每一个森林状态,创建MP中的状态。对于P中的每一个树状态,创建MP中的状态。将P的入口、出口、组合、和本地变换直接地复制到MP。这些变换分别对应于调用、返回、继续、以及本地变换。通过将每一个调用状态c拆分为森林状态和树状态t并使c的继续变换改编为其初始状态是t的组合变换,可以将无标记的MFA转换为等效PFA。
预处理器Prep(s),可以与任何MFA状态s相关联。Prep(s)必须被设置为有效MFA或者被设置为⊥。在给定模块内,所有状态都必须共享相同的预处理器值。其状态具有⊥之外的预处理器的模块被称为预处理模块。给定输入森林i,预处理模块将在处理i的每一个元素之前在该元素上调用其预处理器。预处理器被用来区分输入的各等效类。预处理器不能被递归地调用。具体而言,预处理模块prep内没有状态可以启动包含带有目标状态t的变换以便Prep(t)=prep的路径。预处理器可以被用来构造可以匹配多重集模式的MFA。
添加预处理模块不会改变MFA的基本属性。预处理模块可以被视为是通过将其输入i中的每一个转换为Ψ[i]来操作的,其中Ψ是预留的标记。然后,可以将预处理步骤编码为对标记为Ψ的嵌套的调用变换。
同样,可以向任何本地MFA变换tr添加语义动作Action(tr)。以此方式扩充的变换叫做动作变换。带有一个或多个动作变换的MFA被称为模块化森林转换器(MFT)。在MFT确定化过程中可以保留语义动作的次序。
将树模式转换为MFA
可以将部分有序的正则树模式转换成MFA。因为交集和补集方法包括确定化步骤,因此首先提供用于非确定性的MFA(NMFA)的确定化的方法的细节。
用于从树模式构建NMFA的构造过程不同于其他已知的构造过程。首先,树模式包括嵌套算子。其次,树模式可以包含动作和变量绑定。一个特定实现中的模式编译器可以将变量绑定转换成动作。相应地,不专门地处理变量绑定。
MFA的输入可以是树值的形式良好的森林。形式良好的输入森林以森林结束符号“]”结束。转换过程在]上向每一个所生成的MFA状态s添加一个返回变换。
使用已知传统方法(通过对标签和预处理器进行调整来扩充了该方法)计算两个NMFA的并集,M2=M0∪M1。在该构造中,假设M0具有长度k0的标签,而M1具有长度k1的标签。M2将具有长度k0+k1的标签。当M2的状态s具有M0的最终状态时,k1个零的串被附加到其标签中。否则,当s是M1的最终状态时,其标签被左移k0个位置,以零填充它。
为支持预处理模块的组合,按如下方式修改合并构造:当计算M2=M0∪M1时,当M0的顶层模块具有预处理器prep0≠⊥并且顶层模块M1具有预处理器prep1≠⊥时,则将预处理器prep0∪prep1分配给M2的顶层模块中的每一个状态。
为将预处理模块与正则模块组合,为正则模块合成预处理器。假设prep0≠⊥且prep1=⊥。通过首先将prep1设置为识别M1的本地变换的变换符号的MFA的集合的并集,来合成M1的预处理器。接下来,对于M1的变换关系中的每一个调用变换(c,L,ε)→(callTarget,c),然后设置prep1=prep1∪N,其中N是识别带有其起始状态是callTarget(调用目标)的模块所识别的子树的标记为L的树的MFA。
嵌套
无论嵌套算子是有序的还是无序的,都可以对它们进行转换。给定带有标记L和内容c的嵌套算子,首先为c创建被称为Mc的带有起始状态sc的NMFA。然后,利用起始状态s、最终状态f、以及变换(s,L,ε)→(sc,s)(调用Mc)以及(s,ε,tagc)→(f,ε)(从调用继续),创建被称为Mnest的NMFA。最后,将Mc的状态包括到Mnest中,从而将Mc标签tagc分配给每一个最终状态fc,并将fc改变为带有返回变换(fc,],s)→(s;tagc)的非最终状态。在此构造中,Mc的状态变为Mnest的模块。
可以使用并置算子来转换有序嵌套的内容。给定一对NMFA M0和M1,该方法通过为M2创建新起始状态s来构建M2=M0,M1,通过创建从M0的每一个最终状态到M1的起始状态的ε变换并最后通过采用M1的最终状态作为M2的最终状态来创建从s到M0的起始状态的ε变换。
多重集嵌套内容
可以使用如下策略来生成识别无序的嵌套的内容的MFA。
一般而言,多重集模式可以被视为具有形式
此记法指定,为使多重集嵌套算子的内容匹配输入集合,每一个模式元素pi都必须匹配至少li个输入元素,并匹配至多hi个输入元素。
首先,转换多重集模式以消除任意出现约束。给定如上指定的多重集模式P,模式编译器可以按如下方式将P转换为等效单元多重集模式P′。
列表4.转换多重集模式
模式编译器接下来构建被称为元素MFA的与模式元素的并集∪ipi相匹配的预处理MFA。再其次,模式编译器构建置换MFA。置换MFA将元素MFA作为对其输入的预处理器来进行调用。在每一次调用中,元素MFA返回指示pi中的哪一个匹配当前输入的标签。当置换MFA遇到匹配所需模式或可任选模式的输入时,置换MFA改变状态。状态变化对所需模式或可任选的模式进行计数。当置换MFA遇到无限模式时,它循环回到其当前状态。
可以认识到,置换MFA是计数自动机的一种形式。置换MFA因使用预处理器步骤而不同于其他计数自动机。图2示出了置换MFA如何对它们的输入进行计数。图2中所示出的MFA200匹配如下模式的嵌套内容:
Pond=Pond{water,frog+,canoe*,bridge?}
(池塘=池塘{水,蛙+,独木舟*,桥?})
重复、引用、和类型参数
为转换列表1的重复构造,模式编译器使用已知的技术。此结构可以被扩充,以实现对匹配重复模式的输入项进行累积的变量绑定。
为转换符号引用,模式编译器必须区分若干符号类。基类型或文字符号sym被转换为单个本地变换sym。对类型参数param的引用被转换成对param的形式变换。形式变换是不可执行的。编译器可以生成包含形式变换的参数化模块,但要创建可执行模块,它必须通过向模块的形式变换提供实际模式来实例化参数化模块。在实例化过程中,编译器用实际模式的转换来代替每一个对应的形式变换。
模式编译器通过将P的转换替换到引用P的上下文中来将转换对模式P的引用。已知,正则树语法不允许下一算子的上下文之外的递归引用。模式编译器可以将此属性与嵌套被编译为调用的不变量相组合,以确保所有内联展开将达到基础情况,如不包含模式引用的嵌套算子或模式。
例如,图3示出了递归模式
Expr=c|plus[Expr,Expr]
的转换。图3以其标签来标记每一个节点。图3包含两个模块,表示为300和310,被称为Expr300和PlusNest(加嵌套)310。Expr300具有标签长度2,因为它匹配一个并集。PlusNest310具有标记长度1。包括MFA的起始状态的模块Expr300通过匹配c或者通过调用PlusNest310并随后在从PlusNest返回标签1时继续到标签为10的最终状态,来匹配Expr模式。PlusNest310通过串联模式Expr的两个内联的实例,来匹配模式段[Expr,Expr]。Expr的这些内联展开产生对PlusNest的递归调用。未示出造成非最终状态的返回变换或路径。
确定化
列表6.NMFA的确定化
列表6提供了用于确定化MFA的构造。为简化确定化,表示调用变换
(c,Label,ε)→(callTarget,c)
的组合以及其相关联的继续变换
(c,ε,tag)→(cont,ε)
作为被称为嵌套变换的模块内变换:
(c,(Label,callTarget,tag),ε)→(cont,ε)。
此表示允许该确定化方法统一地处理变换,因为本地和嵌套变换都是模块内变换。为了用在列表6的确定化方法中,引入了函数Labels(s),其产生用在从s发出的嵌套变换中的标记集。
对于给定顶层模块M,该确定化方法将如下两个步骤添加到用于NFA的确定化的类方法中。首先,步骤2.c使用CombineNests(组合嵌套)方法来组合来自状态t的嵌套变换的调用目标。其次,步骤4更新所确定化的MFA的最终状态集F′中的每一个最终状态的标签。对于给定最终状态f′,步骤4将f′的标签设置为对于作为f′的成员的NMFA状态的标签的逐位OR。
该确定化方法使用ε-closure算子E(s)作为子例程。给定状态s,E(s)是可从s通过只包含ε变换的路径达到的状态的集合。为清楚起见,列表6省略了与处理通配符变换相关的细节。为实现从状态t发出的通配符变换,将通配符变换的移动集(move set)与从t发出的每一个非通配符变换的移动集组合。
子类型化
在确定化过程中进行了额外簿记以跟踪标签之后,可以在比较一对MFAM0和M1时获得额外簿记的优点。在列表7中给出了用于比较MFA的过程。
0.给定一对MFA M0和M1,确定M0和M1所识别的值集合之间的包括关系。
列表7.MFA比较算法。
关键思想是,该确定化过程通过最终状态上的标签来跟踪M0和M1是否可被同时接受,以及M0或M1或两者是否可以被彼此独立地接受。可以使用表1xxxx来将M0和M1的所确定化的并集中的最终状态上存在的标签值的集合C映射到比较结果。图5是表1中列出的可能的子类型关系的图解说明。
表1.使用标签来比较MFA
图5描绘了等效500关系;子类型510关系;超类型520关系;不相交530关系;以及相交540关系中的每一个。
补集、交集、以及差集
可以上文所描述的标签簿记收获额外的好处。标签可以被用来实现MFA的补集、交集、以及差集的过程。为构造交集M0∧M1,交集构造首先计算所确定化的并集I=Determinize(M0∪M1),然后,从I中排除从其无法到达带有标签11的最终状态的每一个状态t。
当此计算产生了其中没有状态的MFA I时,单个非接受起始状态被添加到I,以使得I是不接受输入的MFA。
可以使用类似的构造计算M0-M1。为此,用标签01代替在上面的交集构造中的标签11。为计算M1-M0,标签10被用于该构造中。
为构建M的补集补集构造首先计算M′=Determinize(M)。然后,对于M′中的每一个最终状态f,该构造将f的标签设置为0,并将f标记为非最终的。对于原始M′的每一个非最终状态nf,该构造将nf的标签设置为1,并将nf标记为最终的。标签经过调整的M′接受
此构造的一个重要方面是由被调用的模块所返回的零标签上的变换可以导向最终状态。通过对零标签使用隐式变换来节省空间的MFA实现必须具有在补集之后将这些变换转换成显式变换的方式。
语义动作的排序
本发明的特定实施例的一个优点是允许模式编译器对任何NMFA变换施加语义动作。为支持此灵活性,需要在确定化过程中保留语义动作的顺序的方法。保留下列属性是有益的:对于NMFA M的所有路径[tr1,tr2,...,trn],当且仅当i<j时,Action(tri)在Action(trj)之前执行。为保留此属性,将M的路径与Determinize(M)的变换相关联。
为实现这一点,确定性的MFA
M′=Determinize(M)
的基本路径被定义为本地或嵌套变换的序列[tr1,tr2,...,trn],以便对于每一个变换tri=(qi,sym,ε)→(qi+1,ε),任一qi+1都只具有一个传入的变换,i=0,或i+1=n。对于此定义,M′的起始状态被视为具有隐式的传入变换。
M′的基本路径能以具有多个传入变换的状态开始和结束。然而,沿着基本路径的任何中间状态都必须具有正好一个传入变换。此属性的后果是,基本路径的最后一个变换trn唯一地标识该路径。
此结果是通过将从对应于bp的NMFA路径的集合np中按顺序收集的语义动作的序列的集合A分配给每一个基本路径bp的最后一个变换trn来加以利用的。当MFT执行bp的变换trn时,它还执行A的每一个成员。
对于M′的给定基本路径bp,使用如下方法找到来自M的对应的路径集合np。首先,对于bp中的每一个变换tri,找到对应于tri的NMFA变换。当且仅当r1∈qi且r2∈qi+1时,NMFA变换
ntr=(ri,sym,ε)→(r2,ε)
对应于tri。
对于对应于tri的每一个NMFA变换,可以构建NMFA路径npathi=patha,ntr,pathb,其中patha(路径a)具有如下属性。首先,patha完全由ε变换(其开始和结束状态处于qi中)构成。其次,patha的第一状态在qi中没有前辈。最后,patha的最后一个状态是变换ntr的开始状态。类似地,pathb(路径b)完全由ε变换(其开始和结束状态处于qi+1中)构成,pathb从ntr的结束状态开始。
进而,通过将对应于bp中的某个变换的所有子路径串联在一起,来构建对应于基本路径bp的NMFA路径。如果bp的每一个变换都只有一个对应的NMFA变换,则这些子路径将构成单条NMFA路径。然而,如果bp的一些变换具有一个以上的对应的NMFA变换,则通过联接NMFA子路径(其中npatha的最后一个状态是npathb的第一状态)对(npatha,npathb),来组合子路径。给定NMFA子路径可以参与一个以上的这样的对;因此,对应于给定基本路径的多个NMFA路径可以共享一个共同的前缀。
图6和7分别示出了模式
GTE=GTE[any,0]|GTE[0,S[any]]
的嵌套内容的所构造的NMFA600与其所确定化的等价物700之间的对应关系。这些附图中的MFA包括表2中所描述的移位和接受动作。图6使用符号e来表示ε变换。图7示出了如何从NMFA路径中的每一个收集并将它们分配给结束所确定化的MFA的基本路径的变换的动作序列700。这些变换也标记有分配给它们的NMFA路径。
图7还给出了通配符any(任何)的转换的视图。GTE的所确定化的MFA使用标记为otherwise(其他)的变换来转换该通配符。此转换被称为默认变换,因为如果没有其他变换适用则将执行该转换。从状态s开始的通配符变换的目标状态t被添加到始自s的默认变换的移动集中。另外,t被添加到始自s的任何非通配符变换的移动集中。
最后,图7示出了简化语义动作的排序的用于表示返回变换的技术。返回变换可以被视为end-of-forest(])(森林结束)上的本地变换。然后,这些本地变换可以变为语义动作的占位符。此处所描述的模式编译器利用此技术。
对置换MFA的优化
为解决不同的输入顺序,置换MFA可以具有大量变换。为减少置换MFA中的变换的数量,模式编译器可以向对应的元素MFA的标签分配被称为标签顺序的部分顺序。然后,编译器可以从置换MFA中移除乱序的路径,从而预测运行时系统将使用两个策略中的一个来匹配输入森林。第一,运行时系统可以使用对输入集合的索引来提取将匹配所需的模式元素的项。第二,运行时系统可以使用元素MFA来预处理输入森林,并随后根据元素MFA的标签顺序来对结果进行排序。
第一策略适合于模式元素中的一个是通配符any*时。在此情况下,运行时系统可以使用索引按照标签顺序“筛选”所要求的模式元素,并随后向通配符模式元素分配剩余的输入森林项。
第二策略是以减少的存储器使用来换取由于排序而可能延长的匹配时间。当用于转换带标记的有向图时,置换MFA通常可以将变量绑定到输入森林的大块。此外,多重集模式的用户可能期望从匹配操作中出现变量绑定的多个集合。在这些情况下,运行时系统必须保留输入森林的一个副本,并且因此支持排序。
给定模式元素的集合P,可以按如下方式导出对应的预处理器MFA的标签的全序(total order)。首先,对模式元素进行排序。在P中给定了一对模式元素(pi,pj),如果pi是必需的而pj不是,或者如果pi是可任选的而pj是无限的,或者如果pi比pj具有更高优先级,则定义pi<pj。如果没有分配优先级,则按字典顺序分配优先级,以使得在模式元素之间存在全序。
在确定化之后,预处理器MFA将具有指示接受一组一个或多个模式元素的标签。给定一对这样的标记(ti,tj),如果min(ti)<min(tj),则ti<tj。如果ti和tj具有相同最小元素,如果|ti|>|tj|,则ti<tj。此最后一个规则确保置换MFA首先考虑可以匹配若干模式元素的输入。图4示出了对于Pond模式
Pond=Pond{water,frog+,canoe*,bridge?}
的MFA400的标签顺序优化的效果。
MFA实现
在MFA和MFT的一个特定实现中,存在实现被称为转换器的这些自动机的实例的运行时系统。在另一实施例中,模式编译器将正则树模式转换成转换器,从而利用实现变量绑定、匹配条件、和语义动作的指令来扩充转换器变换。可以将特定实施例应用于至少四个应用:基于声明的授权服务,协议模型校验应用,用于导入、子类型化、以及匹配XML模式实例的系统,以及用于查询表达式的编译器。
对特定实现的实际评估造成转换器运行时以每秒钟2.4和8.9百万节点之间的速率来匹配带标记的有向图。此外,转换器运行时能够以每秒钟0.6和2.1百万节点之间的速率转换带标记的有向图。
运行时
对于每一个变换规则
规则=模式,动作
模式编译器创建帧模板。帧模板指定绑定在规则中的每一个变量的槽,加上用以保持应用动作的结果的附加槽。在运行时,转换器机制可向每一个规则r分配帧集合中的堆栈。规则r的帧集合包含零个或更多个帧,这些帧的布局由f的帧模板来描述。帧集合可以包含一个以上的帧,因为多重集模式可以按一种以上的方式匹配其输入,从而产生变量绑定的多个集合。帧集合可以被层叠以处理递归。
转换器指令
表2.转换器指令
转换器状态变换可以是指作为转换器指令的序列的动作块。转换器指令集包括表2中给出的指令。在表2中,标记为r的操作数引用语法规则。标记为r.x的操作数引用r的规则集合堆栈顶部的规则帧内的变量x的槽。标记为i的操作数引用指令。标记为t的操作数引用指示所接受的规则的集合的标签。标记为b的操作数引用一组动作块。
除显式操作数之外,指令也可以包含移位类型和经移位的规则。移位类型指示应该如何将转换引擎移动到森林中的下一项。如果移位类型是SHIFTNEST(移位嵌套),则转换引擎将在移到下一树节点之前重写当前树节点的后继节点。经移位的规则指示哪些规则要重写(这些规则处于嵌套模式已经匹配的若干规则之中)。
表2中的头四个指令被称为“帧更新指令”,因为对于某个规则r,对于r的集合堆栈上的每一个帧,它们更新变量r.x的槽。
Exec(执行)指令从r的集合堆栈中弹出顶部集合。对于弹出的集合中的每一个帧,Exec指令执行与r相关联的重写动作。对于每一个结果,Exec指令执行帧更新指令i,该帧更新指令i更新某个变量target.x(目标)。在递归情况下,目标可以是与r相同的规则。
Push(推送)指令将新规则集合推送到r的规则集合堆栈上。Par(并行)指令并行地执行一组动作块。对于该组中的每一个动作块,par指令从当前输入节点开始。该组中的每一个动作块必须使输入指针前进相同量。转换引擎不总是执行并行块的每一个成员。每一个并行块成员都可以用规则标识符进行标记。转换器将只执行用该转换器当前正在重写的规则的标识符进行了标记的并行块成员。
Shift(移位)指令使转换器前进到下一输入项。当没有与当前模式位置相关联的变量绑定时,模式编译器生成此指令。当模式位置确实具有变量绑定时,编译器提供移位信息来作为帧更新指令的一部分。
应用
一个特定授权策略引擎(被称为Thor)使用支持数据访问请求的基于声明的授权的授权逻辑。Thor包括用逻辑表示的大型声明数据库,诸如声明:a/dns=?x->b/dns=?x,其表示如果a声明属性dns具有绑定到变量x的值,则b进行相同的声明。声明a/dns="LocalHost"表示a声明向属性dns分配了值"LocalHost"(本地主机)。所有这样的声明在声明数据库中都被表示为通过主体(principal)和属性来索引的无序表。
授权策略引擎使用结构合同来将其声明数据库表示为无序的森林。为处理声明,它首先将声明转换为形式为prove[context{database},goal](证明[上下文{数据库},目标])的树。然后,该引擎使用一组规则来重复地转换该声明,直到它到达一个固定点。如果引擎可以证明该声明,则可以将该声明转换成标识该证明中的各步骤的证明树。
模式编译器可以将引擎的规则转换为转换器。搜索过程调用此转换器来执行每一转换步骤。利用对于委托算子的分发规则来扩充了的规则对于构造逻辑实现矢列式(sequent)运算。此逻辑中的典型的规则如下:
该引擎使用先前所描述的索引和标签顺序排序来实现相当大的吞吐量(在一个实例中以每秒钟23,000个声明来计量)。这具有防止声明处理成为总体授权服务的限速步骤的可能优点。
另一应用是过程模型检验器。可以将这样的模型检验器应用于从简单的交替位协议到TCP(传输控制协议)的模型的各种协议。模型检验器可以校验这样的协议的死锁-自由。模型检验器使用产生许多结果的诸如列表2的交互模式之类的模式。在这样的情况下,转换器可以缓冲对于每一个重写值得变量绑定的多个帧。
另一实施例适用于导入、确认、以及子类型化XML模式的应用。此实施例将XML模式导入到部分有序的树模式中。这样的应用可以在批模式和交互模式下操作。在交互模式下,该应用可以被用作用于将模式合并到计算机应用程序中的创作系统的一部分。
又一个实施例被应用于查询表达式的编译器组件中。可以将这样的组件用作诸如SQL等等之类的数据库查询应用程序的前端。该组件使用一组规则来将查询表达式Q转换为理解代数,并随后通过使用将该代数表示转换为固定点的第二组规则来优化Q。
对此处所描述的实施例的优化也是可能的。例如,模式编译器可以识别绑定的变量之间的依赖关系,并使用这些依赖关系来驱动匹配。编译器可以对模式使用此优化以用于以上给出的蕴含。通过首先从输入森林中提取匹配模式元素
typedTerm[proof2:any,implies[a:any,b:any]],
的输入项,所生成的转换器可以约束模式元素
typedTerm[proof1:andy,a:any]
的可能的匹配。
模块化森林自动机提供部分有序的正则树模式的统一描述。MFA还提供用于这些模式的确定化、子类型化、交集、以及补集的简单算法。在实践中,模块化森林自动机支持高性能的模式分析和匹配。模块化森林转换器允许编译器对任何状态转换施加语义动作,而同时又支持带标记的有向图的高效转换。
本发明可具体化为其它具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变应被权利要求书的范围所涵盖。
Claims (5)
1.一种计算环境(100)中的用于表达正则树模式(200)的转换的方法,所述计算机环境包括至少一个计算机处理器(110)和计算机可读存储器(120),所述方法包括:
接收对应于正则树模式的第一数据(910);
接收对应于实际实例的第二数据(920);
将所述正则树模式编译成转换器(930);
利用对应于所需转换的指令来扩充转换器变换(940);以及
根据所述经扩充的转换器变换和所述第二数据,确定所述第二数据的元素和所述正则树模式的元素之间的对应关系(950)。
2.如权利要求1所述的方法,其特征在于,所述指令包括变量绑定。
3.如权利要求1所述的方法,其特征在于,所述指令包括匹配条件。
4.如权利要求1所述的方法,其特征在于,所述指令包括语义动作。
5.如权利要求1所述的方法,其特征在于,所述第二数据包括XML模式实例。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/242,322 | 2008-09-30 | ||
US12/242,322 US8176085B2 (en) | 2008-09-30 | 2008-09-30 | Modular forest automata |
CN200980139411.6A CN102165434B (zh) | 2008-09-30 | 2009-08-20 | 模块化森林自动机 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980139411.6A Division CN102165434B (zh) | 2008-09-30 | 2009-08-20 | 模块化森林自动机 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103345464A CN103345464A (zh) | 2013-10-09 |
CN103345464B true CN103345464B (zh) | 2016-10-05 |
Family
ID=42074085
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310269593.7A Active CN103345464B (zh) | 2008-09-30 | 2009-08-20 | 模块化森林自动机 |
CN200980139411.6A Active CN102165434B (zh) | 2008-09-30 | 2009-08-20 | 模块化森林自动机 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980139411.6A Active CN102165434B (zh) | 2008-09-30 | 2009-08-20 | 模块化森林自动机 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8176085B2 (zh) |
EP (1) | EP2332068A4 (zh) |
JP (1) | JP5530449B2 (zh) |
CN (2) | CN103345464B (zh) |
WO (1) | WO2010039348A2 (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080271000A1 (en) * | 2007-04-25 | 2008-10-30 | Microsoft Corporation | Predicting Conflicts in a Pervasive System |
JP5224953B2 (ja) * | 2008-07-17 | 2013-07-03 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 情報処理装置、情報処理方法およびプログラム |
WO2012058796A1 (en) * | 2010-11-02 | 2012-05-10 | Empire Technology Development Llc | Scalable reasoning using a polarity-based module |
US8856764B2 (en) * | 2011-01-25 | 2014-10-07 | International Business Machines Corporation | Distributed static analysis of computer software applications |
US9858051B2 (en) * | 2011-06-24 | 2018-01-02 | Cavium, Inc. | Regex compiler |
US8990259B2 (en) * | 2011-06-24 | 2015-03-24 | Cavium, Inc. | Anchored patterns |
WO2013020001A1 (en) | 2011-08-02 | 2013-02-07 | Cavium, Inc. | Lookup front end output processor |
EP2909783B1 (en) * | 2012-10-19 | 2020-02-12 | McAfee, LLC | Secure disk access control |
US9275336B2 (en) | 2013-12-31 | 2016-03-01 | Cavium, Inc. | Method and system for skipping over group(s) of rules based on skip group rule |
US9544402B2 (en) | 2013-12-31 | 2017-01-10 | Cavium, Inc. | Multi-rule approach to encoding a group of rules |
US9667446B2 (en) | 2014-01-08 | 2017-05-30 | Cavium, Inc. | Condition code approach for comparing rule and packet data that are provided in portions |
US10481881B2 (en) * | 2017-06-22 | 2019-11-19 | Archeo Futurus, Inc. | Mapping a computer code to wires and gates |
US9996328B1 (en) * | 2017-06-22 | 2018-06-12 | Archeo Futurus, Inc. | Compiling and optimizing a computer code by minimizing a number of states in a finite machine corresponding to the computer code |
CN111026377B (zh) * | 2019-11-21 | 2023-03-14 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于有限状态机的调用显示列表预译码方法 |
CN113254755B (zh) * | 2021-07-19 | 2021-10-08 | 南京烽火星空通信发展有限公司 | 一种基于分布式框架的舆情并行关联挖掘方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004318809A (ja) * | 2003-02-24 | 2004-11-11 | Fuji Xerox Co Ltd | 情報抽出規則生成装置および方法 |
CN1716958A (zh) * | 2004-06-14 | 2006-01-04 | 鸿璟科技股份有限公司 | 使用子表式自动机的系统安全实施方法以及相关的系统 |
WO2008034086A1 (en) * | 2006-09-15 | 2008-03-20 | Microsoft Corporation | Transformation of modular finite state transducers |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5317509A (en) | 1992-01-21 | 1994-05-31 | Hewlett-Packard Company | Regular expression factoring for scanning multibyte character sets with a single byte automata machine |
US5915259A (en) | 1996-03-20 | 1999-06-22 | Xerox Corporation | Document schema transformation by patterns and contextual conditions |
US5946490A (en) | 1996-03-22 | 1999-08-31 | Northeastern University | Automata-theoretic approach compiler for adaptive software |
JP2003084987A (ja) | 2001-09-11 | 2003-03-20 | Internatl Business Mach Corp <Ibm> | Xml文書の妥当性を検証するためのオートマトンの生成方法、xml文書の妥当性検証方法、xml文書の妥当性を検証するためのオートマトンの生成システム、xml文書の妥当性検証システムおよびプログラム |
US6785643B2 (en) | 2001-10-15 | 2004-08-31 | Motorola, Inc. | Chart parsing using compacted grammar representations |
US6826568B2 (en) * | 2001-12-20 | 2004-11-30 | Microsoft Corporation | Methods and system for model matching |
US7058937B2 (en) | 2002-04-12 | 2006-06-06 | Intel Corporation | Methods and systems for integrated scheduling and resource management for a compiler |
AU2003259797A1 (en) | 2002-08-05 | 2004-02-23 | Fish, Robert | System and method of parallel pattern matching |
US7093231B2 (en) | 2003-05-06 | 2006-08-15 | David H. Alderson | Grammer for regular expressions |
US20040260683A1 (en) * | 2003-06-20 | 2004-12-23 | Chee-Yong Chan | Techniques for information dissemination using tree pattern subscriptions and aggregation thereof |
US7607099B2 (en) | 2003-11-03 | 2009-10-20 | Intentional Software Corporation | Method and system for reversible design tree transformations |
GB2422450A (en) | 2005-01-21 | 2006-07-26 | 3Com Corp | Pattern-matching using a deterministic finite state machine |
US20060242197A1 (en) | 2005-04-22 | 2006-10-26 | Igor Tsyganskiy | Methods of transforming application layer structure as objects |
US8762949B2 (en) | 2005-05-31 | 2014-06-24 | Alcatel Lucent | Method and apparatus for incremental analysis of one or more properties of a program |
US8145627B2 (en) | 2005-06-10 | 2012-03-27 | Hewlett-Packard Development Company, L.P. | Use of connectivity analysis to assist rule-based optimizers |
US8201106B2 (en) | 2005-07-01 | 2012-06-12 | Alcatel Lucent | Method for transforming a tree structure into a more human-comprehensible document |
US7624075B2 (en) * | 2006-09-15 | 2009-11-24 | Microsoft Corporation | Transformation of modular finite state transducers |
-
2008
- 2008-09-30 US US12/242,322 patent/US8176085B2/en not_active Expired - Fee Related
-
2009
- 2009-08-20 JP JP2011530081A patent/JP5530449B2/ja active Active
- 2009-08-20 CN CN201310269593.7A patent/CN103345464B/zh active Active
- 2009-08-20 EP EP09818172A patent/EP2332068A4/en not_active Ceased
- 2009-08-20 WO PCT/US2009/054457 patent/WO2010039348A2/en active Application Filing
- 2009-08-20 CN CN200980139411.6A patent/CN102165434B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004318809A (ja) * | 2003-02-24 | 2004-11-11 | Fuji Xerox Co Ltd | 情報抽出規則生成装置および方法 |
CN1716958A (zh) * | 2004-06-14 | 2006-01-04 | 鸿璟科技股份有限公司 | 使用子表式自动机的系统安全实施方法以及相关的系统 |
WO2008034086A1 (en) * | 2006-09-15 | 2008-03-20 | Microsoft Corporation | Transformation of modular finite state transducers |
Non-Patent Citations (4)
Title |
---|
On subtyping of tree-structured data: A polynomial approach;Bry F,et al.,;《Principles and Practice of Semantic Web Reasoning》;20041231;1-18 * |
Visibly pushdown automata for streaming XML;Kumar V,et al.,;《Proceedings of the 16th international conference on World Wide Web. ACM》;20071231;1053-1062 * |
XML schema containment checking based on semi-implicit techniques;Tozawa A,et al.,;《Implementation and application of automata》;20031231;213-215 * |
XML schema, tree logic and sheaves automata;Dal Zilio S,et al.,;《Rewriting Techniques and Applications》;20031231;246-263 * |
Also Published As
Publication number | Publication date |
---|---|
CN102165434B (zh) | 2014-12-17 |
EP2332068A2 (en) | 2011-06-15 |
JP2012513046A (ja) | 2012-06-07 |
US8176085B2 (en) | 2012-05-08 |
CN103345464A (zh) | 2013-10-09 |
US20100094906A1 (en) | 2010-04-15 |
EP2332068A4 (en) | 2013-03-06 |
CN102165434A (zh) | 2011-08-24 |
WO2010039348A2 (en) | 2010-04-08 |
JP5530449B2 (ja) | 2014-06-25 |
WO2010039348A3 (en) | 2010-06-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103345464B (zh) | 模块化森林自动机 | |
CN101887365B (zh) | 用于构造基于组件的应用的可执行代码的方法和编译器 | |
Agrawal et al. | Graph transformations on domain-specific models | |
CN104662513A (zh) | 自动改进程序编译中的并行处理的方法及其系统 | |
CN105468702A (zh) | 一种大规模rdf数据关联路径发现方法 | |
CN105531672A (zh) | 解析器生成 | |
Agrawal et al. | A UML-based graph transformation approach for implementing domain-specific model transformations | |
Macías et al. | Multilevel coupled model transformations for precise and reusable definition of model behaviour | |
Bratvold | Skeleton-based parallelisation of functional programs | |
Zeng et al. | Redesign of the gStore system | |
CN113508385B (zh) | 使用子例程图谱进行形式语言处理的方法和系统 | |
Laguna et al. | Seamless development of software product lines | |
CN102520953A (zh) | 基于bpmn的页面生成方法和装置 | |
van Iersel et al. | Orchard networks are trees with additional horizontal arcs | |
Spencer et al. | Inferring data transformation rules to integrate semantic web services | |
Bouchachia et al. | Nature-inspired techniques for conformance testing of object-oriented software | |
Sun et al. | Efficient transfer learning via joint adaptation of network architecture and weight | |
Cicchetti et al. | Decoupling web application concerns through weaving operations | |
Oliveira et al. | A Flexible Strategy-Based Model Comparison Approach: Bridging the Syntactic and Semantic Gap. | |
Fabbretti et al. | Generation of a reversible semantics for Erlang in Maude | |
CN115904394B (zh) | 一种面向众核架构的神经网络增量编译方法和装置 | |
Capra et al. | A Maude Formalization of Object Nets | |
Strolenberg | ForestFIRE & FIREWood, A Toolkit & GUI for Tree Algorithms | |
Capra et al. | Encoding Nets-Within-Nets in Maude | |
Rohloff | Analysis and implementation of hierarchical mutually recursive first class modules |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150728 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20150728 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |