文本编码类协议通用解析器的制作方法

文档序号:7610908阅读:274来源:国知局
专利名称:文本编码类协议通用解析器的制作方法
技术领域
本发明涉及网络通信技术领域,尤其涉及一种文本编码类协议通用解析器。
背景技术
Internet工程任务组(IETF,Internet Engineering Task Force)组织使用ABNF定义了多个协议中的报文格式,例如会话起始协议(SIP,SessionInitiation Protocol)等。在实现这些协议时,需要按照扩展巴克斯范式(ABNF,Augmented BNF)规则对报文进行分析和模式。
ABNF是IETF组织在RFC2234中定义的一个字符串模式匹配的文法定义。ABNF是在巴克斯范式(BNF)基础上的扩展,其与标准巴克斯范式的区别包括命名规则,循环,选择,次序独立以及值域。
目前,常见的ABNF解析器的实现方案为在通用微处理器上,使用软件来实现编译原理领域内的词法和语法解析算法。例如,常见的LL(1)文法解析算法,该算法是一种自上而下的非递归预测分析器,它通过计算文法的首终结符集合(First集合)和后继终结符集合(Follow集合)从而构造出该文法的预测分析表,进而利用分析表进行推导。LL(1)文法是无二义的文法,且不含左递归。LL(1)中的第一个“L”表示从左到右地扫描输入串;第二个“L”表示产生最左推导;1代表在决定分析器的每步动作时向前看一个输入符号。
由于ABNF是基于文本定义的语法,所以在对变长的字符串解析时,其复杂度高于基于二进制的定长数据解析。上述方案的优点在于解析器开发代价小,开发效率高。但是,由于通用处理器并不是专门针对ABNF解析进行设计的,因而其处理速度、吞吐量等性能参数往往受限。当需要高速处理能力时,例如,SIP软交换系统需要处理百万量级的连接,则为了达到性能要求需要采用更高级别的微处理器,这样,必然提高解析器产品的成本。
目前,采用的另一种ABNF解析方案是也是在通用微处理器上,针对特定领域内ABNF语法规则的特点设计特定的软件来进行处理。以SIP协议栈为例,常见的实现方式是根据SIP文法规则的特点,通过分割符将SIP报文分割为若干字段,再进行相应的语法规则检查。
在这一方案中针对特定语法规则进行设计,在效率上优于前面描述的技术方案。但是由于其针对特定规则进行处理,导致其通用性较差,针对新的语法规则必须重新进行设计,从而提高了解析器开发成本,导致开发效率较低。另一方面,由于其仍然是基于通用微处理器进行的,在需要高速处理能力的情况下仍然会存在前面描述的第一种方案所存在的问题。

