一种基于有限状态自动机架构的智能通讯服务器及其构建方法与流程

文档序号:12866024阅读:218来源:国知局
一种基于有限状态自动机架构的智能通讯服务器及其构建方法与流程

本发明属于电力智能通讯技术领域,涉及一种基于有限状态自动机架构的智能通讯服务器及其构建方法。



背景技术:

现有的通讯服务器种类繁多,功能各有特点,但是最主要的功能是“通讯”。通讯需要共同遵守相应的协议,著名的iso/osi(国际标准化组织)七层参考模型几乎是家喻户晓了。模型中的“应用层”协议内容最为复杂而且带有行业特色,专业性强。电力行业的应用层以iec(国际电工委员会)先后发布的iec61850,iec61870-5等系列协议为代表,协议文本逻辑性强。尤其是智能电网和数字变电站的建立,iec61850国际标准的推广通讯服务器需要接入各种ied(intelligentelectronicdevice)装置,一般而言,新型的ied都应支持iec61850标准,其通讯规约又包括mms(manufacturingmessagespecification)和goose(genericobjectorientedsubstationevent),其通讯规约很复杂。现有的通讯服务器在解析通讯报文时主要注重和解决报文的逻辑关系,包含大量的逻辑条件的判断,软件系统设计中对各种逻辑关系的组合难免疏漏,从而造成报文解析出错。

“智能通讯服务器”的输入是从通讯的通道而来,正常情况下通道上的输入是按照规约所描述的规律送来的,规约转换一般不会有问题;但是如果通道的质量不高,就难免有“误码”发生,普通的逻辑判断只能处理预先设定的错误,其它随机性错误将产生不可预测的后果。

由于通讯服务器需要处理各种各样的应用层通讯规约,报文的“重组”在所难免,所以通讯服务器都会有“实时数据库”。一般实时数据库主要用于存放报文的输入,组织输出报文的数据项等;显然该“实时数据库”的资源利用是不充分的。



技术实现要素:

本发明解决的问题在于提供一种基于有限状态自动机架构的智能通讯服务器及其构建方法,采用有限状态自动机来避免程序设计中逻辑判断的疏漏,有效地过滤掉随机性的误码,从而提高系统的稳定性和容错性;并进一步结合诊断用专家系统实现其智能化。

本发明是通过以下技术方案来实现:

一种基于有限状态自动机架构的智能通讯服务器,包括有限状态自动机系统、实时数据库和诊断专家系统;

所述的有限状态自动机系统包括:

状态矩阵,构造有限状态自动机的静态模型和动态模型,根据通讯服务器需要处理的通讯规约文本,构造状态矩阵的数据结构计算机内表示,将规约的解析过程分解成一系列的函数,包括每个状态矩阵元素的状态转换规则及其动作函数;

循环线程,是个无限循环的线程,其平时处于休眠状态,当发现有来自输入报文的报文输入,或者有系统事件产生,循环线程被激活,激活后调用状态自动机;状态自动机读取输入报文,根据状态转换矩阵转换状态,并调用相应状态元素的动作函数;

输入报文,是报文的应用层数据,包括通道上的输入报文通过物理层,数据链路层、网络层、传输层、会话层和表示层,自下而上最后送达应用层;

状态元素的“动作”函数集,接收状态自动机的解析结果,将报文解析功能进行分解而构成诸多函数的集合;

输出报文,是报文的应用层数据,自上而下的通过表示层、会话层、传输层、网络层和数据链路层,最后通过物理层发送到通道上去;状态自动机的系列动作函数的协调工作形成所需实时数据写入数据库,或者根据通讯规约形成输出报文输出;

所述的实时数据库,是用内存数据库实现通讯服务器所用到的实时数据的计算机内部表示,存放电力系统的实时数据;

所述的诊断专家系统包括:

知识库,知识规则集合构成知识库;

