解析器生成的制作方法_3

文档序号:9769170阅读:来源:国知局
4)和T(c5)模式对象的标签-值对的一个或多个组合(即,循环行为是允许的)。在接收到S(c4)和T(c5)模式对象的标签-值对的一个或多个组合之后,从输入流接收U(a6)模式对象的标签-值对。在接收到U(a6)模 式对象的标签-值对之后,已经接收到整个记录并且记录结束。接收到的任何后续标签-值 对作为下一个记录的一部分。 巧060] 2解析器生成
[0061] 参照图5A,图I的解析器生成模块106的一个示例被配置为接收目标数据格式105 作为输入并且将目标数据格式105处理为编译解析器程序418,编译解析器程序418可W验 证和解析具有分层标签-值结构的任何目标数据格式而几乎没有或者没有数据的预处理。 为了运样做,解析器生成模块106通过分层数据格式确定"全局路由(global routing)",该 分层数据格式包括识别分层目标数据格式的元素之间的一些或全部容许转换。解析器生成 模块106包括数据格式映射模块420、转换分析模块424W及程序生成模块430。
[0062] 参照图5B,在一些实施方式中,在执行环境104中执行的数据格式处理器500预处 理目标数据格式105W形成处理数据格式信息502,它表示目标数据格式105。该处理数据格 式信息502准备解析器生成模块106用于生成解析器程序418,解析器程序418被配置为当由 执行模块112执行程序418时将数据流504解析为特别的输出记录格式506。所W,数据格式 信息502也包括输出记录格式506的限定。多种技术中的任意一种(包括使用编译程序的编 译程序(例如yacc或Bison),其接受数据格式105符合的标准(例如,ASN.1)的语法)可W被 用于将数据格式处理器500配置为预处理上述目标数据格式105,并且输出格式解析器,数 据格式处理器将使用该格式解析器来根据目标数据格式105产生上述处理数据格式信息 502。
[0063] W下是根据上述ASN.1注释中的目标数据格式205示例产生的W数据操作语言 (DML)指定的处理数据格式信息502的示例(被保存在命名为"example .asnl"的文件中)。 constant int ASNl_UNKNOWN = -I; constant hit ASN 1_SFX)UENCE = 0; con沈int int ASNI-SET 二 I; COiKtant int ASNI-CHOICE =芝; constant unsigned int ASN 1_TYPE J^ONE = 10; comtant unsigned int ASN ]_TYPE_BOOLEAN = n; comtant unsigned int ASN ]_TYPE_INTEGE民=12;
[0064] - - eonstant unsigned int ASN1_TYPE_ENUMERATED = 13; constant unsigned int ASN 1_TY1)E_REAL = 14; constant unsigned int/\SN l_TYPE_OID = 15; const処 t unsig 打 ed int ASNl._TYPE_ROID = 16: constant unsigned int/\SN 1_TYPE_B1T_STRING = 17: cons化nt unsigned ht ASN l_TYl)E_OCTF/r_STRiNG = 18; C孤St 孤 timsig 打 ed i打 t ASN1_TYPE_NUIX。19;
[0065] type asnl_descriptor_t = record unsigned inL[ii.u] Lags; 'unsi呂ned int[int] elem_tags:'=NULL; 'imsig打货 d inr type-畑:做出凸呂=AS 飢-TYPE-NONE; unsigned int Iineiio = 0; unsigned int SpliT - 0; 'unsigned hu exl_ensible_b居妃巧'二 0; unsigne过 int exl忠 nsib1e_aAer= 0; end; type as打 1_ type_descnpl:or_t - 'record int rec_type; int fil€_id; Esn' I _de 涨 ri'pto'r_t 拉曼-info; end; let string(int, charset='x-'ab-.iiitemar 乂 in 巧 g_file打狂 mes = [vector ".?化 xample.asnl"'];' // MOD type MOD-TagP 二 iiitege 雌大 U pc MOD_Tag〇- inleger{8); 皆p:e MQD-Ta径R = ascii《trin;g(iijteg既(4)); type MOD_TagS = integer(8); type MDD_TagT = mteger(8);
[0066] type MOD-C = record MOD-Tags c4; MOD-TagT c5; asn I _t ype_descriptor_t ASN_type-descrip^^) = [巧说对 rec_type ASN1_SET 巧IeJd O tag_in仿恤nl_desc'riptor_t) [record tags [vec的r 6S] Hneno 22化 a站il-d.escripl'or-t^iTt] ASN_.fleld_descri|)i:o:rs() = [vector '(asnl-descn 口 oi'_t) [record 巧谷5 [vector 332] type_encodmg ASNl-TYPE-INTEGE民 Hneno 社], (asn I _dcscriptor_t) [record tags [vector 336] typc_cncoding ASN1_TYPE_INTEGER Hneno 24]]; end; type MOD-B = record: int choiceld ~ -I; il'(choicdd 二0) MOD TagR W; if (choiceld == I) MOD C [inieger(4)] c; asn I _type_descriptor_t ASN_t.ype_descripk)r〇 = [慌cord rec_type ASNl_CHOICEfile_idOt'agJnlb(asnl_descripwr_t)[ie(0idt;ags[vector] I山封10' I翊; asn I _dcscriptor_t[int] ASN_tlcld_dcscriptors() = [vector ''(asn I-descriptorj;) [!'ecord tags [vector 328] type_encoding ASNl_TYPE_OCTET_STRINGliiwnol6]. '(as打l_descrip'tor_t) [record tags [vector 械]Ii打ena 1,8:]];' end;
[0067] type MQD_TagU = m 化ger(8); type MOD-八-record MOD 一 TagPal =NULL; MOD TagQ a2; MOD_B b = NULL([record choiceld (int) -1]); MOD TagU a6; 'asnl._type_descripl;or_t ASN_type_deSGfiptor() = [record 'r 说-type ASNl-SEQUENC巨。lc_id O iag_info (asnl_dcscriptor_t) [record 化gs [vector 64] Imeno 7]]; asnl-descrip怕i'_t[int] ASN._tlel.:d._descripl:ors。…[vedor (asnl_descripl:or-t) [record tags [vector 320] type_eiiC〇ding ASN1_TYPEJNTEGER Iincno 7], (a's'n I ._descripl:or_.t) [record tags [vector 324] rype_ encoding ASNl-TYPEJNTHGHR linen曰 8], '(a紙l_descripl;or-t) [record tags [vector] I虹孤O 刘', 知谢1 一descriptor-t) [record 化 gs [vector 340] typc_cncoding ASNI TYPE-INTEGER Iin州O 11]]: end; type DML_ASNl_decode_t = MOD_A;
[0068] 在一些实施方式中,解析器生成模块106和执行模块112可W是用于根据所提供的 数据格式来解析数据的共同处理模块或系统的组件。例如,在单个数据流图表或者数据流 图表的单个组件中,可W利用处理数据格式信息502和输入流504作为到数据流图表的输入 来执行两个模块的功能。在一些实施方式中,取代提供可执行解析器程序418,解析器生成 模块106可W提供解析器作为数据结构,例如,W有效地存储执行解析所需的转换和背景信 息的表示,诸如编译树表示的精细边缘的枚举列表,如下更详细所描述的。
[0069] 2.1数据格式映射
[0070] 数据格式105被首先提供给数据格式映射模块420,数据格式映射模块420将数据 格式105映射到解析器生成模块106的后续模块可用的内部"目标"数据格式。在一些示例 中,数据格式105是标准格式映射文件(例如,ASN. 1、SWIFT或Xl2映射文件)并且内部目标数 据包括数据格式105的范围树表示。
[0071 ] 2.1.1数据格式映射示例
[0072] 参照图6,图2的示例性数据格式205的范围树表示600明确地表示数据格式中存在 的不同范围。范围树表示600不包括容器对象类型或标签信息。容器类型和标签信息被代替 包括在编译树中(或者更一般地,有向非循环图(DAG)),其中,标签和容器类型信息被存储 为编译节点的属性。当编译树被遍历时,使用属性来创建边缘。下面将进一步详细描述编译 树。
[0073] 在一些示例中,由范围树表示600的范围660所包含的每个模式对象与空程序表 (未示出)相关联。解析器编译过程中的随后步骤利用与范围和模式对象相关联的"程序"来 填充表并且可W包括一个或多个解析命令,运将在下文更详细地描述。
[0074] 2.2转换分析
[0075] 数据格式的范围树表示从数据格式映射模块420传递到转换分析模块424,其中转 换分析模块424静态地分析数据格式的范围树表示W基于输入流中数据对象内的结构信息 (例如,标签)来枚举输入流内数据对象之间的容许转换。基于此枚举,利用程序来填充上述 程序表。为了枚举容许转换,转换分析模块424利用W下事实(如图3所示),即诸如X12、 SWIFT、化7等许多数据标准可W被表示为具有模式对象的树,表示数据对象的叶呈标签-值 对的形式,其中,在输入流中存在一个标签可W要求或可W不要求输入流(W及由标签识别 的相关联数据值)中存在另一个标签或标签集合。
[0076] 2.21转换分析示例
[OOW]参照图7,转换分析模块424首先形成范围树表示的编译树表示700。如上所示
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1