发明内容
鉴于上述现有技术所存在的问题,本发明的目的是提供一种文本编码类协议通用解析器,提高解析器的解析效率,并使解析器具有良好的通用性。
本发明的目的是通过以下技术方案实现的本发明提供了一种文本编码类协议通用解析器,该解析器包括规则存储模块、待解析消息存储模块和消息解析模块,消息解析模块根据规则存储模块中保存的规则信息对待解析消息存储模块中的消息文本进行解析处理,所述的消息解析模块为采用逻辑芯片实现。
所述的逻辑芯片包括现场可编程逻辑门列阵FPGA或复杂可编程逻辑器件CPLD。
所述的规则存储模块为规则树存储模块,规则树存储模块中保存有基于扩展巴克斯范式ABNF方法定义的规则生成的规则树。
所述的规则树为不包含增式选择、序列组及可选序列结构的规则树,且所述的规则树为以各规则中的一个规则为顶点,采用递归的方式生成的规则树。
所述的消息解析模块进一步包括主进程处理部分用于根据栈顶节点的类型控制分别进入解析终结符部分、匹配首终结符部分或匹配后继终结符部分的处理过程;解析终结符部分用于当栈顶结点为终结节点时,由主进程处理部分控制启动,并进行终结节点的终结符的解析处理,解析完成后通知主进程处理部分;匹配首终结符部分用于对当栈顶结点为非终结点时,且为首终结符集合时,由主进程处理部分控制启动,并进行首终结符的匹配处理,判断当前字符是否在节点首终结符集合内,匹配完成后通知主进程处理部分;匹配后继终结符部分用于对当栈顶结点为非终结点时,且为后继终结符集合时,由主进程处理部分控制启动,并进行后继终结符的匹配处理,判断当前字符是否在节点后继终结符集合内,匹配完成后通知主进程处理部分。
所述的消息解析模块采用状态机实现。
所述的主进程处理部分对应的状态机包括循环解析PARSE_LOOP状态,在该状态下进行消息报文的解析;到达最大重复次数REPEAT_MAX状态,在该状态下判断保存首规则树节点的节点栈的栈顶节点的类型是否为终结节点;匹配终结符TERM_MATCH状态,在该状态下进行终结符的匹配处理张,并启动解析终结符部分;
进入首终结符集合判断IN_FIRST状态,在该状态下进行首终结符集合的判断处理,并在确定存在首终结符集合时,启动匹配首终结符部分;所有的子节点已经处理ALLSUB状态,当IN_FIRST状态下所有的子节点处理完成时进入该状态,且在该状态下返回PARSE_LOOP状态;后继终结符集判断JUDGE_FOLLOW状态,在该状态下进行后继终结符集合的判断处理,并在确定存在后继终结符集合时,进入FOLLOW集合判断IN_FOLLOW状态,启动匹配后继终结符部分,如果不存在后继终结符集合时进入下一规则NEXTRULE状态,并返回PARSE_LOOP状态的。
所述的解析终结符部分的状态机包括字符串类型终结符TERM_STRING状态,在该状态下对单个字符串循环进行单个字符的匹配处理;字符编码连接类型终结符TERM_CODE_LIST状态,在该状态下对字符编码连接循环进行单个字符的匹配处理;终结符匹配成功TERM_SUCCESS状态和终结符匹配失败TERM_FAIL状态,在该状态下通知主进程处理部分匹配处理结果。
所述的匹配首终结符部分的状态机包括列表循环处理UST_LOOP状态,在该状态下判断编码类型为字符串字符编码连接;字符串类型FIRST_STRING状态,在该状态下对单个字符串循环进行单个字符的匹配处理;字符编码连接类型终结符FIRST_CODE_UST状态,在该状态下对字符编码连接循环进行单个字符的匹配处理;首终结符集合匹配成功FIRST_SUCCESS状态和首终结符集合匹配失败FIRST_FAIL状态,在该状态下通知主进程处理部分匹配处理结果。
所述的匹配后继终结符部分包括
列表循环处理LIST_LOOP状态,在该状态下判断编码类型为字符串 字符编码连接;字符串类型FOLLOW_STRING状态,在该状态下对单个字符串循环进行单个字符的匹配处理;字符编码连接类型FOLLOW_CODE_LIST状态,在该状态下对字符编码连接循环进行单个字符的匹配处理;后继终结符匹配成功FOLLOW_SUCCESS状态和后继终结符匹配失败FOLLOW_FAIL状态,在该状态下通知主进程处理部分匹配处理结果。
由上述本发明提供的技术方案可以看出,本发明提供的基于FPGA硬件实现的通用ABNF文法解析与软件实现方式相比,解析效率大为提高,有利于提高产品效率,降低成本。同时,本发明为基于ABNF规则进行解析,使得本发明具有良好的通用性,可以适用于各种基于ABNF进行规则定义的场合,例如,对SIP协议栈、XML(可扩展标记语言)的处理等等;因此,本发明极大地降低了相应的解析器的开发成本,提高了开发效率。