因果推理机,利用知识库进行因果推理:在需要进行故障诊断时启动并调用解析知识规则的函数,通过执行演绎逻辑进行规则解析;

值班员答案,在因果推理机解析过程中,如果条件中包含数据点值则读实时数据库,如果包含值班员答案则进行人机交互读取值班员答案;

推理结论反馈表,收集因果推理机解析的结论。

所述的状态矩阵(a)是由状态元素所构成的矩阵,其表示为:

eij={xj,σj,aij},其中:i为矩阵的第i行,j为矩阵的第j列,xj为该状态元素的输入,σj为该元素的下一个状态;aij为该元素的动作,表示调用一个函数,如果该元素有“输出”也在该函数中实现;

还将状态矩阵(a)用一个一维数组来表示,并增加一个索引数组p来指示每一行的起始位置。

所述的知识规则定义为:if<条件>then<后件>;

如果<条件>为真,则产生<后件>并将信息传递到下一级相邻的规则,否则信息不再向下一级传递;

条件的定义:<条件>::=^<条件>|<数据点值>|<值班员答案>|<终结条件>;其中:“^”符号表示“非”,非真为假,非假为真;<数据点值>表示为实时数据库数据点的值;<值班员答案>表示由值班员给出答案的条件;<终结条件>表示不再向下传递的结点,为终结结点;

<数据点值>::=<模拟量>|<数字量>|<计算量>;其中:<模拟量>表示用浮点数表示的实时数据;<数字量>即开关量实时数据;<计算量>通过算数表达式及逻辑表达式计算后得到的实时数据;

知识规则的集合,以及表示规则之间相互关系所形成的树形结构,存放到数据库中即为知识库;知识库通过树形结构读入实时数据库满足计算的实时性的要求。

在知识库中存放的树形结构,其结点及其属性用内存数据块来存放,树形结构的支路用索引来表示;

树形结构的结点参数包括本结点条件,上级结点条件,关联的专家信息和优先级;树形结构的索引包括:本级结点向前索引、本级结点向后索引、指向上级结点和指向下级结点;

所述智能通讯服务器一直在播放背景音乐:根据诊断专家系统的诊断结果播放相对应的音乐,没有事件发生就播放轻松的音乐;如果有事件发生则根据发生事件的严重程度播放能引起人们注意的音乐;

值班人员可根据装置的背景音乐来识别装置的工作状态。

所述的因果推理机所进行的因果推理是遍历和解析由知识规则所构成的判定树,对判定树遍历和解析过程是演绎过程,其经过的路径构成规则的正向推理链:a→b,b→c,c→d...;

因果推理机的函数解析由事件触发,之后搜索知识库中的相应的根结点,逐级解析规则中的<条件>并按条件向下转递;

推理的结论一方面通过对话框报告值班员,另一方面则播放相应的背景音乐提醒值班人员;

因果推理机还通过诊断对话框接受值班员答案。

一种基于有限状态自动机架构的智能通讯服务器的构建方法,包括以下操作:

1)在嵌入式系统中构造有限状态自动机静态模型,包括计算机数据结构以及相应的动作函数:根据通讯服务器需要处理的通讯规约文本,构造状态矩阵的数据结构计算机内表示,将规约的解析过程分解成一系列的函数,包括每个状态矩阵元素的状态转换规则及其动作函数;

2)构造实时数据库:用内存数据库实现通讯服务器所用到的实时数据的计算机内部表示;

3)构造有限状态自动机的动态模型,以便智能通讯服务器在运行时即时处理通讯报文的输入,输出以及系统事件;

4)构造诊断专家系统用的知识库:邀请专家提供诊断专家系统的知识规则集,使用组态工具录入智能通讯服务器,并自动转换为计算机内部表示,从而形成知识库;

5)实现因果推理机,以便智能通讯服务器在运行时能被预先设定的事件激活,根据实时数据库的数据,以及值班员的答案,进行逻辑演绎;得出的推理结论通过人机界面展示给值班人员,并播放相应的背景音乐以提示有关人员。

