CN105531672A - 解析器生成 - Google Patents
解析器生成 Download PDFInfo
- Publication number
- CN105531672A CN105531672A CN201480050603.0A CN201480050603A CN105531672A CN 105531672 A CN105531672 A CN 105531672A CN 201480050603 A CN201480050603 A CN 201480050603A CN 105531672 A CN105531672 A CN 105531672A
- Authority
- CN
- China
- Prior art keywords
- data
- node
- container
- inlet flow
- hierarchical
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/149—Adaptation of the text data for streaming purposes, e.g. Efficient XML Interchange [EXI] format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
- G06F40/221—Parsing markup language streams
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Artificial Intelligence (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Library & Information Science (AREA)
- Devices For Executing Special Programs (AREA)
- Document Processing Apparatus (AREA)
Abstract
生成用于解析数据对象的输入流(504)的数据解析器(418)包括:接收表示限定以层级组织的多个对象的分层数据格式(105,205)的信息(502),所述对象包括表示数据对象的一个或多个模式对象、以及每个与一个或多个模式对象相关联的一个或多个容器对象;以及处理所接收到的信息以形成所述数据解析器。所述处理包括:确定所述输入流中连续数据对象之间的容许转换;将一个或多个数据操作与每个所确定的容许转换相关联;以及存储用于配置处理器以执行所述数据解析器的规范。
Description
相关申请的交叉引用
本申请要求2013年11月22日提交的美国申请第14/087,158号的优先权,其要求2013年7月12日提交的美国临时申请第61/845,722号的优先权。
背景技术
本说明书涉及解析器(parser)生成。
一些***用户解析器,用于分析输入并且确定该输入的不同部分之间的关系以便解释该输入。一些解析器由程序员手动写入。一些解析器由解析器生成器自动生成。例如,一些解析器生成器(也称为编译程序的编译程序(compiler-compiler),诸如yacc或Bison)接受具有生产规则(或者简称为“生产”)的语法(grammer)作为输入,其描述根据该语法被认为是有效的语法元素(syntacticelement)、以及它们之间的关系。解析器生成器提供用于解析输入的输出信息,该输入符合被提供给解析器生成器的语法。各种解析器可以被用于处理各种不同种类的数据。例如,应用-协议解析器将数据包流转化为这些数据包流中流量的高级表示。
发明内容
在一个方案中,一般地,一种生成数据解析器的方法,所述数据解析器用于解析数据对象的输入流,所述方法包括:接收表示限定以层级组织的多个对象的分层数据格式的信息,所述对象包括表示数据对象的一个或多个模式对象、以及每个与一个或多个模式对象相关联的一个或多个容器对象;以及处理所接收到的信息以形成所述数据解析器。所述处理包括:至少部分基于表示所述分层数据格式的所述信息,确定所述输入流中连续数据对象之间的容许转换;将一个或多个数据操作与每个所确定的容许转换相关联;以及存储规范(例如,可执行指令、或所述数据解析器的任何其他规范),该规范用于将处理器配置为执行所述数据解析器以:(1)识别所述输入流中的第一数据对象与第二数据对象之间的转换,以及(2)至少部分基于与一个或多个之前所识别的转换相关联的背景来对所述第二数据对象内的数据值执行与所识别的转换相关联的数据操作。
方案可以包括一个或多个以下特征。
表示所述分层数据格式的所述信息包括表示所述分层数据格式的树,该树包括由多个边缘互连的多个节点,多个节点中的每个表示由所述分层数据格式限定的多个对象中的一个。
与一个或多个之前所识别的转换相关联的所述背景对应于表示所述分层数据格式的所述树的位置。
所述模式对象中的至少一个包括由该模式对象表示的对应数据对象所包含的标签。
所述容器对象包括表示下述至少一个的至少一个容器对象:在所述输入流内所包含的数据对象的序列、在所述输入流内所包含的数据对象的集合、或者在多个可能数据对象中所述输入流内所包含的一个数据对象的选择。
至少一些容器对象被规定为表示所述输入流内数据对象的一系列多个容器。
所述多个对象中的至少一些对象在所述分层数据格式中被指定为可选的。
确定所述输入流中所述分层数据格式的所述对象之间的容许转换包括:生成所述分层数据格式的编译树表示,所述编译树表示包括由多个边缘互连的多个节点,所述多个节点中的至少一些表示由所述分层数据格式限定的所述多个对象中的一个并且所述多个节点中的至少一些表示编译特定对象。
表示编译特定对象的所述节点包括矢量容器节点、根节点、空标签节点、以及仅扇出节点中的一个或多个。
确定所述输入流中所述分层数据格式的所述对象之间的容许转换包括处理所述编译树表示以确定所述编译树表示的所述节点之间的所有容许转换。
处理所述编译树表示以确定所述编译树表示的所述节点之间的所有容许转换包括对于所述编译树表示的每个节点,确定到该节点具有转换的所有节点以及确定该节点到其具有至少一个转换的所有节点。
处理所述编译树表示以确定所述编译树表示的所述节点之间的所有容许转换包括合并所述节点之间的重复转换以及消除所述节点之间的不完备转换。
所述方法还包括为所识别的每个容许转换生成精细边缘,所述精细边缘包括与所述转换相关联的源节点、与所述转换相关联的目的节点、与所述转换相关联的容器节点、以及与所述转换相关联的循环行为。
将一个或多个数据操作与每个所识别的转换相关联包括分析每个精细边缘以确定所述一个或多个数据操作。
一个或多个数据操作包括推送至容器对象的范围的操作、弹出容器对象的范围的操作、以及读取数据对象的值的操作。
确定所述输入流中所述分层数据格式的所述对象之间的容许转换包括生成包括下述至少一个的输出:所述分层数据格式不包括任何模糊定义的指示、所述分层数据格式确定包括一个或多个模糊定义的指示、或者包含在所述分层数据格式中任何模糊定义的一个或多个可能求解。
使用下述至少一个来指定表示所述分层数据格式的数据:ASN.1符号、XML符号、SWIFT符号、X12符号和HL7符号。
在另一个方案中,一般地,一种生成数据解析器的***,所述数据解析器用于解析根据分层数据格式所格式化的输入流,所述***包括:输入装置或端口,被配置为接收表示限定以层级组织的多个对象的分层数据格式的信息,所述对象包括表示数据对象的一个或多个模式对象、以及每个与一个或多个模式对象相关联的一个或多个容器对象;以及至少一个处理器,被配置为处理所接收到的信息以形成所述数据解析器。所述处理包括:至少部分基于表示所述分层数据格式的所述信息,确定所述输入流中连续数据对象之间的容许转换;将一个或多个数据操作与每个所确定的容许转换相关联;以及存储规范,该规范用于将处理器配置为执行所述数据解析器以:(1)识别所述输入流中的第一数据对象与第二数据对象之间的转换,以及(2)至少部分基于与一个或多个之前所识别的转换相关联的背景来对所述第二数据对象内的数据值执行与所识别的转换相关联的数据操作。
在另一个方案中,一般地,一种生成数据解析器的***,所述数据解析器用于解析根据分层数据格式所格式化的输入流,所述***包括:用于接收表示限定以层级组织的多个对象的分层数据格式的信息的装置,所述对象包括表示数据对象的一个或多个模式对象、以及每个与一个或多个模式对象相关联的一个或多个容器对象;以及用于处理所接收到的信息以形成所述数据解析器的装置。所述处理包括:至少部分基于表示所述分层数据格式的所述信息,确定所述输入流中连续数据对象之间的容许转换;将一个或多个数据操作与每个所确定的容许转换相关联;以及存储规范,该规范用于将处理器配置为执行所述数据解析器以:(1)识别所述输入流中的第一数据对象与第二数据对象之间的转换,以及(2)至少部分基于与一个或多个之前所识别的转换相关联的背景来对所述第二数据对象内的数据值执行与所识别的转换相关联的数据操作。
在另一个方案中,一般地,一种存储在计算机可读介质上的软件,用于生成数据解析器,所述数据解析器用于解析数据对象的输入流。所述软件包括用于使得计算***执行下述的指令:接收表示限定以层级组织的多个对象的分层数据格式的信息,所述对象包括表示数据对象的一个或多个模式对象、以及每个与一个或多个模式对象相关联的一个或多个容器对象;以及处理所接收到的信息以形成所述数据解析器。所述处理包括:至少部分基于表示所述分层数据格式的所述信息,确定所述输入流中连续数据对象之间的容许转换;将一个或多个数据操作与每个所确定的容许转换相关联;以及存储规范,该规范用于将处理器配置为执行所述数据解析器以:(1)识别所述输入流中的第一数据对象与第二数据对象之间的转换,以及(2)至少部分基于与一个或多个之前所识别的转换相关联的背景来对所述第二数据对象内的数据值执行与所识别的转换相关联的数据操作。
方案可以具有一个或多个以下优点。
组织对来自多个不同***的数据进行管理。一些***可以产生***本地格式的数据的数据集。其他***使用符合诸如标准:逗号分隔值(csv)、可扩展标记语言(XML)、抽象语法符号一(ASN.1)、环球银行金融电信协会(SWIFT)、X12或另一种标准的非本地格式产生数据集。一般地,即使当已知数据集使用特定标准时,可能需要根据符合该特别标准的特定数据格式来解析数据集内的数据对象。
一些***通过进口机制接受由其他***提供的数据集。进口机制将外部数据集转换为本地***格式用于处理。一个这种进口机制是数据解析器,其分析根据特别数据格式(例如,模式)所格式化的数据(例如,被编码为二进制数据的消息或其他文件、或者使用诸如ASCII文本的字符集)的输入流,并且识别它的组成部分,该组成部分然后被用于填充本地数据记录的字段。模式(schema)可以被用于例如限定在输入流中可能出现的数据对象的不同可能有效序列。输入流内的数据对象可以被明确地标记、或者可以被隐式地识别为输入流内的单独数据对象。
在其它优点中,使用本文所述方法产生的数据解析器可以被配置为执行与任何分层数据格式兼容的数据操作,并且节省开发时间。这相对于传统的数据解析器是一种改善,传统的数据解析器典型地开发有一组静态的数据格式并且必须被重建或改装以容纳额外的数据格式,并且当数据正在被解析时不能执行自定义数据操作。
本文所述的方法可以将根据广义分层标签值所格式化的数据转换为任何其他数据格式。
因为减少了诸如背景检查的操作,所以本文所述方法的性能可以优于传统方法。
本文所述的方法可以利用与选择性的“本地路由(localrouting)”相反的“全局路由(globalrouting)”。非常普遍地,采用“全局路由”的数据解析器为它执行的每个解析操作考虑在给定分层嵌套目标数据格式的所有等级处的元素之间的一些或全部容许转换。采用“本地路由”的数据解析器为它执行的每个解析操作考虑仅仅在给定分层嵌套目标数据格式的单个等级处的元素之间的容许转换。利用“全局路由”潜在地减小解析器所需的检查(例如,长度检查)的量。具体而言,在分层嵌套模式的情形下,如果被本地完成,则每级模式可能需要单独测试,然而,如果被全局完成,则可以使用一个且仅仅一个查找或测试来识别。由此,在一些示例中,消除了每个解析操作之前或之后的额外检查,并且简便地执行长度检查以例如验证数据的完整性或者处理模糊路线。
通过以下描述和权利要求,本发明的其它特征和优点是显而易见的。
附图说明
图1是数据处理***的示意图。
图2是示例性数据格式。
图3是示例性数据格式的树表示的示意图。
图4是转换图。
图5A是解析器生成模块的示意图。
图5B是执行环境的示意图。
图6是示例性数据格式的范围树表示。
图7是示例性数据格式的详细转换示意图。
图8是与数据操作相关联的转换列表。
图9是解析来自输入流的数据的解析器的示例。
图10是当解析图9的数据时强调解析器所跟随的转换的转换示意图。
图11是与数据操作相关联的转换列表。
具体实施方式
1***概述
图1示出其中可以使用解析器生成技术的示例性数据处理***100。***100包括数据源102,数据源102可以包括诸如存储装置或连接至在线数据流的一个或多个数据源,其每个可以以任意多种存储格式(例如,数据库表、电子数据表文件、纯文本文件、或主机所使用的本机格式)来存储数据。执行环境104包括解析器生成模块106和执行模块112。执行环境104可能被托管在受合适的操作***(诸如UNIX操作***)控制的一个或多个通用计算机上。例如,执行环境104可以包括多节点并行计算环境,该多节点并行计算环境包括使用多个中央处理器(CPU)的计算机***的配置,这些CPU可以是本地CPU(例如多处理器***,如SMP计算机)、或本地分布式CPU(例如多个处理器耦合为集群或MPP)、或远程CPU、或远程分布式CPU(例如通过局域网(LAN)和/或广域网(WAN)来耦合的多个处理器)、或其组合。在一些实施方式中,执行模块112提供操作***,其可以是运行在一个或多个处理器上的并行操作***,并且解析器生成模块106被执行为在该操作***中运行的程序。用户115还能够通过在用户界面中观察所显示的输出和录入输入来与执行环境104交互。
解析器生成模块106接收表示目标数据格式105的数据,目标数据格式105限定被认为是根据目标数据格式105所(正确地)格式化的可能数据对象的允许结构、以及在输入流中出现的多个数据对象之间的允许排序。目标数据格式105可以可选地符合描述模式的标准,该模式用于基于模式对象和模式对象之间的关系等方面来限定什么类型的数据对象是容许的。由目标数据格式105限定的结构可以包括表示包含数据值(例如,标记数据对象,其中基于相关联的标签来识别数据值)的数据对象的模式对象、以及可以包含模式对象的容器对象或基于潜在嵌套结构(例如,标签的序列、标签的集合等)的其他容器对象。例如,如果目标数据格式105符合ASN.1标准的版本,则模式对象可以表示包含下述的数据对象:与数据值相关联的标签、随后是数据值的长度、随后是数据值本身。如果目标数据格式105符合XML标准的版本,则模式对象可以表示包含下述的数据对象:开始标签、然后是数据值、随后是结束标签。在一些示例中,目标数据格式105可以被表现为层级(例如,树或其它形式的分层表示),其具有表示层级的节点的模式对象和容器对象。
目标数据格式105描述输入流(例如数据流,其包括根据目标数据格式105所格式化的一系列数据对象)中数据对象的期望格式,其将从数据源102到达执行环境104。基于层级的结构(包括层级内模式对象和容器对象的排序),目标数据格式105也隐式地确定输入流中连续的数据对象之间的何种转换(transition)是容许的。解析器生成模块106处理目标数据格式,以生成能够解析来自数据源102的输入流的解析器。对于符合一些标准(诸如ASN.1)的目标数据格式,输入流也可以包括标签(或其它标记或分隔符),其为各类容器对象(例如,序列或集合)指示所包含的数据对象的开始(或结束),但是***100能够处理具有或不具有这种标签的输入流。一般地,当执行环境104接收来自输入流的数据时,执行环境104的执行模块112使用所生成的解析器,来解释从数据源102接收的输入流中的数据,识别被标记数据对象之间的转换,并且使用数据操作来处理这些数据对象中的数据值以存储结果114,该存储结果114可以包括执行环境104本地的填充记录(populatingrecord)。在一些示例中,记录被存储在数据存储***116中。提供数据源102和数据存储***116的存储装置对执行环境104而言可以是本地的,例如,被存储在连接至运行所述执行环境104的计算机的存储介质(例如,硬盘驱动器108)中、或者对执行环境104而言可以是远程的,例如,被托管在通过远程连接与运行所述执行环境104的计算机进行通信的远程***(例如,主机100)上。
数据存储***116对于开发环境118也是可访问的,其中,开发者120能够开发待由执行模块112执行的程序,以应用额外处理至正在被解析的数据、所存储的结果114和/或其他数据。在一些实施方式中,开发环境118是用于开发如同数据流示意图的应用的***,该数据流示意图包括由至高点(vertice)之间的定向链路(表示工作元素的流动)所连接的至高点(表示组件或数据集)。例如,在发明名称为“ManagingParametersforGraph-BasedApplications(管理用于基于图形应用的参数)”的美国专利公开2007/0011668中更详细地描述了这种环境,其通过引用合并于此。在美国专利5,966,072“EXECUTINGCOMPUTATIONSEXPRESSEDASGRAPHS(执行被表示为图表的计算)”中描述了用于执行这种基于图表计算的***,其通过引用合并于此。根据这个***得到的数据流图表提供了这样的方法,该方法用于使信息流入和流出由图表组件表示的各个进程,用于在进程之间移动信息以及用于限定进程的运行顺序。这个***包括选择进程间通信方法的算法(例如,根据图表的链路的通信路径可以使用TCP/IP或UNIX域套接字、或者使用共享内存以在进程之间传递数据)。
参照图2,目标数据格式205的简单示例限定多个容器对象250,其每个包括一个或多个模式对象252。在一些示例中,使用诸如XML或ASN.1符号的标准化符号规定目标数据格式205,这使得能够根据所限定的模式来规定输入流中数据对象之间的容许格式和排序,并且包括用于指定模式对象和容器对象的符号。本文所使用的“模式对象”包括任何元素,例如,被用于表示相关数据对象的组的限定模式。非常一般性地,容器对象(也简称为“容器”)的示例包括序列容器(即包含对象的有序集合)、集合容器(即,包含对象的集合,从中可以选择一个或多个对象)、或选择容器(即,包含对象的集合,从中可以选择仅仅一个对象)。容器对象内的对象可以是模式对象、或其他容器对象,使得能够得到形成层级的嵌套结构。模式对象252包括标签253和字段名,其中标签253将出现在输入流中的对应数据对象内以识别特定相关数据值,并且***100将使用上述字段名来表示在由所生成的解析器填充的记录内的数据值。模式对象252可以具有表示该数据值的类型(例如,对于整数的“int”,或者“string”,如图2所示)的相关数据类型。在一些数据格式中,字段名是标签的名称、或者与一个或多个标签相关联。在下面的一些示例中,具有标签“T”和字段名称“n”的模式对象将被描述为模式对象“T(n)”。
以下是ASN.1注释中目标数据格式205的示例。
标签规范[UNIVERSAL81]、[UNIVERSAL82]等使得数据具有与‘P’、‘Q’等的ASCII值相同的标签。对于ASN.1,输入流也将包括标记序列容器或集合容器(除了选择容器之外)的开始的标签,如以下一些示例中所示。
图2的目标数据格式205包括序列容器SEQ_A,其包括第一模式对象P(a1)、第二模式对象Q(a2)、选择容器CHOICE_B、以及第三模式对象U(a6)。选择容器CHOICE_B包括模式对象R(b3),和集合容器SET_C。SET_C集合容器包括两个模式对象S(c4)和T(c5)。P(a1)模式对象、CHOICE_B选择容器和SET_C集合容器都被指定为“可选的(optional)”。可选的指定意味着由指定的容器对象或模式对象表示的数据对象(多个)不受数据格式要求并且输入流可以包括或可以不包括与该模式对象对应的数据对象。根据出现在目标数据格式内的对应标签,对象可以被指定为可选的或者被指定为具有一些其他特性。一些标准可以提供目标数据格式内对象的明确指定,并且一些标准可以提供目标数据格内对象的隐式指定。例如,一些标准(例如EDI/EDIFACT)包括一种策略,其中如果容器中的第一模式对象具有可选的指定,则目标数据格式指定整个容器为可选的。每个容器对象限定在本文中什么被称为包含容器内所有对象(即,模式对象和容器对象)的“范围(scope)”。由此,SEQ_A的范围包括P(a1)、Q(a2)、CHOICE_B和U(a6)。CHOICE_B的范围包括R(b3)、SET_C、S(c4)、和T(c5)。SET_C的范围包括S(c4)和T(c5)。
参照图3,图2的目标数据格式205被示为树305,其具有被示为树305的节点319的数据格式205的容器对象和模式对象以及被示为使节点319互连的边缘320的容器对象与模式对象之间的关系。一般地,与模式对象和其对应数据对象相关联的叶节点(称为“数据节点”)具有关联标签和与数据值对应的字段名,而与容器相关联的内节点(称为“容器节点”)是无价值的并且可以与或可以不与标签相关联。
在操作中,自上而下且自左手侧至右手侧来读取树。特别地,参照图4的简单转换图400,读取根据图2的数据格式205所格式化的输入流的解析器开始于根作为其起始状态。解析器期望从输入流接收到的第一标签数据对象(即,一对标签和其对应数据值,被称为标签-值对)将是P(a1)模式对象的标签-值对或Q(a2)模式对象的标签-值对(因为P(a1)模式对象被指定为可选的)。如果从输入数据流接收到P(a1)模式对象的标签-值对,则从输入流接收到的下一个标签-值对一定是Q(a2)模式对象的标签-值对。
由于CHOICE_B容器是可选的,所以从输入流接收到的下一个标签-值对可以是U(a6)、R(b3)、S(c4)或T(c5)模式对象中任意一个的标签-值对。对于一些标准(诸如ASN.1),在S(c4)或T(c5)模式对象的标签-值对的情况下,也将存在标记SET_C开始的标签。如果接收到R(b3)模式对象的标签-值对,则从输入流接收到的下一个标签-值对一定是U(a6)模式对象的标签-值对。如果接收到T(c5)模式对象的标签-值对,则从输入流接收到的下一个标签-值对一定是S(c4)模式对象的标签-值对。接续,由于SET_C容器被指定为集合容器的“矢量(vector)”(由[]运算符表示),所以可以从输入流接收到S(c4)和T(c5)模式对象的标签-值对的一个或多个组合(即,循环行为是允许的)。在接收到S(c4)和T(c5)模式对象的标签-值对的一个或多个组合之后,从输入流接收U(a6)模式对象的标签-值对。在接收到U(a6)模式对象的标签-值对之后,已经接收到整个记录并且记录结束。接收到的任何后续标签-值对作为下一个记录的一部分。
2解析器生成
参照图5A,图1的解析器生成模块106的一个示例被配置为接收目标数据格式105作为输入并且将目标数据格式105处理为编译解析器程序418,编译解析器程序418可以验证和解析具有分层标签-值结构的任何目标数据格式而几乎没有或者没有数据的预处理。为了这样做,解析器生成模块106通过分层数据格式确定“全局路由(globalrouting)”,该分层数据格式包括识别分层目标数据格式的元素之间的一些或全部容许转换。解析器生成模块106包括数据格式映射模块420、转换分析模块424以及程序生成模块430。
参照图5B,在一些实施方式中,在执行环境104中执行的数据格式处理器500预处理目标数据格式105以形成处理数据格式信息502,它表示目标数据格式105。该处理数据格式信息502准备解析器生成模块106用于生成解析器程序418,解析器程序418被配置为当由执行模块112执行程序418时将数据流504解析为特别的输出记录格式506。所以,数据格式信息502也包括输出记录格式506的限定。多种技术中的任意一种(包括使用编译程序的编译程序(例如yacc或Bison),其接受数据格式105符合的标准(例如,ASN.1)的语法)可以被用于将数据格式处理器500配置为预处理上述目标数据格式105,并且输出格式解析器,数据格式处理器将使用该格式解析器来根据目标数据格式105产生上述处理数据格式信息502。
以下是根据上述ASN.1注释中的目标数据格式205示例产生的以数据操作语言(DML)指定的处理数据格式信息502的示例(被保存在命名为“example.asn1”的文件中)。
在一些实施方式中,解析器生成模块106和执行模块112可以是用于根据所提供的数据格式来解析数据的共同处理模块或***的组件。例如,在单个数据流图表或者数据流图表的单个组件中,可以利用处理数据格式信息502和输入流504作为到数据流图表的输入来执行两个模块的功能。在一些实施方式中,取代提供可执行解析器程序418,解析器生成模块106可以提供解析器作为数据结构,例如,以有效地存储执行解析所需的转换和背景信息的表示,诸如编译树表示的精细边缘的枚举列表,如下更详细所描述的。
2.1数据格式映射
数据格式105被首先提供给数据格式映射模块420,数据格式映射模块420将数据格式105映射到解析器生成模块106的后续模块可用的内部“目标”数据格式。在一些示例中,数据格式105是标准格式映射文件(例如,ASN.1、SWIFT或X12映射文件)并且内部目标数据包括数据格式105的范围树表示。
2.1.1数据格式映射示例
参照图6,图2的示例性数据格式205的范围树表示600明确地表示数据格式中存在的不同范围。范围树表示600不包括容器对象类型或标签信息。容器类型和标签信息被代替包括在编译树中(或者更一般地,有向非循环图(DAG)),其中,标签和容器类型信息被存储为编译节点的属性。当编译树被遍历时,使用属性来创建边缘。下面将进一步详细描述编译树。
在一些示例中,由范围树表示600的范围660所包含的每个模式对象与空程序表(未示出)相关联。解析器编译过程中的随后步骤利用与范围和模式对象相关联的“程序”来填充表并且可以包括一个或多个解析命令,这将在下文更详细地描述。
2.2转换分析
数据格式的范围树表示从数据格式映射模块420传递到转换分析模块424,其中转换分析模块424静态地分析数据格式的范围树表示以基于输入流中数据对象内的结构信息(例如,标签)来枚举输入流内数据对象之间的容许转换。基于此枚举,利用程序来填充上述程序表。为了枚举容许转换,转换分析模块424利用以下事实(如图3所示),即诸如X12、SWIFT、HL7等许多数据标准可以被表示为具有模式对象的树,表示数据对象的叶呈标签-值对的形式,其中,在输入流中存在一个标签可以要求或可以不要求输入流(以及由标签识别的相关联数据值)中存在另一个标签或标签集合。
2.21转换分析示例
参照图7,转换分析模块424首先形成范围树表示的编译树表示700。如上所示,数据格式的容器对象和模式对象被表示为树中的节点(“容器节点”和“数据节点”),并且容器对象与数据对象之间的关系被表示为连接树的节点的边缘。在一些示例中,如果数据格式包括矢量,则编译树表示700包括额外的“VectorContainer(矢量容器)”节点762,其由转换分析模块424内部地使用并且协助转换分析过程。
转换分析模块424遍历编译树700,并且为表示容器对象的每个节点计算节点的“扇入(fan-in)”和“扇出(fan-out)”。给定容器节点的扇入被限定为可以由容器节点外的另一个节点直接访问的容器节点范围内的所有节点(包括容器和数据节点)。类似地,给定容器节点的扇出被限定为给定容器节点外的节点能够直接访问的容器节点中所包含的所有节点。
一般地,当为集合类型容器计算扇入和扇出时,集合的子元素(childrenofset)们必须彼此互为目标。这可以通过对集合的所有成员进行笛卡尔积、将集合本身作为循环并且使得所有扇出节点以所有的扇入节点为目标来完成。注意确保如果集合是矢量,则集合的给定成员仅仅以它自身为目标。对于选择类型容器,容器的成员都不以彼此为目标。对于序列类型容器,除了最后一个,每个子元素的扇出都以下一个子元素的扇入为目标,并且如果下一个子元素是可选的则还以该子元素之后的一个为目标(以此类推)。如果节点本身是矢量,则通过访问矢量节点的扇入来创建循环边缘,并且对于每个扇入节点,访问矢量节点的扇出从而创建从扇出到扇入的边缘。
对于图2所示的示例性数据格式,SEQ_A具有单个扇入节点P(a1)和单个扇出节点U(a6),因为P(a1)和P(a1)和U(a6)是容器对象中的第一个和最后一个模式对象(分别地)并且是所需要的模式对象。因为R(b3)是可选模式对象,所以CHOICE_B具有包含R(b3)和SET_C的扇入节点的列表,这意味着Q(a2)可以以R(b3)或SET_C为目标。CHOICE_B的扇出节点列表包含R(b3)和SET_C。SET_C具有包含S(c4)和T(c5)的扇入节点的列表和包含S(c4)和T(c5)的扇出节点的列表。VectorContainer(矢量容器)节点762表示特殊、编译特定类型的容器对象,其指定该容器的扇出可以以该容器的扇入以及序列中下一个节点的扇入为目标。
利用所有计算出的容器节点的扇入和扇出,边缘创建过程开始。边缘创建过程开始于形成在它本身与它的子元素(即,所有容器和容器的范围内的模式对象)之间边缘的顶层容器。在一些示例中,从顶层容器的节点到与容器相关联的每个扇入节点创建边缘。然后,容器的子元素被适当地连接。当边缘创建完成时,边缘被“组合”,包括禁用重复的和不完整的边缘(例如,在容器内创建但是由外部容器消除的边缘)。
然后转换分析模块424遍历编译树表示700来创建树节点(称为源节点和目标节点)之间的精细边缘。精细边缘被定义为从源节点到目的节点的边缘,其包括诸如循环行为的路由信息和与该边缘相关联的最高节点。在一些示例中,精细边缘包括以下数据,该数据表示边缘的源节点、边缘的目标节点、边缘循环行为以及边缘的最高节点。循环行为的可能值包括No_Loop(无_循环,即,边缘不存在循环行为)、End_Instance(尾_实例,即,边缘存在循环行为,其中矢量的当前实例在结束,并且在开始新实例),以及End_Record(尾_记录,即,边缘存在循环行为,其中当前记录在结束,并且在开始新记录)。边缘的最高节点被定义为其中创建边缘的容器。如果当循环行为是End_Instance时在VectorContainer(矢量容器)内创建边缘,则边缘的最高节点是VectorContainer(矢量容器)节点。否则,如果当循环行为是End_Record时在VectorContainer(矢量容器)内创建边缘,则边缘的最高节点是被指定为“topnode(最高节点)”的特殊类型节点。一般地,当存在循环行时(即,循环行为不是No_Loop),则边缘的树中的最高节点是VectorContainer(矢量容器)节点。例如,当从具有End_Instance的循环行为的VectorContainer(矢量容器)创建自S(c4)到T(c5)的边缘时,S(c4)是起始节点,c5是目标节点,并且VectorCntr1是边缘的最高节点。
参照图8,示出图7的编译树表示700的精细边缘的枚举列表。
2.3模糊求解
由于在数据格式105中可能包括可选模式对象、不确定长度的矢量、反复标签、以及多范围,则在识别输入流中从一个数据对象到另一个数据对象的转换中可能存在模糊。这些模糊可能产生,作为枚举列表(图8)中具有相同源和目的的边缘。在一些示例中,转换分析模块424发现并解决(自动地或者根据用户输入)目标数据格式105中的模糊。
2.3.1模糊求解示例
例如,对于图2的示例性数据格式,由于SET和矢量容器的组合,模糊存在于边缘T(c5)->S(c4)的多版本之间、以及边缘S(c4)->T(c5)的多版本之间。特别地,当存在从“T”标签到“S”标签的转换、或者从“S”标签到“T”标签的转换时,不清楚该转换是存在于相同集合内的数据对象之间(即,非循环“内边缘”)、还是存在于一个集合中的最后一个数据对象与后续集合中的第一个数据对象之间(即,循环“外边缘”)。因为模糊是由于循环构造而产生的,所以通过将具有相同源和目的的两个版本的边缘结合至具有多个可能目标动作的一个边缘,可以自动地求解模糊。为了做到这点,在这个示例中,不包括循环行为的内边缘与包括循环行为的外边缘相结合。一般地,以可能目标动作的有序列表来存储多边缘的目标动作,其中基于按顺序遍历清单来选择特别动作(例如,基于边缘范围顺序的顺序,从最近(内)到最远(外))。选择可以基于用户输入,或者基于检查上下文(context),诸如被处理的最后一个值的特征、或者递减计数(例如,在一对两个条目中留下一个条目)、或者径迹长度(例如,从集合中的8个字节读取4个字节),如下更详细地描述的。
在一些示例中,使用各种类型模糊中的任意一个。例如,如果输入数据被格式化为ASN.1基本编码规则(BER)数据,则数据包括标签-长度-值三元组并且不可能存在真正的模糊。在这种情况下,利用标签-长度-值三元组中的长度信息可以自动地求解任何感知模糊。更一般地,模糊检测和求解可以被用于快速地和有效地解决模糊问题,包括提供诸如忽略模糊的选项、执行自动消除模糊、或者执行用户协助消除模糊。
以下是可能出现在待解析的输入流内的一系列数据对象的示例。这个示例是基于ASN.1数据的,只是为了便于阅读,这里整数并不像在ASN.1数据中实际编码那样会进行编码。数据对象是T|L|V形式(Tag|Length|Value,标签|长度|值),其中任何Value(值)可以是另一个嵌套TLV三元组。
在这个示例中,集合和序列总是具有与它们相关联的标签。ASN.1中的SET(集合)容器默认地具有[UNIVERSAL(通用)17]的标签,并且SEQUENCE(序列)容器默认地具有[UNIVERSAL(通用)16]的标签。一组容器具有与SET相同的标签。元素类型的标签(在该示例中为SET)出现在矢量的每个元素的SET标签之后。在以下示例中对应于作为“叶值”(即,不是本身TLV三元组)的Value的数字在Value的末尾用‘*’来标记。这个示例中的Tag仅仅是16、17、81、82、83、84、85;并且不属于Value(值)或Tag(标签)的所有其它数字是Length(长度)。
16|36|81|2|888*|17|24|17|10|83|2|1010*|84|2|2020*|17|10|83|2|444*|84|2|555*|85|2|999*
长度被用于维持累加器,当存在模糊或者当需要验证数据的结构完整性时,检查该累加器(例如,当离开具有与其相关联的预期长度的容器节点时,执行检查来确保已经收集正确长度或数据量)。在模糊的情形下,可以检查累加器来确定对于从之前标签到当前标签的模糊边缘应该执行多目标动作中的哪个。
在一些示例中,解析器被配置为执行输入数据的结构验证。例如,如果从输入流接收到的数据以意外的顺序到达,则解析器将发出错误。在另一个示例中,如果从输入流接收到的数据不能被成功地解析,则解析器将发出错误。
2.4解析器生成
一旦目标数据格式105的精细边缘的列表被确定,则该列表被提供给程序生成模块430,其生成解析器程序418。精细边缘的列表包括建立程序的充分信息,以填充为图6的范围树表示600所创建的表。特别地,因为编译树表示700是具有单个根的树,所以从与边缘相关联的源、目的和最高节点可以获得解析器操作(例如,push推送()、pop弹出()和process处理()命令)的序列,并且循环行为指定如何处理VectorContainer(矢量容器)。
为了建立程序,再次遍历图7的编译树表示。对于编译树表示700的每个节点,处理与节点相关联的每个边缘,以为边缘产生程序。一般地,为了为边缘生成程序,程序生成模块430首先为边缘生成控制流图,控制流图包括生成的代码(例如,push()、pop()和process()命令)。然后,控制生成模块430遍历控制流图以生成程序。一旦为边缘生成程序,则程序被添加至范围树表示600中的合适表中。在一些示例中,使用与边缘(与程序相关联)的源节点相关联的标签将程序键入表中。
在一些示例中,当遍历编译树表示700时,当进入容器时,容器对象的预期长度被编码,使得当退出容器时可以进行与累积长度的比较。当进入节点时,考虑标签开销(例如,以字节为单位的标签长度),对累积进行编码,并且当退出容器时,完成对容器期望长度的检查。在一些示例中,无论何时进入节点都将累加器清零,并将长度变量的索引(index)保存至全局变量阵列的已知索引,使得解析器可以处理不确定长度。
当退出容器时,累积值被添加到其父容器的累积值。在一些示例中,在可扩展容器内对未识别标签的默认动作进行编码。对于集合容器,当退出容器时执行检查以确保集合所需的所有字段被分配。当将来自输入流的值解析为其适当形式时,数据转换被编码,使得可以适当地解码整数值、对象标识符等等。
2.4.1程序生成示例
以下是编译树表示700的单个边缘(即,S(c4)→T(c5),End_Instance边缘,其在边缘结合之后也包括No_Loop转换)的程序生成的详细说明。
为了为这个边缘创建程序,执行代码生成,包括首先创建控制流图。控制流图是标准的编译器数据结构,其是包括节点(节点包括语句和单个条件)的二进制树:
stmt1,
stmt2,
...,
cond
其中cond具有两个控制流图边缘:真边缘和伪边缘。与cond相关联的边缘转到控制流图中的其他节点。给定源节点、目的节点、以及边缘的最高节点,可以通过首先表示具有两个方向路径(UP(上)路径和DOWN(下)路径)的路径来确定S(c4)与T(c5)之间路径的控制流图,如下所示:
UP:c4->SET_C->VectorContainer_1
DOWN:VectorContainer_1->SET_C->c5
当遍历UP和DOWN路径时,生成边缘的控制流图的语句和条件,并且控制流图的边缘与它们的各自节点相连接。特别地,当遍历边缘的UP路径时,对于退出的每个节点调用名称为code_node_exit()(编码_节点_退出())的虚拟函数。在这种情况下,code_node_exit()函数被调用两次,一次为S(c4)节点并且一次为SET_C节点。这通常将增加两个POP()语句(即,命令)至控制流图。然而,在这种情况下,模糊存在。特别地,边缘、S(c4)->T(c5)、No_Loop被存储在循环边缘(即,S(c4)->T(c5)、End_instance)内部。当程序生成模块430将要退出节点时,它检查循环边缘内的组合边缘的列表。如果组合边缘列表的当前元素中的顶节点与正在退出的节点相同,则存在必须被求解的模糊。求解模糊的一种可能方式是调用另一个虚拟函数resolve_ambiguity()(求解_模糊()),以允许专门实施该求解,或者如果模糊不能被求解,则甚至发出错误。在这个示例中,如果分配少于SET_C中所有的所需节点,则resolve_ambiguity()函数选择No_Loop路径。
应该注意的是,在一些示例中,SET容器自动地使变量附属于它,该变量指定一些所需字段。当程序生成模块430进入SET容器时,附属于容器的变量被设置为所需字段的数目。当程序生成模块访问每个所需字段时,附属于SET容器的变量递减。当程序生成模块430离开SET时,如果附属于SET容器的变量是非零的,则发出错误。对于S(c4)->T(c5)边缘,由于模糊,不发出错误并且SET容器不退出。
由此,对于UP路径(即,c4->SET_C->VectorContainer_1),创建以下控制流图语句:
在循环的顶部(即,在VectorContainer_1节点处),由于循环行为不是No_Loop,则调用被命名为code_loop_top()(编码_循环_顶部)的虚拟函数。由于模糊求解允许程序生成模块430继续向上循环边缘,所以程序生成模块430将语句添加至控制流图的cf_node_2节点。在这种情况下,通过将以下语句添加至控制流图的cf_node_2节点的以下语句,实例结束并且SET_C_nr变量被重置:
Vector_Container_1:End_Instance,
SET_C_nr=2
对于DOWN路径,对于进入的每个节点,调用命名为code_node_enter()(编码_节点_进入)的虚拟函数。在这种情况下,code_node_enter()被调用三次,一次为SET_C,一次为循环边缘中的T(c5),并且一次为非循环边缘中的T(c5)。对于非循环边缘,使用控制流图的cf_node_3节点,向下遍历路径,包括S(c4)->T(c5)的简单转换。由于T(c5)在SET容器内,程序生成模块430必须检查其是否已经被分配。因为End_Instance确保什么也没有被分配给新实例,则不需要检查循环边缘的分配。因此,控制流图的cf_node_3节点包括下列语句:
由于T(c5)为必需字段,所以在控制流图的cf_node_4节点中SET_C_nr变量递减,如下:
控制流图的cf_node_2节点包括与控制流图的cf_node_4节点相同的语句。因此,最终控制图如下:
每个边缘的控制流图被遍历来为边缘汇编字节码(bytecode)。遍历控制流图的结果是边缘的程序。该程序被存储在图6的范围数据表示600的适当表中。一旦(根据上述过程)为每个边缘生成程序,则从程序生成模块430输出解析器程序418。
3数据操作示例
以下说明描述使用根据上述技术编译的且被配置为处理根据图2的数据格式205所格式化的数据的解析器,来解析输入数据的示例性流的示例。在输入流中识别到从一个数据对象(对象“a”)到另一个数据对象(对象“b”)的转换之后,例如,解析器可以使用“process(b)”命令将一个或多个数据操作应用至对象b。
参照图9-图11,如上描述了由解析器生成模块106生成的解析器928的示例性操作。在示例中,解析器928接收以下输入流:
|Q|888|S|1010|T|2020|T|555|S|444|U|999...
参照图9,输入流954被示为进入解析器并且被解析为记录756。还参照图10,解析器所遵循的转换图1058包括粗体的且编号(1)-(5)的箭头,其表示由解析器用来处理输入流954的转换。特别地,在从输入流接收到任何数据之前,解析器处于其状态。然后解析器接收标签Q,随后是输入流的值888。输入引起第一解析器转换(1),其中,解析器从它的状态转换到其Q(a2)状态。如图11所示,从至Q(a2)的转换与包括process(a2)数据操作的解析器程序相关联,其将值888读入第一记录的a2字段。
然后解析器接收标签S,随后是输入流的值1010。输入引起第二解析器转换(2),其中,解析器从它的Q(a2)转换至它的S(c4)状态。如图11所示,从Q(a2)至S(c4)的转换与包括push(SCOPE_B)命令、push(SCOPE_C)命令、和process(c4)命令的解析器程序相关联。push(SCOPE_B)命令将解析器推入CHOICE_B容器的范围,push(SCOPE_C)命令将解析器推入SET_C容器的范围,并且process(c4)命令使得解析器将值1010读入第一记录的c4字段。
然后解析器接收标签T,随后是来自输入流的值2020。输入引起第三解析器转换(3),其中,解析器从它的S(c4)状态转换到它的T(c5)状态。如图11所示,从S(c4)到T(c5)的转换与包括process(c5)命令的解析器程序相关联,其使得解析器将值2020读入第一记录的c5字段。请注意,因为解析器已经在SCOPE_C中,所以在这种情形下push()或pop()命令是没有必要的。
然后解析器接收另一个标签T,随后是来自输入流的值555。因为T(c5)是SET容器(即,SET_C)的一部分的模式对象,所以在该示例中容许标签T的多个值。SET容器包括一组无序条目,从中可以选择一个或多个对象,包括多个相同的对象。输入引起第四解析器转换(4),其中解析器以循环方式从它的T(c5)状态转换回到它的T(c5)状态。如图11所示,从T(c5)到T(c5)的循环转换与包括End_Instance()命令(即,以指示接收到SET_C容器的第二实例)和process(c5)命令的程序相关联,该process(c5)命令使得解析器将值555读入第一记录中c5字段的第二实例。
然后解析器接收另一个标签S,随后是输入流的值444。再次,因为S(c4)模式对象是SET容器(即,SET_C)的一部分,所以在这种情形下容许标签S有多个值。输入引起第五解析器转换(5),其中解析器从它的T(c5)状态转换至它的S(c4)状态。如图11所示,从T(c5)到S(c4)的转换与包括process(c4)命令的解析器程序相关联,该process(c4)命令使得解析器将值444读入第一记录中c4字段的第二实例。
最后,解析器接收标签U,随后是输入流的值999。输入引起第六解析器转换(6),其中,解析器从它的S(c4)状态转换到它的U(a6)状态。如图11所示,从S(c4)到T(c5)的转换与包括push(SCOPE_C)命令、pop(SCOPE_B)命令、以及process(a6)命令的解析器程序相关联。push(SCOPE_C)命令使得解析器弹出SET_C容器的范围,pop(SCOPE_B)命令使得解析器弹出CHOICE_B容器的范围,并且process(a6)命令使得解析器将值999读入第一记录的a6字段。此时,第一记录完成,并且解析器可以创建新记录,该新记录将由从输入流接收到的后续数据来填充。
4替代方案
在一些示例中,并不产生包括所有容许转换的编译解析器,而是解析器所需的转换可以按需编译(即,直到需要转换才将其编译进解析器)。这样做利用了以下事实的优点:因为消息标准是大的,但是实际消息通常仅实施标准的小部分,所以来自输入流的消息通常是稀疏的。
上述技术可以使用执行适当软件的计算机***来实现。例如,软件可以包括在一个或多个已编程或可编程计算***(可以具有各种架构,诸如分布式、客户端/服务器、或网格式)上执行的一个或多个计算机程序中的过程,每个计算***包括至少一个处理器、至少一个数据存储***(包括易失性和/或非易失性存储器和/或存储元件)以及至少一个用户接口(用于使用至少一个输入设备或端口来接收输入,以及用于使用至少一个输出设备或端口来提供输出)。该软件可包括大型程序的一个或多个模块,例如,该大型程序提供与数据流图的设计、配置和执行相关的其它服务。该程序的模块(例如,数据流图的元件)可以被实施为数据结构或者符合在数据库中存储的数据模型的其它组织的数据。
虽然使用数据流图上述方法被视为正在被实施,但是应该注意到可以使用任何适当的编程语言来实施该方法。也就是说,方法并不限于在数据流图环境中使用。
在一些示例中,上述编译树包括额外类型的节点,以便处理标准中的特殊情形和异常。在一些示例中,编译树包括四种不同类型的特殊节点:根节点、矢量容器节点、空标签节点和仅扇出(fan-out-only)节点。根节点(上面提到的)表示编译树的起始状态。矢量容器节点(也是上面提到的)被用于处理编译树的循环。空标签节点用来表示无法识别的标签。空标签节点可以与例如存在扩展标记的符号的ASN.1标准联合使用,其中无法识别的标签被忽略。仅扇出节点用来表示与标签相关联的容器,但是它所有的子元素(即,成员)是可选的。也就是说,可以进入并且然后退出容器,而不执行任何数据操作。仅扇出节点可以例如与ASN.1标准联合使用,其中ASN.1标准包括必需的容器但是具有完全可选的内容。仅扇出节点被***作为容器内的节点,使得可以直接以容器的扇出为目标。
在一些示例中,ASN.1标准中的扩展标记需要特殊处理。考虑以下两个序列:
因为标签[1]可以是TopSeq中的被忽略标签,由于TopSeq中的扩展标记(即,‘...’),所以在BottomSeq中从str1到str2的转换是模糊的。为了处理这种情形,在模糊求解过程中,强制使从str1到str2的转换模糊,使得它也以TopSeq中的扩展标记(即‘....’)为目标。
该软件可以被提供在诸如CD-ROM或其他计算机可读介质之类的有形永久存储介质(例如可以被通用或专用计算机***或装置读取的介质)上,或者通过网络的通信介质递送(例如编码成传送信号)到执行该软件的计算机***的有形永久介质处。一些或全部处理可以在专用计算机上执行,或者使用诸如协处理器或现场可编程门阵列(FPGA)或专用集成电路(ASIC)之类的专用硬件来执行。该处理可以以分布方式实施,在该分布方式中,由该软件指定的不同的计算部分由不同的计算元件执行。每个这样的计算机程序被优选地存储在或下载到可由通用或专用可编程计算机读取的存储设备的计算机可读存储介质(例如,固态存储器或介质、或者磁或光介质),用于在计算机读取该存储介质或设备时配置和操作该计算机,以执行此处所描述的处理。也可以考虑将本发明的***实施为有形永久存储介质,其配置有计算机程序,其中,如此配置的存储介质使得计算机以特定和预定义的方式操作以执行此处所描述的一个或多个处理步骤。
已经对本发明的多个实施例进行了描述。然而,应当理解,前面的描述旨在说明而非约束本发明的范围,本发明的范围由以下权利要求书的范围来限定。因此,其它实施例也落在以下权利要求书的范围内。例如,在不脱离本发明的范围的情况下可进行各种修改。此外,上述的一些步骤可以是无顺序关联的,因此可以以不同于所述的顺序来执行。
Claims (21)
1.一种生成数据解析器的方法,所述数据解析器用于解析数据对象的输入流,所述方法包括:
接收表示限定以层级组织的多个对象的分层数据格式的信息,所述对象包括表示数据对象的一个或多个模式对象、以及每个与一个或多个模式对象相关联的一个或多个容器对象;以及
处理所接收到的信息以形成所述数据解析器,所述处理包括:
至少部分基于表示所述分层数据格式的所述信息,确定所述输入流中连续数据对象之间的容许转换;
将一个或多个数据操作与每个所确定的容许转换相关联;以及
存储规范,该规范用于将处理器配置为执行所述数据解析器以:(1)识别所述输入流中的第一数据对象与第二数据对象之间的转换,以及(2)至少部分基于与一个或多个之前所识别的转换相关联的背景来对所述第二数据对象内的数据值执行与所识别的转换相关联的数据操作。
2.根据权利要求1所述的方法,其中表示所述分层数据格式的所述信息包括表示所述分层数据格式的树,该树包括由多个边缘互连的多个节点,多个节点中的每个表示由所述分层数据格式限定的多个对象中的一个。
3.根据权利要求2所述的方法,其中与一个或多个之前所识别的转换相关联的所述背景对应于表示所述分层数据格式的所述树中的位置。
4.根据任一项前述权利要求所述的方法,其中所述模式对象中的至少一个包括由该模式对象表示的对应数据对象所包含的标签。
5.根据任一项前述权利要求所述的方法,其中所述容器对象包括至少一个容器对象表示下述至少一个:在所述输入流内所包含的数据对象的序列、在所述输入流内所包含的数据对象的集合、或者在多个可能数据对象中对所述输入流内所包含的一个数据对象的选择。
6.根据任一项前述权利要求所述的方法,其中至少一些容器对象被规定为表示所述输入流内数据对象的一系列多个容器。
7.根据任一项前述权利要求所述的方法,其中所述多个对象中的至少一些对象在所述分层数据格式中被指定为可选的。
8.根据任一项前述权利要求所述的方法,其中确定所述输入流中所述分层数据格式的所述对象之间的容许转换包括:
生成所述分层数据格式的编译树表示,所述编译树表示包括由多个边缘互连的多个节点,所述多个节点中的至少一些表示由所述分层数据格式限定的所述多个对象中的一个并且所述多个节点中的至少一些表示编译特定对象。
9.根据权利要求8所述的方法,其中表示编译特定对象的所述节点包括矢量容器节点、根节点、空标签节点、以及仅扇出节点中的一个或多个。
10.根据权利要求8或9所述的方法,其中确定所述输入流中所述分层数据格式的所述对象之间的容许转换包括处理所述编译树表示以确定所述编译树表示的所述节点之间的所有容许转换。
11.根据权利要求10所述的方法,其中处理所述编译树表示以确定所述编译树表示的所述节点之间的所有容许转换包括对于所述编译树表示的每个节点,确定到该节点具有转换的所有节点以及确定该节点到其具有至少一个转换的所有节点。
12.根据权利要求10或11所述的方法,其中处理所述编译树表示以确定所述编译树表示的所述节点之间的所有容许转换包括合并所述节点之间的重复转换以及消除所述节点之间的不完备转换。
13.根据权利要求10、11或12所述的方法,还包括为所识别的每个容许转换生成精细边缘,所述精细边缘包括与所述转换相关联的源节点、与所述转换相关联的目的节点、与所述转换相关联的容器节点、以及与所述转换相关联的循环行为。
14.根据权利要求13所述的方法,其中将一个或多个数据操作与每个所识别的转换相关联包括分析每个精细边缘以确定所述一个或多个数据操作。
15.根据任一项前述权利要求所述的方法,其中一个或多个数据操作包括推送至容器对象的范围的操作、弹出容器对象的范围的操作、以及读取数据对象的值的操作。
16.根据任一项前述权利要求所述的方法,其中确定所述输入流中所述分层数据格式的所述对象之间的容许转换包括生成输出包括下述至少一个:所述分层数据格式不包括任何模糊定义的指示、所述分层数据格式确定包括一个或多个模糊定义的指示、或者包含在所述分层数据格式中任何模糊定义的一个或多个可能求解。
17.根据任一项前述权利要求所述的方法,其中使用下述至少一个来指定表示所述分层数据格式的数据:ASN.1符号、XML符号、SWIFT符号、X12符号和HL7符号。
18.一个数据解析器,根据任一项前述权利要求所述的方法而生成。
19.一种生成数据解析器的***,所述数据解析器用于解析根据分层数据格式所格式化的输入流,所述***包括:
输入装置或端口,被配置为接收表示限定以层级组织的多个对象的分层数据格式的信息,所述对象包括表示数据对象的一个或多个模式对象、以及每个与一个或多个模式对象相关联的一个或多个容器对象;以及
至少一个处理器,被配置为处理所接收到的信息以形成所述数据解析器,所述处理包括:
至少部分基于表示所述分层数据格式的所述信息,确定所述输入流中连续数据对象之间的容许转换;
将一个或多个数据操作与每个所确定的容许转换相关联;以及
存储规范,该规范用于将处理器配置为执行所述数据解析器以:(1)识别所述输入流中的第一数据对象与第二数据对象之间的转换,以及(2)至少部分基于与一个或多个之前所识别的转换相关联的背景来对所述第二数据对象内的数据值执行与所识别的转换相关联的数据操作。
20.一种生成数据解析器的***,所述数据解析器用于解析根据分层数据格式所格式化的输入流,所述***包括:
用于接收表示限定以层级组织的多个对象的分层数据格式的信息的装置,所述对象包括表示数据对象的一个或多个模式对象、以及每个与一个或多个模式对象相关联的一个或多个容器对象;以及
用于处理所接收到的信息以形成所述数据解析器的装置,所述处理包括:
至少部分基于表示所述分层数据格式的所述信息,确定所述输入流中连续数据对象之间的容许转换;
将一个或多个数据操作与每个所确定的容许转换相关联;以及
存储规范,该规范用于将处理器配置为执行所述数据解析器以:(1)识别所述输入流中的第一数据对象与第二数据对象之间的转换,以及(2)至少部分基于与一个或多个之前所识别的转换相关联的背景来对所述第二数据对象内的数据值执行与所识别的转换相关联的数据操作。
21.一种存储在计算机可读介质上的软件,用于生成数据解析器,所述数据解析器用于解析数据对象的输入流,所述软件包括指令用于使得计算***执行:
接收表示限定以层级组织的多个对象的分层数据格式的信息,所述对象包括表示数据对象的一个或多个模式对象、以及每个与一个或多个模式对象相关联的一个或多个容器对象;以及
处理所接收到的信息以形成所述数据解析器,所述处理包括:
至少部分基于表示所述分层数据格式的所述信息,确定所述输入流中连续数据对象之间的容许转换;
将一个或多个数据操作与每个所确定的容许转换相关联;以及
存储规范,该规范用于将处理器配置为执行所述数据解析器以:(1)识别所述输入流中的第一数据对象与第二数据对象之间的转换,以及(2)至少部分基于与一个或多个之前所识别的转换相关联的背景来对所述第二数据对象内的数据值执行与所识别的转换相关联的数据操作。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361845722P | 2013-07-12 | 2013-07-12 | |
US61/845,722 | 2013-07-12 | ||
US14/087,158 US9588956B2 (en) | 2013-07-12 | 2013-11-22 | Parser generation |
US14/087,158 | 2013-11-22 | ||
PCT/US2014/044790 WO2015006075A1 (en) | 2013-07-12 | 2014-06-30 | Parser generation |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105531672A true CN105531672A (zh) | 2016-04-27 |
CN105531672B CN105531672B (zh) | 2019-02-22 |
Family
ID=52278007
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480050603.0A Active CN105531672B (zh) | 2013-07-12 | 2014-06-30 | 解析器生成 |
Country Status (9)
Country | Link |
---|---|
US (1) | US9588956B2 (zh) |
EP (1) | EP3019954B1 (zh) |
JP (1) | JP6377739B2 (zh) |
KR (1) | KR102294522B1 (zh) |
CN (1) | CN105531672B (zh) |
AU (1) | AU2014287654B2 (zh) |
CA (1) | CA2917824C (zh) |
HK (1) | HK1224051A1 (zh) |
WO (1) | WO2015006075A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107947897A (zh) * | 2017-10-27 | 2018-04-20 | 深圳市创梦天地科技股份有限公司 | 用于网络传输的信息编码方法和装置 |
CN108132999A (zh) * | 2017-12-21 | 2018-06-08 | 恒宝股份有限公司 | 一种元素名的处理方法及*** |
TWI658409B (zh) * | 2017-06-02 | 2019-05-01 | 日商三菱電機股份有限公司 | Program code generating device and program code generating program product |
CN111984305A (zh) * | 2020-08-21 | 2020-11-24 | 腾讯科技(上海)有限公司 | 一种应用配置方法及装置、计算机设备 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150201045A1 (en) * | 2014-01-13 | 2015-07-16 | Transcirrus | Automatic connection of nodes to a cloud cluster |
US10073682B1 (en) * | 2016-03-22 | 2018-09-11 | EMC IP Holding Company LLC | Method and mechanism for optimal scope evaluation in scope based hierarchical configuration using evaluated scope propagation technique |
US10725750B2 (en) * | 2016-12-01 | 2020-07-28 | Red Hat, Inc. | Compiler integrated intelligent deserialization framework |
US10665008B2 (en) * | 2018-05-31 | 2020-05-26 | Microsoft Technology Licensing, Llc | Hybrid traversal of object sets |
US10901969B2 (en) * | 2018-08-14 | 2021-01-26 | Development Guild DDI, Inc. | System and method for facilitating an objective-oriented data structure and an objective via the data structure |
WO2021091550A1 (en) * | 2019-11-06 | 2021-05-14 | Google Llc | Method and apparatus for smart and extensible schema matching framework |
US20220138206A1 (en) * | 2020-10-30 | 2022-05-05 | Snowflake Inc. | System for implementing an object tagging framework |
US20240070163A1 (en) * | 2022-08-23 | 2024-02-29 | Ab Initio Technology Llc | Operationalizing metadata |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040172591A1 (en) * | 2003-02-28 | 2004-09-02 | Microsoft Corporation | Method and system for inferring a schema from a hierarchical data structure for use in a spreadsheet |
US20070113221A1 (en) * | 2005-08-30 | 2007-05-17 | Erxiang Liu | XML compiler that generates an application specific XML parser at runtime and consumes multiple schemas |
US20080046847A1 (en) * | 2006-08-19 | 2008-02-21 | Dae Hyung Cho | Method for improving yield of a layout and recording medium having the layout |
US7509654B2 (en) * | 2005-09-29 | 2009-03-24 | Avaya Inc. | Data-driven and plug-in defined event engine |
CN102880492A (zh) * | 2012-09-24 | 2013-01-16 | 广东华大集成技术有限责任公司 | 一种基于as的xml脚本解析器及其方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7103749B2 (en) * | 2002-02-01 | 2006-09-05 | John Fairweather | System and method for managing memory |
WO2006081428A2 (en) * | 2005-01-27 | 2006-08-03 | Symyx Technologies, Inc. | Parser for generating structure data |
US20060212859A1 (en) * | 2005-03-18 | 2006-09-21 | Microsoft Corporation | System and method for generating XML-based language parser and writer |
EP1872557B1 (en) * | 2005-04-20 | 2010-06-02 | International Business Machines Corporation | Apparatus and method for pattern detection |
US20080046874A1 (en) | 2006-08-21 | 2008-02-21 | International Business Machines Corporation | Data reporting application programming interfaces in an xml parser generator for xml validation and deserialization |
JP2009054125A (ja) * | 2007-08-27 | 2009-03-12 | Daisuke Kamiyama | 文書情報表示システム |
CN101884024B (zh) | 2007-09-20 | 2016-03-30 | 起元技术有限责任公司 | 在基于图的计算中管理数据流 |
US8504984B1 (en) * | 2009-05-29 | 2013-08-06 | Google Inc. | Modifying grammars to correct programming language statements |
WO2011060257A1 (en) | 2009-11-13 | 2011-05-19 | Ab Initio Technology Llc | Managing record format information |
US8429605B2 (en) * | 2009-12-30 | 2013-04-23 | The United States Of America As Represented By The Secretary Of The Navy | Finite state machine architecture for software development |
-
2013
- 2013-11-22 US US14/087,158 patent/US9588956B2/en active Active
-
2014
- 2014-06-30 CN CN201480050603.0A patent/CN105531672B/zh active Active
- 2014-06-30 AU AU2014287654A patent/AU2014287654B2/en active Active
- 2014-06-30 KR KR1020167003516A patent/KR102294522B1/ko active IP Right Grant
- 2014-06-30 JP JP2016525371A patent/JP6377739B2/ja active Active
- 2014-06-30 WO PCT/US2014/044790 patent/WO2015006075A1/en active Application Filing
- 2014-06-30 CA CA2917824A patent/CA2917824C/en active Active
- 2014-06-30 EP EP14744690.0A patent/EP3019954B1/en active Active
-
2016
- 2016-10-25 HK HK16112230.7A patent/HK1224051A1/zh unknown
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040172591A1 (en) * | 2003-02-28 | 2004-09-02 | Microsoft Corporation | Method and system for inferring a schema from a hierarchical data structure for use in a spreadsheet |
US20070113221A1 (en) * | 2005-08-30 | 2007-05-17 | Erxiang Liu | XML compiler that generates an application specific XML parser at runtime and consumes multiple schemas |
US7509654B2 (en) * | 2005-09-29 | 2009-03-24 | Avaya Inc. | Data-driven and plug-in defined event engine |
US20080046847A1 (en) * | 2006-08-19 | 2008-02-21 | Dae Hyung Cho | Method for improving yield of a layout and recording medium having the layout |
CN102880492A (zh) * | 2012-09-24 | 2013-01-16 | 广东华大集成技术有限责任公司 | 一种基于as的xml脚本解析器及其方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI658409B (zh) * | 2017-06-02 | 2019-05-01 | 日商三菱電機股份有限公司 | Program code generating device and program code generating program product |
US11137988B2 (en) | 2017-06-02 | 2021-10-05 | Mitsubishi Electric Corporation | Program code generation device and computer readable medium |
CN107947897A (zh) * | 2017-10-27 | 2018-04-20 | 深圳市创梦天地科技股份有限公司 | 用于网络传输的信息编码方法和装置 |
CN108132999A (zh) * | 2017-12-21 | 2018-06-08 | 恒宝股份有限公司 | 一种元素名的处理方法及*** |
CN111984305A (zh) * | 2020-08-21 | 2020-11-24 | 腾讯科技(上海)有限公司 | 一种应用配置方法及装置、计算机设备 |
CN111984305B (zh) * | 2020-08-21 | 2023-08-08 | 腾讯科技(上海)有限公司 | 一种应用配置方法及装置、计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
HK1224051A1 (zh) | 2017-08-11 |
EP3019954A1 (en) | 2016-05-18 |
WO2015006075A1 (en) | 2015-01-15 |
AU2014287654B2 (en) | 2019-06-13 |
EP3019954B1 (en) | 2020-10-07 |
JP2016526744A (ja) | 2016-09-05 |
CA2917824C (en) | 2021-10-19 |
JP6377739B2 (ja) | 2018-08-22 |
KR102294522B1 (ko) | 2021-08-26 |
US9588956B2 (en) | 2017-03-07 |
CA2917824A1 (en) | 2015-01-15 |
US20150019576A1 (en) | 2015-01-15 |
CN105531672B (zh) | 2019-02-22 |
KR20160031519A (ko) | 2016-03-22 |
AU2014287654A1 (en) | 2016-02-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105531672A (zh) | 解析器生成 | |
CN107273117B (zh) | 一种编程友好型的敏捷代码自动生成*** | |
CN107291450B (zh) | 一种编程友好型的敏捷代码自动生成方法 | |
Hegedüs et al. | A model-driven framework for guided design space exploration | |
Cánovas Izquierdo et al. | Discovering implicit schemas in JSON data | |
CN100520716C (zh) | 一种基于模型组件的代码自动生成装置、***及方法 | |
Rivera et al. | Formal specification and analysis of domain specific models using Maude | |
Habermehl et al. | Forest automata for verification of heap manipulation | |
Bouajjani et al. | Abstract regular (tree) model checking | |
Bergmann | Translating OCL to graph patterns | |
Nalepa et al. | UML representation for rule-based application models with XTT2-based business rules | |
Le et al. | Validating consistency between a feature model and its implementation | |
CN105446952B (zh) | 用于处理语义片段的方法和*** | |
Almendros-Jiménez et al. | Fuzzy xpath for the automatic search of fuzzy formulae models | |
US11025526B2 (en) | Control of event-driven software applications | |
Matos et al. | Migrating legacy systems to service-oriented architectures | |
Syriani et al. | Matters of model transformation | |
Jaber et al. | Synthesis of distributed agreement-based systems with efficiently-decidable verification | |
Liu et al. | MVDLite: A Light-weight Representation of Model View Definition with Fast Validation for BIM Applications | |
Hartmanns et al. | Fast Verified SCCs for Probabilistic Model Checking | |
Cassol et al. | A methodology to infer and refactor an object‐oriented model from C applications | |
Rafe et al. | Towards automated software model checking using graph transformation systems and Bogor | |
Spelten | Rewriting Systems over Unranked Trees | |
Bergmann | Translating OCL to Graph Patterns Extended Version | |
Zhang et al. | Controllability for discrete event systems modelled in VeriJ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1224051 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |