一种状态机可拼接性和拼接规则判定方法和装置
技术领域
本发明涉及数字集成电路领域,更具体地涉及一种状态机可拼接性和拼接规则判定方法和装置。
背景技术
动态可重配流水线技术使得硬件电路结构更加灵活可控,其本质是用程序描述流水线上各个状态机的行为。状态机对应于电路中各个功能单元,通过编程设计和配置状态机可以方便的操控硬件资源。然后,电路较为复杂时,状态机的设计和配置就变得极其复杂。
然而,当硬件需要执行较为复杂的操作或实现较为复杂的算法时,不同状态机的行为会变得复杂而多样,此时状态机拼接的情况就会极为复杂,可能面临不同类型状态机难以拼接、甚至不能拼接的情况。此时,如何从理论上分析状态机的可拼接性,识别出可以直接拼接、或者经过等价变换即可拼接的类型,以及提示不能拼接的状态机类型,就变得很关键。
发明内容
有鉴于此,本发明的主要目的在于提出一种状态机等价变换判定方法,从理论上系统全面地分析拼接过程中状态块的可拼接性,并且分析各种情况状态块的拼接规则和等价变换规则,以便于应对各种状态机拼接情况。
为了实现上述目的,作为本发明的一个方面,本发明提供了一种状态机可拼接性和拼接规则判定方法,包括以下步骤:
步骤1,进行初始化,将当前状态置为空状态;
步骤2,从待拼接状态块队列中读取一个状态块,根据该状态块的类型和当前状态判断该状态的处理方法,修改当前状态,并跳转到相应规则的步骤中;
步骤3,判断全顺序块的拼接规则,保持当前状态为全顺序状态,跳至步骤2;
步骤4,判断全循环块的拼接规则,保持当前状态为全循环状态,且读入的状态块为循环块,调用步骤6进行长度比较:
若步骤6返回长度相同,且比较的左右循环块循环次数相同,则保持当前状态为全循环状态,跳至步骤2;
若步骤6返回长度相同,且比较的左右循环块循环次数不同,则输出等价变换规则,方法结束;
若步骤6返回结果不同信息,则输出不可拼接,该方法结束;
步骤5,判断全嵌套循环块的拼接规则,保持当前状态为全嵌套循环状态,且读入的状态块为嵌套循环块,调用步骤6进行长度比较:
若步骤6返回长度相同,且比较的左右嵌套循环块循环次数相同,则保持当前状态为全嵌套循环状态,跳至步骤2;
若步骤6返回长度相同,且比较的左右嵌套循环块循环次数不同,则输出等价变换规则,方法结束;
若步骤6返回长度不同,则输出不可拼接,该方法结束;
步骤6,确定输入的两个循环块或两个嵌套循环块长度是否一致。
其中,步骤2中所述根据该状态块的类型和当前状态判断该状态的处理方法,修改当前状态,并跳转到相应规则的步骤中的步骤包括:
若当前状态为空状态:
若读取的状态块为顺序块,置当前状态为全顺序状态,重新开始步骤2;
若该状态块为循环块,置当前状态为全循环状态,记录当前循环块的循环长度,重新开始步骤2;
若该状态块为嵌套循环块,置当前状态为全嵌套循环状态,记录当前循环块的循环长度,重新开始步骤2;
若当前状态为全顺序状态:
若读取的状态块为顺序块,则跳转到步骤3;
若读取的状态块为循环块或嵌套循环块,则修改当前状态为非全顺序状态,输出等价变换规则,该方法结束;
若当前状态为全循环状态:
若读取的状态块为循环块,则跳转到步骤4;
若读取的状态块为顺序块,则修改当前状态为非全顺序状态,输出等价变换规则,该方法结束;
若读取的状态块为嵌套循环块,则修改当前状态为非全循环状态,输出等价变换规则,该方法结束;
若当前状态为全嵌套循环状态:
若读取的状态块为嵌套循环块,则跳转到步骤5;
若读取的状态块为顺序块,则修改当前状态为非全顺序状态,输出等价变换规则,该方法结束;
若读取的状态块为循环块,则修改当前状态为非全循环状态,输出等价变换规则,该方法结束;
若读取待判定状态块队列为空,且当前状态为全顺序状态、全循环状态或全嵌套循环状态,则输出可拼接规则,该方法结束。
其中,步骤6中所述长度与循环体长度、总循环次数和已循环次数相关,表示为:长度=循环体长度×(总循环次数-已循环次数)。
其中,步骤6中所述确定输入的两个循环块或两个嵌套循环块长度是否一致的步骤包括:
子步骤6.0,将输入的两个待比较状态块标记为一个左状态块,一个右状态块,作为比较步骤的左输入和右输入;
子步骤6.1,输出输入循环体的嵌套重数;若循环体是非嵌套的,则输出1;若是嵌套循环块,则将嵌套循环块内的除顺序块外的所有状态块放入步骤6.1的输入中,执行步骤6.1,从步骤6.1的输出中选出最大的值,输出最大值加1;
子步骤6.2,首先取出左状态块和右状态块嵌套循环块内的所有状态块构成左右两个状态块的有序队列,然后将两个队列中的每一个状态块分别输入到子步骤6.3的输入中,跳转到子步骤6.3,将子步骤6.3返回的状态块队列替换左右两个状态块有序队列中的原状态块,最后将左右两个状态块有序队列放入子步骤6.4的输入中,跳转到子步骤6.4;
子步骤6.3,将具有头区域、主体和尾区域的树形结构的状态块,降维成无头区域和尾区域的状态块;
子步骤6.4,若左有序队列不为空,则判断左有序队列的首个状态块的类型,若是顺序块,则将顺序块中的状态数累加到左状态机长度中,若是循环块,则将左循环块信息和右有序队列放入子步骤6.5的输入中,跳转到子步骤6.5,若是嵌套循环块,则该步骤返回长度相同;将左有序队列首个状态块删除,跳转至子步骤6.4;若左有序队列为空,则将右有序队列放入子步骤6.7的输入中,跳转至子步骤6.7;
子步骤6.5,若右有序队列不为空,则判断右有序队列的首个状态块的类型,若是顺序块,则将顺序块中的状态数累加到右状态机长度中,从右有序队列中删除首个状态块,并跳至子步骤6.5;若是循环块,判断输入左循环块信息中总循环次数和右循环块的总循环次数和循环块内状态个数是否一致,若一致则跳至子步骤6.6,若不一致则该步骤返回长度不同;若是嵌套循环块则该步骤返回长度相同;若右有序队列为空,则该步骤返回长度不同;
子步骤6.6,若有序队列不为空,则判断右有序队列的首个状态块的类型,若是顺序块,则将顺序块中的状态数累加到右状态机长度中,从右有序队列中删除首个状态块,并跳至子步骤6.7;若是循环块或嵌套循环块,则该步骤返回长度不同。若有序队列为空则跳至子步骤6.8;
子步骤6.7,将总循环次数和循环块内状态个数相同,但已循环次数不等的左右循环块做相等补偿;从左右有序队列中删除首个状态块,并跳至子步骤6.4;
子步骤6.8,判断此时左状态机长度和右状态机长度是否相等,若相等,则该步骤返回长度相同,若不相等,则该步骤返回长度不同。
其中,子步骤6.3中所述将具有头区域、主体和尾区域的树形结构的状态块,降维成无头区域和尾区域的状态块的步骤包括:
首先若输入的状态块存在头区域则将头区域中的每个状态块放入子步骤6.3的输入中,调用子步骤6.3,将子步骤6.3返回的有序队列放入输出的有序队列中,然后将主体状态块放入输出有序队列,最后输入的状态块存在尾区域则将尾区域中的每个状态块放入子步骤6.3的输入中,调用子步骤6.3,将子步骤6.3返回的有序队列放入输出的有序队列中。
其中,子步骤6.7中所述将总循环次数和循环块内状态个数相同,但已循环次数不等的左右循环块做相等补偿的步骤包括:判断左右已循环次数的大小,将(|左已循环次数-右已循环次数|×循环块内状态个数)累加到已循环次数较小的状态机长度上。
作为本发明的另一个方面,本发明还提供了一种状态机可拼接性和拼接规则的判定装置,包括:当前状态块寄存器2、状态块分类模块3、全顺序块处理模块4、全循环块处理模块5、全嵌套循环块处理模块6、长度计算模块8和系统状态寄存器7,其中
所述判定装置每次从待判定状态块队列1中读取一个状态块,所述当前状态块寄存器2存储刚刚读入的状态块;
所述状态块分类模块3读取所述当前状态块寄存器2和所述系统状态寄存器7的值,并根据当前状态块类型和系统状态类型从所述全顺序块处理模块4、全循环块处理模块5、全嵌套循环块处理模块6中选择相应模块进行下一步处理和判定;
所述全顺序块处理模块4从所述状态块分类模块3中读取当前状态块,并将当前顺序块状态保存至所述系统状态寄存器7中,然后使所述判定装置重新读取状态块;若读取结束则输出可拼接判断11;
所述全循环块处理模块5从所述状态块分类模块(3)中读取当前状态块,并读取所述系统状态寄存器7,然后调用所述长度计算模块(8)进行长度计算;判断完毕后根据判断结果输出相应判断规则或返回使所述判定装置继续读取状态块;
所述全嵌套循环块处理模块6从所述状态块分类模块3中读取当前状态块,并读取所述系统状态寄存器7,然后调用所述长度计算模块8进行长度计算;判断完毕后根据判断结果输出相应判断规则或返回使所述判定装置继续读取状态块;
所述系统状态寄存器7存储当前系统状态,包括状态块的分类,并存储之前读取的状态块的信息;以及
所述长度计算模块8由所述全循环处理模块5或所述全嵌套循环块处理模块6调用,用于分析和比较循环体的绝对长度并作出循环体相关的可拼接性判断。
其中,所述判定装置输出3种结果,分别是等价变换规则9、不可拼接判断10和可拼接判断11,其中所述等价变换规则9表示当前状态块不能直接拼接,但经过等价变换后可能进行拼接,所述不可拼接判断10表示当前状态块不可拼接,所述可拼接判断11表示当前状态块可直接拼接。
其中,所述待判定状态块队列1为待拼接状态机分解得到的状态块,分为顺序块、循环块、嵌套循环块3种。
其中,所述长度计算模块8进行长度计算的公式为:长度=循环体长度×(总循环次数-已循环次数)。
基于上述技术方案可知,本发明的方法对状态机拼接过程中的待拼接状态块进行分析,在理论上分析了状态机的状态块的各种类型及其拼接的可能性,能够提高拼接的清晰性和拼接效率,以便于状态机拼接过程能够正确和高效地进行。本发明的方法将待拼接的状态块分为顺序块、循环块、嵌套循环块3类,并针对不同拼接类型分别进行等价性计算,可以作为状态机拼接方法过程中一个可以极大提升拼接效率和正确性的中间过程。此外,该等价性分析方法还可以应用在其他类似的状态机分析过程中。本发明的装置作为合并状态机的重要子装置,使得状态机拼接装置具有模块化的特点,更加方便拼接装置的调试和修改,以及功能的移植和增加。
附图说明
图1是本发明的状态机可拼接性和拼接规则判定装置的结构示意图;
图2是本发明的实施例1的待判定状态块的示意图;
图3是本发明的实施例2的待判定状态块的示意图;
图4是本发明的状态机可拼接性和拼接规则判定方法的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。
本发明公开了一种状态机可拼接性和拼接规则判定方法和一种状态机可拼接性和拼接规则判定装置。其中,本发明的状态机可拼接性和拼接规则判定方法,包括以下步骤:初始化步骤、状态块分类步骤、全顺序块处理步骤、全循环块处理步骤、全嵌套循环块处理步骤和长度计算步骤。下面分别进行详述之。
1.初始化步骤
该步骤用于初始化状态机可拼接性和拼接规则判定方法。该方法用当前状态记录拼接类型。该步骤的特征是:开始时先将当前状态置为空状态。
2.状态块分类步骤
该步骤的特征是:从待拼接状态块队列中读取一个状态块,根据该状态块的类型和当前状态判断该状态的处理方法,修改当前状态,并跳转到相应规则的步骤中。
若当前状态为空状态:若读取的状态块为顺序块,置当前状态为全顺序状态,重新开始步骤2;若该状态块为循环块,置当前状态为全循环状态,记录当前循环块的循环长度,重新开始步骤2;若该状态为嵌套循环块,置当前状态为全嵌套循环状态,记录当前循环块的循环长度,重新开始步骤2。
若当前状态为全顺序状态:若读取的状态块为顺序块,则跳转到步骤3;若读取的状态块为循环块或嵌套循环块,则修改当前状态为非全顺序状态,输出等价变换规则,该方法结束。
若当前状态为全循环状态:若读取的状态块为循环块,则跳转到步骤4;若读取的状态块为顺序块,则修改当前状态为非全顺序状态,输出等价变换规则,该方法结束;若读取的状态块为嵌套循环块,则修改当前状态为非全循环状态,输出等价变换规则,该方法结束。
若当前状态为全嵌套循环状态:若读取的状态块为嵌套循环块,则跳转到步骤5;若读取的状态块为顺序块,则修改当前状态为非全顺序状态,输出等价变换规则,该方法结束;若读取的状态块为循环块,则修改当前状态为非全循环状态,输出等价变换规则,该方法结束。
若读取待判定状态块队列为空,且当前状态为全顺序状态、全循环状态、或全嵌套循环状态,则输出可拼接规则,该方法结束。
3.全顺序块处理步骤
该步骤判断全顺序块的拼接规则。该步骤的特征在于:该方法的当前状态为全顺序状态,且读入的状态块为顺序块。所有的顺序块在状态块拼接过程中都可以直接拼接。保持当前状态为全顺序状态,跳至步骤2。
4.全循环块处理步骤
该步骤判断全循环块的拼接规则。该步骤的特征在于:当前状态为全循环状态,且读入的状态块为循环块。
调用步骤6进行长度比较。
若步骤6返回长度相同,且比较的左右循环块循环次数相同,则保持当前状态为全循环状态,跳至步骤2。
若步骤6返回长度相同,且比较的左右循环块循环次数不同,则输出等价变换规则,方法结束。
若步骤6返回结果不同信息,则输出不可拼接,该方法结束。
5.全嵌套循环块处理步骤
该步骤判断全嵌套循环块的拼接规则。该步骤的特征在于:当前状态为全嵌套循环状态,且读入的状态块为嵌套循环块。调用步骤6进行长度计算。
若步骤6返回长度相同,且比较的左右嵌套循环块循环次数相同,则保持当前状态为全嵌套循环状态,跳至步骤2。
若步骤6返回长度相同,且比较的左右嵌套循环块循环次数不同,则输出等价变换规则,方法结束。
若步骤6返回长度不同,则输出不可拼接,该方法结束。
6.长度比较步骤
该步骤用于确定输入的两个循环块或两个嵌套循环块长度是否一致。其中长度与循环体长度、总循环次数和已循环次数相关,可表示为:长度=循环体长度×(总循环次数-已循环次数)。其比较步骤包括:比较输入子步骤、循环嵌套层次检测子步骤、嵌套循环拆解子步骤、状态结构一维化子步骤、左有序队列扫描子步骤、右有序队列扫描子步骤、右有序队列后扫描子步骤、循环块差值补偿子步骤、状态机长度判断子步骤。
子步骤6.0比较输入子步骤
该子步骤特征在于将输入的两个待比较状态块标记为一个左状态块,一个右状态块,作为比较步骤的左输入和右输入。
子步骤6.1循环嵌套层次检测子步骤
该子步骤特征在于输出输入循环体的嵌套重数。若循环体是非嵌套的,则输出1;若是嵌套循环块,则将嵌套循环块内的除顺序块外的所有状态块放入步骤6.1的输入中,执行步骤6.1,从步骤6.1的输出中选出最大的值,输出最大值加1。
子步骤6.2嵌套循环拆解子步骤
该子步骤特征在于首先取出左状态块和右状态块嵌套循环块内的所有状态块构成左右两个状态块的有序队列,然后将两个队列中的每一个状态块分别输入到子步骤6.3的输入中,跳转到子步骤6.3,将子步骤6.3返回的状态块队列替换左右两个状态块有序队列中的原状态块。最后将左右两个状态块有序队列放入子步骤6.4的输入中,跳转到子步骤6.4。
子步骤6.3状态结构一维化子步骤
该子步骤用于将具有头区域、主体和尾区域的树形结构的状态块,降维成无头区域和尾区域的状态块。其特征在于首先若输入的状态块存在头区域则将头区域中的每个状态块放入子步骤6.3的输入中,调用子步骤6.3,将子步骤6.3返回的有序队列放入输出的有序队列中,然后将主体状态块放入输出有序队列,最后输入的状态块存在尾区域则将尾区域中的每个状态块放入子步骤6.3的输入中,调用子步骤6.3,将子步骤6.3返回的有序队列放入输出的有序队列中。
子步骤6.4左有序队列扫描子步骤
该子步骤特征在于若左有序队列不为空,则判断左有序队列的首个状态块的类型,若是顺序块,则将顺序块中的状态数累加到左状态机长度中,若是循环块,则将左循环块信息和右有序队列放入子步骤6.5的输入中,跳转到子步骤6.5,若是嵌套循环块,则该步骤返回长度相同。将左有序队列首个状态块删除,跳转至子步骤6.4。若左有序队列为空,则将右有序队列放入子步骤6.7的输入中,跳转至子步骤6.7。
子步骤6.5右有序队列扫描子步骤
该子步骤特征在于若右有序队列不为空,则判断右有序队列的首个状态块的类型,若是顺序块,则将顺序块中的状态数累加到右状态机长度中,从右有序队列中删除首个状态块,并跳至子步骤6.5;若是循环块,判断输入左循环块信息中总循环次数和右循环块的总循环次数和循环块内状态个数是否一致,若一致则跳至子步骤6.6,若不一致则该步骤返回长度不同。若是嵌套循环块则该步骤返回长度相同。若右有序队列为空,则该步骤返回长度不同。
子步骤6.6右有序队列后扫描子步骤
该子步骤特征在于若有序队列不为空,则判断右有序队列的首个状态块的类型,若是顺序块,则将顺序块中的状态数累加到右状态机长度中,从右有序队列中删除首个状态块,并跳至子步骤6.7;若是循环块或嵌套循环块,则该步骤返回长度不同。若有序队列为空则跳至子步骤6.8。
子步骤6.7循环块差值补偿子步骤
该子步骤用于将总循环次数和循环块内状态个数相同,但已循环次数不等的左右循环块做相等补偿,其特征在于,判断左右已循环次数的大小,将(|左已循环次数-右已循环次数|×循环块内状态个数)累加到已循环次数较小的状态机长度上。从左右有序队列中删除首个状态块,并跳至子步骤6.4。
子步骤6.8状态机长度判断子步骤
其特征在于判断此时左状态机长度和右状态机长度是否相等,若相等,则该步骤返回长度相同,若不相等,则该步骤返回长度不同。
状态机可拼接性和拼接规则判定装置
本发明的状态机可拼接性和拼接规则判定装置(以下简称状态机判定装置)如图1所示。装置包括当前状态块寄存器2、状态块分类模块3、全顺序块处理模块4、全循环块处理模块5、全嵌套循环块处理模块6、长度计算模块8、系统状态寄存器7。装置的输入为待判定状态块队列1。装置输出3种结果,分别是等价变换规则9、不可拼接判断10和可拼接判断11。
该装置每次从待判定状态块队列1中读取一个状态块,经过状态机可拼接性和拼接规则判定方法判定后读取下一个状态块,直至输出3种判定结果中的一种。
待判定状态块队列1为待拼接状态机分解得到的状态块,它分为顺序块、循环块、嵌套循环块3种。
当前状态块寄存器2存储刚刚读入的状态块,每次读取状态块队列中的最外面的值并寄存用于其他模块。
状态块分类模块3实现了该方法中的步骤2状态块分类步骤。该模块读取当前状态块寄存器2和系统状态寄存器7的值,并根据当前状态块类型和系统状态类型从模块4、5、6中选择相应模块进行下一步处理和判定。
全顺序块处理模块4实现了该方法中的步骤3全顺序块处理步骤。该模块工作时从模块3读取当前状态块,并将当前顺序块状态保存至模块7系统状态寄存器中,然后使装置重新读取状态块。若读取结束则输出可拼接判断11。
全循环块处理模块5实现了该方法中的步骤4全循环块处理步骤。该模块工作时从模块3读取当前状态块,并读取模块7系统状态寄存器,然后调用模块8进行长度计算。判断完毕后根据判断结果输出相应判断规则或返回使装置继续读取状态块。
全嵌套循环块处理模块6实现了该方法中的步骤5全嵌套循环块处理步骤。该模块工作时从模块3读取当前状态块,并读取模块7系统状态寄存器,然后调用模块8进行长度计算。判断完毕后根据判断结果输出相应判断规则或返回使装置继续读取状态块。
系统状态寄存器7存储当前系统状态,包括状态块的分类,如全顺序块状态、全循环块状态、全嵌套循环块状态,并存储之前读取的状态块的信息,包括循环体绝对长度等。该模块信息可由模块4、5、6读取,并输出给模块3。该寄存器的值由模块3、4、5、6进行修改。
长度计算模块8实现了该方法中的步骤6长度计算步骤。该模块由模块5全循环处理模块或者模块6全嵌套循环处理模块调用,用于分析和比较循环体的绝对长度并作出循环体相关的可拼接性判断。该方法可输出3中判定结果中的某一种。
输出9、10、11是该装置输出的3中判定输出结果。其中输出9表示当前状态块不能直接拼接,但经过等价变换后可能进行拼接;输出10表示当前状态块不可拼接;输出11表示当前状态块可直接拼接。
下面通过具体实施例对本发明做进一步的阐述。
实施例一:
如图2所示的两个循环状态块,判断其可拼接性和拼接规则。
第一步:步骤1初始化步骤
初始化,将当前状态置为空状态。
第二步:步骤2状态块分类步骤
读取状态块1,当前系统状态为空状态,状态块1为循环块,置当期状态为全循环状态,重新开始步骤2。
第三步:步骤2状态块分类步骤
读取状态块2,当前系统状态为全循环状态,状态块2为循环块,跳转到步骤4。
第四步:步骤4全循环块处理步骤
该步骤判断全循环块的拼接规则。调用步骤6进行长度比较。
第五步:步骤6长度比较步骤
子步骤6.0比较输入子步骤
将状态块1标记为左状态块,状态块2标记为右状态块。
子步骤6.1循环嵌套层次检测子步骤
检测左状态块和右状态块都是非嵌套的,输出1。
子步骤6.2嵌套循环拆解子步骤
由于左状态块和右状态块均为非嵌套循环,该步骤结束后左右状态块不变,跳转到子步骤6.4。
子步骤6.4左有序队列扫描子步骤
左状态块为顺序块,将左循环块信息和右循环块队列放入子步骤6.5的输入中,跳转到子步骤6.5。
子步骤6.5右有序队列扫描子步骤
右循环块为循环块,判断左循环块信息和右循环块信息,两个循环块长度一致,均为3;循环次数一致,均为10。跳至子步骤6.6。
子步骤6.6循环块差值补偿子步骤
(|左已循环次数-右已循环次数|×循环块内状态个数)=0,从左右有序队列中删除首个状态块,并跳至子步骤6.4。
子步骤6.4左有序队列扫描子步骤
左有序队列为空,将右有序队列放入子步骤6.7的输入中,跳转至子步骤6.7。
子步骤6.7右有序队列后扫描子步骤
右有序队列为空,跳至子步骤6.8。
子步骤6.8状态机长度判断子步骤
经过判断,左状态机长度和右状态机长度相等,向步骤4返回长度相同。
第六步:步骤4全循环块处理步骤
该步骤接收到长度比较步骤返回的长度相同信息。比较左右循环块的循环次数,两个循环块循环次数均为10,循环次数相同,保持当前状态为全循环状态,跳至步骤2。
第七步:步骤2状态块分类步骤
状态块队列中的状态块1和状态块2被读取之后,待判定队列为空,没有未读取状态块,当前状态为全循环状态,输出可拼接规则,该方法结束。
实施例二:
如图3所示的两个嵌套循环状态块,判断其可拼接性和拼接规则。
第一步:步骤1初始化步骤
初始化,将当前状态置为空状态。
第二步:步骤2状态块分类步骤
读取状态块1,当前系统状态为空状态,状态块1为嵌套循环块,置当期状态为全嵌套循环状态,重新开始步骡2。
第三步:步骤2状态块分类步骤
读取状态块2,当前系统状态为全嵌套循环状态,状态块2为嵌套循环块,跳转到步骤5。
第四步:步骤5全嵌套循环块处理步骤
该步骤判断全嵌套循环块的拼接规则。调用步骤6进行长度比较。
第五步:步骤6长度比较步骤
子步骤6.0比较输入子步骤
将状态块1标记为左状态块,状态块2标记为右状态块。
子步骤6.1循环嵌套层次检测子步骤
对于左状态块进行判断,左状态块是嵌套循环块,将内部的循环状态块放入子步骤6.1输入中。再次执行子步骤6.1,这个循环块是非嵌套的,输出1。返回调用的步骤6.1,递归调用结束,输出2。
对右状态块进行判断,右状态块是嵌套循环块,将内部的循环状态块放入子步骤6.1输入中。再次执行子步骤6.1,这个循环块是非嵌套的,输出1。返回调用的步骤6.1,递归调用结束,输出2。
子步骤6.2嵌套循环拆解子步骤
将左状态块拆解为1个顺序块、一个循环块放入左有序队列中,右状态块拆解为1个循环块、一个顺序块放入右有序队列中,将两个队列中每一个状态块分别输入到子步骤6.3的输入中,跳转到子步骤6.3。
子步骤6.3状态结构一维化子步骤
该子步骤经过递归调用,输出左右两个有序队列,左有序队列按顺序依次是一个顺序块和一个循环块,右有序队列按顺序依次是一个循环块和一个顺序块。返回子步骤6.2。
子步骤6.2嵌套循环拆解子步骤
调用子步骤6.3结束,将左右两个状态块有序队列放入子步骤6.4的输入中,跳转到子步骤6.4。
子步骤6.4左有序队列扫描子步骤
左有序队列不为空,则判断左有序队列的首个状态块的类型为顺序块,将顺序块中的状态数1累加到左状态机长度中。将左有序队列首个状态块删除,跳转至子步骤6.4。
子步骤6.4左有序队列扫描子步骤
左有序队列不为空,则判断左有序队列的首个状态块的类型为循环块,将左循环块信息和右有序队列放入子步骤6.5的输入中,跳转到子步骤6.5。
子步骤6.5右有序队列扫描子步骤
判断右有序队列的首个状态块的类型为循环块,判断输入左循环块信息中总循环次数和右循环块的总循环次数和循环块内状态个数是否一致,其中左循环块总循环次数为5,循环体内状态个数为2;右循环块总循环次数为5,循环体内状态个数为2。两个循环体总循环次数和循环块内状态个数均一致。跳转至子步骤6.6。
子步骤6.6循环块差值补偿子步骤
(|左已循环次数-右已循环次数|×循环块内状态个数)=0,从左右有序队列中删除首个状态块,并跳至子步骤6.4。
子步骤6.4左有序队列扫描子步骤
左有序队列为空,则将右有序队列放入子步骤6.7的输入中,跳转至子步骤6.7。
子步骤6.7右有序队列后扫描子步骤
右有序队列不为空,则判断右有序队列的首个状态块的类型为顺序块,将顺序块中的状态数1累加到右状态机长度中,从右有序队列中删除首个状态块,并跳至子步骤6.7。
子步骤6.7右有序队列后扫描子步骤
右有序队列为空,跳至子步骤6.8。
子步骤6.8状态机长度判断子步骤
左右状态机长度均为累加值1,长度相等,向步骤5返回长度相同。
第六步:步骤5全循环块处理步骤
该步骤接收到长度比较步骤返回的长度相同信息。比较左右嵌套循环块的循环次数,两个嵌套循环块循环次数均为10,循环次数相同,保持当前状态为全嵌套循环状态,跳至步骤2。
第七步:步骤2状态块分类步骤
状态块队列中的状态块1和状态块2被读取之后,待判定队列为空,没有未读取状态块,当前状态为全嵌套循环状态,输出可拼接规则,该方法结束。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。