与现有技术相比,本发明具有以下有益的技术效果:

本发明提供的基于有限状态自动机架构的智能通讯服务器及其构建方法,在“智能通讯服务器”中构造了“有限状态自动机”的系统模型,利用有限状态自动机来解析iec61850国际规约中的mms和goose通讯规约,“有限状态自动机”则能有效地过滤掉随机性的“误码”,从而提高系统的稳定性和“容错”性,而且由于对规约的描述层次清晰,调试非常方便;同时还在“智能通讯服务器”中构造“专家系统”模型(包括知识库和推理机),用于诊断本智能通讯服务器设备本身及有关设备是否存在故障和异常,以实现设备和电力系统的故障诊断功能;

本发明提供的基于有限状态自动机架构的智能通讯服务器及其构建方法,还在“智能通讯服务器”中演奏背景音乐,使装置更加人性化,即根据诊断专家系统的诊断结果,播放相应的背景音乐以提示有关人员。这样诊断结果通过播放不同的乐曲来提示值班员,使值班工作很愉快,不必8小时死死的盯住设备或屏幕,显得非常人性化。

附图说明

图1为本发明的架构示意图。图中的箭头表示数据的流向,显然有单侧箭头的线条表示数据流向是单方向的,由双向箭头的线条表示可以双向流动的数据。

图2为状态转换矩阵的一维数组表示,在计算机内为节省存储空间,将一个二维数组压缩到一个一维数组的表达方式。

图3为本发明的有限状态自动机的程序框图。

图4为内存树形结构的结点及其索引。

图5为本发明的知识库递归解析函数框图示意图。

图6为判定树的框图示意图。

具体实施方式

下面结合具体的实施例对本发明做进一步的详细说明,所述是对本发明的解释而不是限定。

本发明提供的基于有限状态自动机架构的智能通讯服务器及其构建方法,涉及在智能通讯服务器构建有限状态自动机及诊断专家系统,下面分别对其进行说明。

关于有限状态自动机:一个系统可以用一个“黑箱”来描述,它有一些端点,“输入”端表示“激发变量”而“输出”端表示“响应变量”。有限状态自动机模型假设有一个独立的同步源来控制它,只有离散的与特定事件相关联的时刻才被同步源所提交,称之为“采样时间”tv(v=1,2,...)。

其它重要定义:

输入字母表:x={ξ1,ξ2,...,ξp}

输出字母表:z={ζ1,ζ2,...,ζq}

有限状态集合:s={σ1,σ2,...σn}

成对的特征函数fz和fs

有限状态自动机所描绘的系统,可以用表格,图形,和矩阵来表示它。下面给出一个状态转换矩阵的例子:

显然,状态转换矩阵是一个包含很多空元素的矩阵,我们称为“稀疏矩阵”。本发明根据通讯服务器中各种通讯规约的规范及表达式的运算规则,构建相应的状态转换矩阵,并且建立和运行状态自动机来解析通讯规约和解析算术表达式等复杂运算。

关于专家系统的:利用大量专家知识以解决只有专家才能解决的问题;本发明涉及专家系统中的“知识库”和“推理机”两个主要内容。

知识库中描述知识的规则是:if<条件>then<后件>,如果<条件>为“真”,则产生<后件>并将信息传递到下一级相邻的“结点”,否则信息不再向下一级传递。上列规则的集合构成“知识库”,“规则”是由专家们提供,然后将规则集合存放到“知识库”中。

利用知识库中的大量规则进行推理的过程称为“推理机”,在专家系统中称为判定树。实际上是执行“演绎逻辑”(deductivelogic);它由“事件”触发,之后搜索知识库中的相应的根结点,并逐级解析规则中的<条件>,如果“条件”为“真”则向下转递,即因果推理。由于规则的数量很大,可能存在潜在的不确定性和冲突,推理的结论容许产生多个,专家还可以被赋予“优先级”属性,推理机按照专家优先级来排队解析。