图1为本发明所述的解析器的结构示意图;图2为本发明所述的消息解析模块的实现原理图;图3为图2中的主进程的状态机模型;图4为图2中的解析终结符进程的状态机模型;图5为图2中的匹配首终结符进程的状态机模型;图6为图2中的匹配后继终结符进程的状态机模型。
具体实施例方式
本发明的核心是基于FPGA(可编程逻辑芯片)实现的硬件ABNF解析器,所述硬件ABNF解析器可以在保证通用性的前提下,通过硬件优化提高解析器的解码效率。
本发明是在LL(1)算法的基础上,提出一种FPGA实现的通用ABNF硬件解析器,可以对输入字符串依据ABNF规则进行解析。
本发明所述的基于FPGA实现的通用ABNF硬件解析器,其功能结构如图1所示,根据代表ABNF规则的规则树信息(即未赋值的规则树),对需要处理的字符串消息进行解析,结果为已经赋值的规则树。
本发明所述的文本编码类协议通用解析器主要包括规则树存储模块、待解析消息存储模块和消息解析模块组成,其中所述的规则树存储模块用于存储规则树数据,规则树节点通常需要按顺序存储,一次可以读入整个规则节点;所述的待解析消息存储模块用于存放待解析的消息文本,通常可以以字节形式顺序存放;所述的消息解析模块用于根据规则树信息对待解析的消息文件进行解码处理,以获得消息文件的解析处理结果。
本发明中主要涉及规则树的生成过程和消息解析模块的硬件实现方式,下面将分别对两个主要方面进行说明。
本发明中,所述的规则树信息可以按如下方式从ABNF规则文本生成(1)对ABNF规则进行展平处理,即将各规则进行简化描述,使得其不包含增式选择、序列组和可选序列等复杂结构,具体可以将简化描述后的规则保存于规则表中,每个表项对应一个简化处理后的新的规则,相应的处理步骤如下所述对于每个规则,在规则表(如哈希表)中添加一条规则表项;对于包含增式选择的规则,将规则添加的选择内容加入到原规则中,更新原规则表的表项;
对于包含序列组的规则,将序列组内容定义为新规则,并用新规则替换原规则的序列组内容,重复此过程,直到新规则不包含序列组为止;对于包含可选序列的规则,将可选序列内容定义为新规则,并用新规则替换原规则的可选序列内容,重复此过程,直到新规则不包含序列组为止;(2)基于所述的规则表生成相应的规则树,具体为指定规则表中的某一规则为顶点,并以此为根节点递归生成对应的规则树;(3)使用LL(1)解析算法中First集合和Follow集合的生成方法,对每个规则树节点计算其相应的First集合和Follow集合。
本发明中,所述的消息解析模块为核心处理部分,下面将对所述的消息解析模块的具体实现方式进行详细说明。
所述的消息解析模块主要包括四个进程,分别由四个状态机实现。其中主进程main控制其它三个子进程,其它三个子进程包括parse_term(解析终结符)进程、match_first_proc(匹配first过程)和match_follow_proc(匹配follow过程),各进程关系如图2所示,由主进程在处理过程中控制其他三个进程的启动,并实现相应的功能;主进程判断符合启动相应的子进程的条件时,则迁移到相应的状态,向相应的子进程发送信号启动对应的子进程进行相应的处理,各子进程处理完成后需要将结果返回主进程,并由主进程输出成功或失败的解析结果信号。
下面将分别对各个进程的状态机包括的状态及具体处理过程进行说明。
(1)主进程main,即主进程处理部分主进程main作为主控进程,由时钟上升沿驱动,包含以下状态IDLE(空闲),INIT(初始化),PARSE_LOOP(循环解析),REPEAT_MAX(到达最大重复次数),TERM_MATCH(匹配终结符),IN_FIRST(进行FIRST集合判断),FIRSTSUB(第一个子节点),ALLSUB(所有的子节点已经处理),CHOOSESUB(选择子节点),NEXTSUB0(下一个子节点0),NEXTSUB1(下一个子节点1),GETSUB(取子节点),JUDGE_FOLLOW(FOLLOW集判断),IN_FOLLOW(进入FOLLOW集合判断),NEXTRULE(下一规则),END_PARSE(解析结束);其进程状态机模型如附图3所示,相应的状态迁移处理过程为当检测到上升沿信号时,状态机由IDLE状态进入PARSE_LOOP状态,开始消息报文的解析;状态机在REPEAT_MAX状态判断节点栈的栈顶节点的类型,所述的节点栈是在主进程实现时的一个节点栈,保存的内容是规则树的节点,用于跟踪当前基于相应的规则树的解析进度情况,并根据栈顶节点的类型确定进入相应的子进程进行处理,参照图2所示,具体如下如果是终结节点,则将终结符匹配信号match_term代入高电平,启动parse_term进程,等待终结符匹配结果match_term_result信号出现高电平后进入状态TERM_MATCH,并将信号match_term代入低电平以中止parse_term进程,状态机返回PARSE_LOOP状态;如果栈顶节点是非终结节点,则将信号match_first代入高电平,启动match_first_proc进程,具体的处理过程为若match_first_success信号出现高电平,表示当前待解析字符在节点的first集合中,状态机进入状态FIRST_SUB,并把信号match_first代入低电平以中止match_first_proc进程,此时状态机选取正确的子节点压入栈中并返回PARSE_LOOP状态;若match_first_fail信号出现高电平,表示当前待解析字符不在节点的first集合中,状态机进入状态JUDGE_FOLLOW状态,在此状态下,信号match_follow被代入高电平,启动match_follow_proc进程,等待matcn_follow_success信号或者match_follow_fail信号以判断能否进行下一节点的匹配,并返回PARSE_LOOP状态。
(2)子进程parse_term,即解析终结符进程子进程parse_term为时钟上升沿驱动,用于完成终结节点的匹配,其对应的状态包括IDLE,START(启动),TERM_STRING(字符串类型终结符),TERM_CODE_LIST(字符编码连接类型终结符),TERM_SUCCESS(终结符匹配成功),TERM_FAIL(终结符匹配失败);其进程状态机模型如附图4所示,当match_term信号被主进程代入高电平,状态机由IDLE状态进入START状态,在此状态下状态机判断编码类型,以根据不同的编码类型进入不同的状态进行处理如果是字符串,则进入TERM_STRING状态,循环匹配单个字符,那当然,如果字符串仅包含单个字符编码或者单个字符的range编码,则直接判断是否匹配即可;如果是字符编码连接,则进入TERM_CODE_LIST状态,循环进行单个字符的匹配;最后,便可以根据匹配结果选择进入状态TERM_SUCCESS或者TERM_FAIL,将term_match_result代入高电平通知主状态机;当主状态机将math_term置为低电平,则parse_term状态机回到IDLE状态,清除term_match_result信号等待下一次匹配。
(3)子进程match_first_proc,即匹配首终结符进程进程match_first_proc为时钟上升沿驱动,用于比较当前字符是否存在于节点first集合中,相应的状态包括IDLE,LIST_LOOP(列表循环处理),FIRST_STRING(字符串类型),FIRST_CODE_LIST(字符编码连接类型),FIRST_SUCCESS(FIRST集合匹配成功),FIRST_FAIL(FIRST集合匹配失败);其进程状态机模型如附图5所示,相应的状态迁移处理过程为
当match_first信号被主进程代入高电平,状态机由IDLE状态进入LIST_LOOP状态,在此状态下状态机判断编码类型,并根据编码类型采用相应的处理如果是字符串,则进入FIRST_STRING状态,循环匹配单个字符;如果是单个字符编码或者单个字符的range(有效范围)编码,则直接判断是否匹配;如果是字符编码连接,则进入FIRST_CODE_LIST状态,循环匹配单个字符;最后,根据匹配结果选择进入状态FIRST_SUCCESS或者回到LIST_LOOP匹配下一个列表内容,直到发现匹配的first集合元素或者到达列表尾部;如果没有发现匹配的first元素,则状态机进入FIRST_FAIL状态;状态机在FIRST_SUCCESS和FIRST_FAIL分别把first_match_success和first_match_fail代入高电平通知主状态机;当主状态机将match_first置为低电平,则match_first_proc状态机回到IDLE状态,清除match_first_success或match_first_fail信号,并等待下一次匹配。
(4)子进程match_follow_proc,即匹配后继终结符处理进程进程match_follow_proc时钟上升沿驱动,用于比较当前字符是否存在于节点follow集合中,相应的状态包括IDLE,LIST_LOOP(列表循环处理),FOLLOW_STRING(字符串类型),FOLLOW_CODE_LIST(字符编码连接类型),FOLLOW_SUCCESS(FOLLOW匹配成功),FOLLOW_FAIL(FOLLOW匹配失败);其进程状态机模型如附图6所示,相应的状态迁移处理过程为
当match_follow信号被主进程代入高电平,状态机由IDLE状态进入LIST_LOOP状态,在此状态下状态机判断编码类型,同样需要根据编码类型进行不同的处理如果是字符串,则进入FOLLOW_STRING状态,循环匹配单个字符;如果是单个字符编码或者单个字符的range编码,则直接判断是否匹配;如果是字符编码连接,则进入FOLLOW_CODE_LIST状态,循环匹配单个字符;最后,根据匹配结果选择进入状态FOLLOW_SUCCESS或者回到LIST_LOOP匹配下一个列表内容,直到发现匹配的FOLLOW集合元素或者到达列表尾部;如果没有发现匹配的FOLLOW元素,则状态机进入FOLLOW_FAIL状态;状态机在FOLLOW_SUCCESS和FOLLOW_FAIL分别将follow_match_success和follow_match_fail代入高电平通知主状态机;当主状态机将match_follow置为低电平,则match_follow_proc状态机回到IDLE状态,清除match_follow_success或match_follow_fail信号,等待下一次匹配。
基于上述各状态机,则可以利用可编程逻辑器件实现通用的ABNF文法解析器。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种文本编码类协议通用解析器,其特征在于,包括规则存储模块、待解析消息存储模块和消息解析模块,消息解析模块根据规则存储模块中保存的规则信息对待解析消息存储模块中的消息文本进行解析处理,所述的消息解析模块为采用逻辑芯片实现。
2.根据权利要求1所述的文本编码类协议通用解析器,其特征在于,所述的逻辑芯片包括现场可编程逻辑门列阵FPGA或复杂可编程逻辑器件CPLD。
3.根据权利要求1所述的文本编码类协议通用解析器,其特征在于,所述的规则存储模块为规则树存储模块,规则树存储模块中保存有基于扩展巴克斯范式ABNF方法定义的规则生成的规则树。
4.根据权利要求3所述的文本编码类协议通用解析器,其特征在于,所述的规则树为不包含增式选择、序列组及可选序列结构的规则树,且所述的规则树为以各规则中的一个规则为顶点,采用递归的方式生成的规则树。
5.根据权利要求1、2、3或4所述的文本编码类协议通用解析器,其特征在于,所述的消息解析模块进一步包括主进程处理部分用于根据栈顶节点的类型控制分别进入解析终结符部分、匹配首终结符部分或匹配后继终结符部分的处理过程;解析终结符部分用于当栈顶结点为终结节点时,由主进程处理部分控制启动,并进行终结节点的终结符的解析处理,解析完成后通知主进程处理部分;匹配首终结符部分用于对当栈顶结点为非终结点时,且为首终结符集合时,由主进程处理部分控制启动,并进行首终结符的匹配处理,判断当前字符是否在节点首终结符集合内,匹配完成后通知主进程处理部分;匹配后继终结符部分用于对当栈顶结点为非终结点时,且为后继终结符集合时,由主进程处理部分控制启动,并进行后继终结符的匹配处理,判断当前字符是否在节点后继终结符集合内,匹配完成后通知主进程处理部分。
6.根据权利要求5所述的文本编码类协议通用解析器,其特征在于,所述的消息解析模块采用状态机实现。
7.根据权利要求6所述的文本编码类协议通用解析器,其特征在于,所述的主进程处理部分对应的状态机包括循环解析PARSE_LOOP状态,在该状态下进行消息报文的解析;到达最大重复次数REPEAT_MAX状态,在该状态下判断保存首规则树节点的节点栈的栈顶节点的类型是否为终结节点;匹配终结符TERM_MATCH状态,在该状态下进行终结符的匹配处理张,并启动解析终结符部分;进入首终结符集合判断IN_FIRST状态,在该状态下进行首终结符集合的判断处理,并在确定存在首终结符集合时,启动匹配首终结符部分;所有的子节点已经处理ALLSUB状态,当IN_FIRST状态下所有的子节点处理完成时进入该状态,且在该状态下返回PARSE_LOOP状态;后继终结符集判断JUDGE_FOLLOW状态,在该状态下进行后继终结符集合的判断处理,并在确定存在后继终结符集合时,进入FOLLOW集合判断IN_FOLLOW状态,启动匹配后继终结符部分,如果不存在后继终结符集合时进入下一规则NEXTRULE状态,并返回PARSE_LOOP状态的。
8.根据权利要求6所述的文本编码类协议通用解析器,其特征在于,所述的解析终结符部分的状态机包括字符串类型终结符TERM_STRING状态,在该状态下对单个字符串循环进行单个字符的匹配处理;字符编码连接类型终结符TERM_CODE_LIST状态,在该状态下对字符编码连接循环进行单个字符的匹配处理;终结符匹配成功TERM_SUCCESS状态和终结符匹配失败TERM_FAIL状态,在该状态下通知主进程处理部分匹配处理结果。
9.根据权利要求6所述的文本编码类协议通用解析器,其特征在于,所述的匹配首终结符部分的状态机包括列表循环处理LIST_LOOP状态,在该状态下判断编码类型为字符串字符编码连接;字符串类型FIRST_STRING状态,在该状态下对单个字符串循环进行单个字符的匹配处理;字符编码连接类型终结符FIRST_CODE_LIST状态,在该状态下对字符编码连接循环进行单个字符的匹配处理;首终结符集合匹配成功FIRST_SUCCESS状态和首终结符集合匹配失败FIRST_FAIL状态,在该状态下通知主进程处理部分匹配处理结果。
10.根据权利要求6所述的文本编码类协议通用解析器,其特征在于,所述的匹配后继终结符部分包括列表循环处理LIST_LOOP状态,在该状态下判断编码类型为字符串字符编码连接;字符串类型FOLLOW_STRING状态,在该状态下对单个字符串循环进行单个字符的匹配处理;字符编码连接类型FOLLOW_CODE_LIST状态,在该状态下对字符编码连接循环进行单个字符的匹配处理;后继终结符匹配成功FOLLOW_SUCCESS状态和后继终结符匹配失败FOLLOW_FAIL状态,在该状态下通知主进程处理部分匹配处理结果。
全文摘要
本发明涉及一种文本编码类协议通用解析器。本发明包括规则存储模块、待解析消息存储模块和消息解析模块,消息解析模块根据规则存储模块中保存的ABNF规则树信息对待解析消息存储模块中的消息文本进行解析处理,所述消息解析模块为基于FPGA(可编程逻辑芯片)实现。因此,本发明与软件实现方式相比,解析效率大为提高,有利于提高产品效率,降低成本。同时,本发明为基于ABNF规则进行解析,使得本发明具有良好的通用性,可以适用于各种基于ABNF进行规则定义的场合,从而极大地降低了相应的解析器的开发成本,提高了开发效率。
文档编号H04L29/06GK1809053SQ20051000178
公开日2006年7月26日 申请日期2005年1月21日 优先权日2005年1月21日
发明者赵宝华, 屈玉贵, 周颢, 田野, 王烁, 李奇越, 吕超, 靳志伟 申请人:华为技术有限公司, 中国科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1