参见图1,一种基于有限状态自动机架构的智能通讯服务器,包括有限状态自动机系统、实时数据库f和诊断专家系统;

所述的有限状态自动机系统包括:

状态矩阵a,构造有限状态自动机的静态模型和动态模型,根据通讯服务器需要处理的通讯规约文本,构造状态矩阵的数据结构计算机内表示,将规约的解析过程分解成一系列的函数,包括每个状态矩阵元素的状态转换规则及其动作函数;

循环线程b,是个无限循环的线程,其平时处于休眠状态,当发现有来自输入报文c的报文输入,或者有系统事件产生,循环线程被激活,激活后调用状态自动机;状态自动机读取输入报文,根据状态转换矩阵转换状态,并调用相应状态元素的动作函数;

输入报文c,是报文的应用层数据,包括通道上的输入报文通过物理层,数据链路层、网络层、传输层、会话层和表示层,自下而上最后送达应用层;

状态元素的“动作”函数集e,接收状态自动机的解析结果,将报文解析功能进行分解而构成诸多函数的集合;

输出报文d,是报文的应用层数据,自上而下的通过表示层、会话层、传输层、网络层和数据链路层,最后通过物理层发送到通道上去;状态自动机的系列动作函数的协调工作形成所需实时数据写入数据库,或者根据通讯规约形成输出报文输出;

所述的实时数据库,是用内存数据库实现通讯服务器所用到的实时数据的计算机内部表示,存放电力系统的实时数据;

所述的诊断专家系统包括:

知识库g,知识规则集合构成知识库;

因果推理机i,利用知识库进行因果推理:在需要进行故障诊断时启动并调用解析知识规则的函数,通过执行演绎逻辑进行规则解析;

值班员答案j,在因果推理机i解析过程中,如果条件中包含数据点值则读实时数据库,如果包含值班员答案则进行人机交互读取值班员答案;

推理结论反馈表h,收集因果推理机i解析的结论。

一种基于有限状态自动机架构的智能通讯服务器的构建方法,包括以下操作:

步骤1:在嵌入式系统中构造有限状态自动机静态模型,包括计算机数据结构以及相应的“动作函数“:

根据通讯服务器需要处理的通讯规约文本,构造状态矩阵的数据结构计算机内表示,包括每个状态矩阵元素的状态转换规则及其“动作函数“,其实质是将规约的解析过程分解成一系列的函数来完成。

这里要注意,状态自动机的输入不但包括输入报文,也包括其它“事件输入“,例如超时事件和值班员的命令事件等。

步骤2:构造实时数据库:

实现通讯服务器所用到的实时数据的计算机内部表示,一般是用内存数据库。除了报文输入的数据项之外,还包括通过算术或逻辑表达式计算出来的“计算量“,以及值班员设定的数据等。

步骤3:构造有限状态自动机的动态模型,以便智能通讯服务器在“运行时“即时处理通讯报文的输入,输出以及系统事件。

步骤4:构造“诊断专家系统”用的“知识库”,即邀请专家提供诊断专家系统的“知识规则“集,使用”组态工具”录入智能通讯服务器,并自动转换为计算机内部表示,从而形成“知识库”。

步骤5:实现因果推理机,以便智能通讯服务器在“运行时“能被预先设定的“事件”激活,根据实时数据库的数据,以及值班员的答案,进行逻辑演绎。得出的推理结论通过人机界面展示给值班人员,并播放相应的背景音乐以提示有关人员。

下面分别以构造有限状态自动和诊断专家系统分别进行具体的说明。

1)关于有限状态自动机模型

在有限状态自动机的三种数学描述中,最适合在计算机上实现的是状态转换矩阵:

(1),首先引入“状态元素”,它定义为一个结构体:

eij={xj,σj,aij}(3.1)

其中:i-表示矩阵的第i行,即原来状态为σi;

j-表示第j列,表示下一个状态为σj;

xj-表示该状态元素的输入;

σj-表示该元素的下一个状态;

aij-表示该元素的“动作”,在计算机中一般表示调用一个函数,如果该元素有“输出”也在该函数中实现之。

(2),由状态元素所构成的矩阵我们仍然称为“状态转换矩阵”,它和原来的状态转换矩阵一样也是一个“稀疏”矩阵,空元素不需要存储也没必要进行运算。为节省存储空间,我们可以将这些空元素忽略掉,而将状态转换矩阵用一个一维数组来表示;但是需要增加一个索引数组p来指示每一行的起始位置,如图2所示。

(3),在“智能通讯服务器”上实现有限状态自动机,即实现图2所示的状态转换(一维)矩阵,为了用程序框图来表达,需要转换为编程语言来表达:

状态元素定义为一个结构:

。对应同一当前状态(例如σi)包含的“状态元素”(例如ei0,ei1。。。),顺序存放;又按照状态的先后顺序排列,就形成了结构数组tran[];

。每组状态元素中最前面的一个元素的位置,用索引数组p[]来指示;

。在每组状态元素的最后增加一个特殊的状态元素,它的“输入”是“其它”,即与上面枚举的元素都没有匹配的元素。在结构数组中用0来代表“其它输入”,注意这个0并不是表示该元素是“空元素”而是代表“其它输入”。

。变量state表示当前状态,变量pp表示当前的转换矩阵索引,变量inele表示输入符号。

“状态自动机”的逻辑框图如图3所示。

下面解释一下状态自动机的工作流程:

①p表示状态元素表的指针数组,当前状态存于state变量中,pp←p[state]表示将当前状态对应的状态元素的第一个位置送变量pp;

②判断pp变量所指的状态元素结构中的“输入”(tran[pp].in)是否与输入符号inele相匹配;如果匹配则转到⑤;如果不匹配则转到③;

③进一步判断pp指针是否已到达该状态对应的状态元素的尾部,如果到达尾部即最后一个元素,那么tran[pp].in一定等于<其它输入>(用0来表示);如果“是”那么也就是匹配了该元素,转到⑤;否则继续转到④;

④pp变量向下移一个,之后转到②;

⑤与输入符号匹配的状态元素结构中的“下一个转变状态”是tran[pp].next,如果小于0表示下一个转变状态与当前状态相同,转到框⑦;否则向下转到⑥;

⑥该状态元素的“下一个转变状态”送到当前状态变量state←tran[pp].next;

⑦调用该状态元素的“动作函数”tran[pp].action;

⑧返回

2)关于专家系统模型

本发明在“智能通讯服务器”上要实现“知识库”和“因果推理机”,结合知识库的判定树来说明实现的具体方法。

(1),首先定义规则

if<条件>then<后件>

如果<条件>为“真”,则产生<后件>并将信息传递到下一级相邻的“规则”,否则信息不再向下一级传递。

“条件”的定义:<条件>::=^<条件>|<数据点值>|<值班员答案>|<终结条件>

其中:“^”符号表示“非”,非真为假,非假为真;

其中:<模拟量>表示用浮点数表示的实时数据;

<数字量>即开关量实时数据;

<计算量>通过算数表达式及逻辑表达式计算后得到的实时数据。

(2),由大量的规则构成的知识库,用来表示“规则”之间相互关系所形成的树形结构,存放到数据库中即实现了知识库的定义(组态)。

为叙述方便用<cond>来代表“条件”;引用“知识结点”的方法是:信息从原始结点到达当前“规则”所要通过的为“真”的“条件”,形式为:

.<cond1>.<cond2>....<condn>.

其中:

<cond1>……<condn>是该规则所通过的路径中为真的条件。

最前面的“.”表示根结点,各个条件后面也要有一个“.”表示信息传递。

<condn>.为本级条件。本级条件前面的部分为“上级知识结点”。

下面用一个例子来说明这种知识结点:假设知识库中存在以下三个条件,即xl1_hw表示线路1的开关位置在合闸,xl1_tw表示线路1的开关位置继电器在跳闸位置,xl1_jx表示操作员答案为“线路1开关正在检修”。那么“.xl1_hw.xl1_jx.xl1_tw.”是一个知识结点,名称为“线路1的开关正在做实验”;类似的“.xl1_hw.^xl1_jx.xl1_tw.”也是一个知识结点,名称为“线路1开关的二次回路故障”。

事实上,知识库中每一条知识都可以有相应的“动作”,例如向值班员报告的“事件”内容;装置演奏的背景音乐是什么等等。

为了给值班人员创造比较人性化的工作环境,智能通讯服务器一直在播放背景音乐,系统根据诊断专家系统的诊断结果播放相对应的音乐,没有事件发生就播放轻松的音乐,如果有事件发生则根据发生事件的严重程度播放能引起人们注意的音乐。值班人员不可能时刻监视着屏幕,但是可以根据装置的背景音乐来识别装置的工作状态。

(3),在数据库中存放的树形结构,需要读入实时数据库(即内存数据库),才能满足计算的实时性的要求,树形结构的“结点”及其属性用内存数据块来存放,而树形结构的“支路”用索引来表示,如图4所示:

其中:“结点参数”包括本结点“条件”,上级结点“条件”,关联的专家信息和优先级等;

chainbackidx:本级结点向前索引;

chainidx:本级结点向后索引;

fatheridx:指向上级结点(父结点);

childidx:指向下级结点(孩子结点)。

(4),在“智能通讯服务器”上实现推理机,实质上是要遍历和解析由图4所示知识规则所构成的判定树;上面所述的例子构成的判定树如图6所示。其中左边的分支可以还原为知识:

根节点

if线路1的开关位置在合闸

then开关在工作

开关在工作

if^线路1开关正在检修

then开关带电运行

开关带电运行

if线路1的开关位置继电器在跳闸位置

then线路1开关的二次回路故障

换句话说,对判定树遍历和解析过程是演绎过程,其经过的路径构成“规则”的正向推理链:根节点→开关在工作,开关在工作→开关带电运行,开关带电运行→线路1开关的二次回路故障。

如果我们用一个函数来解析任何规则,那么这个函数一定是“递归”的,所以其核心是要调用一个“递归”的函数。

本发明的“推理机”,它由“事件”触发,之后搜索知识库中的相应的根结点,逐级解析规则中的<条件>并按条件向下转递,即因果推理。由于规则的数量很大,可能存在潜在的不确定性和冲突,即使推理机可以根据“规则”的优先级排队,推理的结论还是会有多个;推理的结论一方面通过对话框报告值班员,另一方面则播放相应的背景音乐提醒值班人员。此外,本推理机还可通过诊断对话框接受“值班员答案”,因为它们无法通过“数据点”表示的“条件”,只能由值班员人为回答。

图5是解析“规则”用的递归函数的框图,解析知识规则的递归函数是推理机的核心:

。为了显示给运行人员“知识规则树”的推理结论,并显示请求值班员给出答案的条目,程序中设计了一个“反馈表”,其条目可能是动态增减的。图5中引用了两个函数:copyonecon(tidx,cnodeidx)函数表示将结点参数拷贝到“反馈表”,而addonecon(cnodeidx)表示增加一个反馈表条目。

。框图中判定树中的结点用结构数组elenodes[]表示;

。递归函数scanknlib有两个参数,nodeidx表示当前父结点,tidx表示反馈表中当前可用条目的索引号;

。初始化框进行变量的初始化,主要变量的意义如下:

nextflag-该结点在反馈表中占有的条目数;

sucflag---标志,0表示“条件”为“否”,1表示“条件”为“是”,2表示“条件”为“终结”或者为“未知”。

cnodeidx-当前结点,初始化时根据其父结点的childidx索引得到,即:

cnodeidx←elenodes[nodeidx].childidx

ctidx和tidx---都是反馈表的索引号,不过后者是进入函数时的索引而前者是退出函数时的索引。

。从框图可见,对于“数据点”条件,可以立刻根据实时数据库的当前值得到解析,如果“条件”为“是”就可以递归调用本函数继续解析其下级节点。

对于条件为“终结”(sucflag=2),仅加入“反馈表”显示,不再传导到下级。

对于“条件”为“值班员答案”者,如果根据已经解析的“条件”可以判断其真假(例如以前解析过该条件的“^”,显然可以将其再取反得到现在“条件”的值),也就可以立即解析出来了;反之就将该“条件”加入“反馈表”等待值班员给出答案。

。本框图最下面的方框cnodeidx←elenodes[cnodeidx].chainidx表示继续解析同级下一个结点。直到同级结点解析完毕函数才返回。

流程解释如下:

a递归函数入口:scanknlib(nodeidx,tidx)。其中nodeidx为父结点,tidx表示“反馈表”的当前索引号。由于开始解析总是从根节点开始的,所以首次调用该递归函数时这两个参数均为“0”。

b函数变量初始化:包括标志nextflag←secflag←0;当前结点索引cnodeidx←elenodes[nodeidx].childidx(等于父结点的儿子,如果父结点没有儿子则该索引号为“-1”);反馈表工作索引号:ctidx←tidx。

c判断框:推理链是否终结。cnodeidx<0表示结点已经解析完毕,转到返回框w。否则顺序执行d。

d判断框:如果该节点的种类(即elenodes[cnodeidx].condtypeid)为“数据点”,则转到j框。否则顺序执行e框。

e判断框:如果该节点的种类(即elenodes[cnodeidx].condtypeid)为“值班员答案”,

则转到g框。否则顺序执行f框。

f置标志sucflag←2。之后转到k框。

g判断框:判断值班员对该条“规则”是否已经给过答案(包括在判定树中对该规则的“否规则”给过答案,也相当于对本规则给了答案),如果给过则转到i框。否则顺序执行到h框。

h置标志sucflag←2。之后转到k框。

i根据原来设置标志sucflag,如果原来做过肯定回答则置1,否则置0。之后转到k框。

j判断框:判断该数据点的实时值是否为“0”,如果为“0”则置标志sucflag←0,否则置标志sucflag←1。置完标志后转到k框。

k判断框:判断标志sucflag>0,如果大于“0”则转到m框。否则顺序执行l框。

l将当前结点的弟弟(即下一个同级结点)变为当前结点,即cnodeidx←elenodes[cnodeidx].chainidx。之后转到c框,继续解析。

m判断框:判断标志nextflag>0,则转r框,否则顺序执行n框。

n该结点参数拷贝到“反馈表”,即调用函数copyonecon(tidx,cnodeidx),之后顺序执行到o。

o判断框:判断标志sucflag是否等于1,如果不等于1则转到q框;等于1则顺序执行p框。

p调用该递归函数以递归解析该节点的“儿子”(即下级结点)scanknlib(cnodeidx,tidx)。之后顺序执行到q框。

q标志nextflag增加1,之后转到l框。

r增加一个反馈表条目,并将增加的条目索引号送ctidx,即ctidx←addonecon(cnodeidx)。之后顺序执行到s框。

s判断框:判断标志sucflag是否等于1,如果不等于1则转到q框;等于1则顺序执行t框。

t调用该递归函数以递归解析该节点的“儿子”(即下级结点)scanknlib(cnodeidx,tidx)。之后顺序执行到q框。

w函数出口,返回ctidx。

以上给出的实施例是实现本发明较优的例子,本发明不限于上述实施例。本领域的技术人员根据本发明技术方案的技术特征所做出的任何非本质的添加、替换,均属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1