為全嵌套循環(huán)狀態(tài),記錄當(dāng)前循環(huán)塊的循環(huán)長(zhǎng)度,重新開(kāi)始步驟2 ; 若當(dāng)前狀態(tài)為全順序狀態(tài): 若讀取的狀態(tài)塊為順序塊,則跳轉(zhuǎn)到步驟3 ; 若讀取的狀態(tài)塊為循環(huán)塊或嵌套循環(huán)塊,則修改當(dāng)前狀態(tài)為非全順序狀態(tài),輸出等價(jià)變換規(guī)則,該方法結(jié)束; 若當(dāng)前狀態(tài)為全循環(huán)狀態(tài): 若讀取的狀態(tài)塊為循環(huán)塊,則跳轉(zhuǎn)到步驟4 ; 若讀取的狀態(tài)塊為順序塊,則修改當(dāng)前狀態(tài)為非全順序狀態(tài),輸出等價(jià)變換規(guī)則,該方法結(jié)束; 若讀取的狀態(tài)塊為嵌套循環(huán)塊,則修改當(dāng)前狀態(tài)為非全循環(huán)狀態(tài),輸出等價(jià)變換規(guī)則,該方法結(jié)束; 若當(dāng)前狀態(tài)為全嵌套循環(huán)狀態(tài): 若讀取的狀態(tài)塊為嵌套循環(huán)塊,則跳轉(zhuǎn)到步驟5 ; 若讀取的狀態(tài)塊為順序塊,則修改當(dāng)前狀態(tài)為非全順序狀態(tài),輸出等價(jià)變換規(guī)則,該方法結(jié)束; 若讀取的狀態(tài)塊為循環(huán)塊,則修改當(dāng)前狀態(tài)為非全循環(huán)狀態(tài),輸出等價(jià)變換規(guī)則,該方法結(jié)束; 若讀取待判定狀態(tài)塊隊(duì)列為空,且當(dāng)前狀態(tài)為全順序狀態(tài)、全循環(huán)狀態(tài)或全嵌套循環(huán)狀態(tài),則輸出可拼接規(guī)則,該方法結(jié)束。
3.根據(jù)權(quán)利要求1所述的狀態(tài)機(jī)可拼接性和拼接規(guī)則判定方法,其中步驟6中所述長(zhǎng)度與循環(huán)體長(zhǎng)度、總循環(huán)次數(shù)和已循環(huán)次數(shù)相關(guān),表示為:長(zhǎng)度=循環(huán)體長(zhǎng)度X (總循環(huán)次數(shù)-已循環(huán)次數(shù))。
4.根據(jù)權(quán)利要求1所述的狀態(tài)機(jī)可拼接性和拼接規(guī)則判定方法,其中步驟6中所述確定輸入的兩個(gè)循環(huán)塊或兩個(gè)嵌套循環(huán)塊長(zhǎng)度是否一致的步驟包括: 子步驟6.0,將輸入的兩個(gè)待比較狀態(tài)塊標(biāo)記為一個(gè)左狀態(tài)塊,一個(gè)右狀態(tài)塊,作為比較步驟的左輸入和右輸入; 子步驟6.1,輸出輸入循環(huán)體的嵌套重?cái)?shù);若循環(huán)體是非嵌套的,則輸出I ;若是嵌套循環(huán)塊,則將嵌套循環(huán)塊內(nèi)的除順序塊外的所有狀態(tài)塊放入步驟6.1的輸入中,執(zhí)行步驟6.1,從步驟6.1的輸出中選出最大的值,輸出最大值加I ; 子步驟6.2,首先取出左狀態(tài)塊和右狀態(tài)塊嵌套循環(huán)塊內(nèi)的所有狀態(tài)塊構(gòu)成左右兩個(gè)狀態(tài)塊的有序隊(duì)列,然后將兩個(gè)隊(duì)列中的每一個(gè)狀態(tài)塊分別輸入到子步驟6.3的輸入中,跳轉(zhuǎn)到子步驟6.3,將子步驟6.3返回的狀態(tài)塊隊(duì)列替換左右兩個(gè)狀態(tài)塊有序隊(duì)列中的原狀態(tài)塊,最后將左右兩個(gè)狀態(tài)塊有序隊(duì)列放入子步驟6.4的輸入中,跳轉(zhuǎn)到子步驟6.4 ; 子步驟6.3,將具有頭區(qū)域、主體和尾區(qū)域的樹(shù)形結(jié)構(gòu)的狀態(tài)塊,降維成無(wú)頭區(qū)域和尾區(qū)域的狀態(tài)塊; 子步驟6.4,若左有序隊(duì)列不為空,則判斷左有序隊(duì)列的首個(gè)狀態(tài)塊的類型,若是順序塊,則將順序塊中的狀態(tài)數(shù)累加到左狀態(tài)機(jī)長(zhǎng)度中,若是循環(huán)塊,則將左循環(huán)塊信息和右有序隊(duì)列放入子步驟6.5的輸入中,跳轉(zhuǎn)到子步驟6.5,若是嵌套循環(huán)塊,則該步驟返回長(zhǎng)度相同;將左有序隊(duì)列首個(gè)狀態(tài)塊刪除,跳轉(zhuǎn)至子步驟6.4 ;若左有序隊(duì)列為空,則將右有序隊(duì)列放入子步驟6.7的輸入中,跳轉(zhuǎn)至子步驟6.7 ; 子步驟6.5,若右有序隊(duì)列不為空,則判斷右有序隊(duì)列的首個(gè)狀態(tài)塊的類型,若是順序塊,則將順序塊中的狀態(tài)數(shù)累加到右狀態(tài)機(jī)長(zhǎng)度中,從右有序隊(duì)列中刪除首個(gè)狀態(tài)塊,并跳至子步驟6.5 ;若是循環(huán)塊,判斷輸入左循環(huán)塊信息中總循環(huán)次數(shù)和右循環(huán)塊的總循環(huán)次數(shù)和循環(huán)塊內(nèi)狀態(tài)個(gè)數(shù)是否一致,若一致則跳至子步驟6.6,若不一致則該步驟返回長(zhǎng)度不同;若是嵌套循環(huán)塊則該步驟返回長(zhǎng)度相同;若右有序隊(duì)列為空,則該步驟返回長(zhǎng)度不同; 子步驟6.6,若有序隊(duì)列不為空,則判斷右有序隊(duì)列的首個(gè)狀態(tài)塊的類型,若是順序塊,則將順序塊中的狀態(tài)數(shù)累加到右狀態(tài)機(jī)長(zhǎng)度中,從右有序隊(duì)列中刪除首個(gè)狀態(tài)塊,并跳至子步驟6.7 ;若是循環(huán)塊或嵌套循環(huán)塊,則該步驟返回長(zhǎng)度不同。若有序隊(duì)列為空則跳至子步驟6.8 ; 子步驟6.7,將總循環(huán)次數(shù)和循環(huán)塊內(nèi)狀態(tài)個(gè)數(shù)相同,但已循環(huán)次數(shù)不等的左右循環(huán)塊做相等補(bǔ)償;從左右有序隊(duì)列中刪除首個(gè)狀態(tài)塊,并跳至子步驟6.4 ; 子步驟6.8,判斷此時(shí)左狀態(tài)機(jī)長(zhǎng)度和右狀態(tài)機(jī)長(zhǎng)度是否相等,若相等,則該步驟返回長(zhǎng)度相同,若不相等,則該步驟返回長(zhǎng)度不同。
5.根據(jù)權(quán)利要求4所述的狀態(tài)機(jī)可拼接性和拼接規(guī)則判定方法,其中子步驟6.3中所述將具有頭區(qū)域、主體和尾區(qū)域的樹(shù)形結(jié)構(gòu)的狀態(tài)塊,降維成無(wú)頭區(qū)域和尾區(qū)域的狀態(tài)塊的步驟包括: 首先若輸入的狀態(tài)塊存在頭區(qū)域則將頭區(qū)域中的每個(gè)狀態(tài)塊放入子步驟6.3的輸入中,調(diào)用子步驟6.3,將子步驟6.3返回的有序隊(duì)列放入輸出的有序隊(duì)列中,然后將主體狀態(tài)塊放入輸出有序隊(duì)列,最后輸入的狀態(tài)塊存在尾區(qū)域則將尾區(qū)域中的每個(gè)狀態(tài)塊放入子步驟6.3的輸入中,調(diào)用子步驟6.3,將子步驟6.3返回的有序隊(duì)列放入輸出的有序隊(duì)列中。
6.根據(jù)權(quán)利要求4所述的狀態(tài)機(jī)可拼接性和拼接規(guī)則判定方法,其中子步驟6.7中所述將總循環(huán)次數(shù)和循環(huán)塊內(nèi)狀態(tài)個(gè)數(shù)相同,但已循環(huán)次數(shù)不等的左右循環(huán)塊做相等補(bǔ)償?shù)牟襟E包括:判斷左右已循環(huán)次數(shù)的大小,將(I左已循環(huán)次數(shù)-右已循環(huán)次數(shù)I X循環(huán)塊內(nèi)狀態(tài)個(gè)數(shù))累加到已循環(huán)次數(shù)較小的狀態(tài)機(jī)長(zhǎng)度上。
7.一種狀態(tài)機(jī)可拼接性和拼接規(guī)則判定裝置,包括當(dāng)前狀態(tài)塊寄存器(2)、狀態(tài)塊分類模塊(3)、全順序塊處理模塊(4)、全循環(huán)塊處理模塊(5)、全嵌套循環(huán)塊處理模塊(6)、長(zhǎng)度計(jì)算模塊(8)和系統(tǒng)狀態(tài)寄存器(7),其中 所述判定裝置每次從待判定狀態(tài)塊隊(duì)列(I)中讀取一個(gè)狀態(tài)塊,所述當(dāng)前狀態(tài)塊寄存器(2)存儲(chǔ)剛剛讀入的狀態(tài)塊; 所述狀態(tài)塊分類模塊(3)讀取所述當(dāng)前狀態(tài)塊寄存器(2)和所述系統(tǒng)狀態(tài)寄存器(7)的值,并根據(jù)當(dāng)前狀態(tài)塊類型和系統(tǒng)狀態(tài)類型從所述全順序塊處理模塊(4)、全循環(huán)塊處理模塊(5)、全嵌套循環(huán)塊處理模塊¢)中選擇相應(yīng)模塊進(jìn)行下一步處理和判定; 所述全順序塊處理模塊(4)從所述狀態(tài)塊分類模塊(3)中讀取當(dāng)前狀態(tài)塊,并將當(dāng)前順序塊狀態(tài)保存至所述系統(tǒng)狀態(tài)寄存器(7)中,然后使所述判定裝置重新讀取狀態(tài)塊;若讀取結(jié)束則輸出可拼接判斷(11); 所述全循環(huán)塊處理模塊(5)從所述狀態(tài)塊分類模塊(3)中讀取當(dāng)前狀態(tài)塊,并讀取所述系統(tǒng)狀態(tài)寄存器(7),然后調(diào)用所述長(zhǎng)度計(jì)算模塊(8)進(jìn)行長(zhǎng)度計(jì)算;判斷完畢后根據(jù)判斷結(jié)果輸出相應(yīng)判斷規(guī)則或返回使所述判定裝置繼續(xù)讀取狀態(tài)塊; 所述全嵌套循環(huán)塊處理模塊(6)從所述狀態(tài)塊分類模塊(3)中讀取當(dāng)前狀態(tài)塊,并讀取所述系統(tǒng)狀態(tài)寄存器(7),然后調(diào)用所述長(zhǎng)度計(jì)算模塊(8)進(jìn)行長(zhǎng)度計(jì)算;判斷完畢后根據(jù)判斷結(jié)果輸出相應(yīng)判斷規(guī)則或返回使所述判定裝置繼續(xù)讀取狀態(tài)塊; 所述系統(tǒng)狀態(tài)寄存器(7)存儲(chǔ)當(dāng)前系統(tǒng)狀態(tài),包括狀態(tài)塊的分類,并存儲(chǔ)之前讀取的狀態(tài)塊的信息;以及 所述長(zhǎng)度計(jì)算模塊(8)由所述全循環(huán)處理模塊(5)或所述全嵌套循環(huán)塊處理模塊(6)調(diào)用,用于分析和比較循環(huán)體的絕對(duì)長(zhǎng)度并作出循環(huán)體相關(guān)的可拼接性判斷。
8.根據(jù)權(quán)利要求7所述的狀態(tài)機(jī)可拼接性和拼接規(guī)則判定裝置,所述判定裝置輸出3種結(jié)果,分別是等價(jià)變換規(guī)則(9)、不可拼接判斷(10)和可拼接判斷(11),其中所述等價(jià)變換規(guī)則(9)表示當(dāng)前狀態(tài)塊不能直接拼接,但經(jīng)過(guò)等價(jià)變換后可能進(jìn)行拼接,所述不可拼接判斷(10)表示當(dāng)前狀態(tài)塊不可拼接,所述可拼接判斷(11)表示當(dāng)前狀態(tài)塊可直接拼接。
9.根據(jù)權(quán)利要求7所述的狀態(tài)機(jī)可拼接性和拼接規(guī)則判定裝置,其中所述待判定狀態(tài)塊隊(duì)列(I)為待拼接狀態(tài)機(jī)分解得到的狀態(tài)塊,分為順序塊、循環(huán)塊、嵌套循環(huán)塊3種。
10.根據(jù)權(quán)利要求7所述的狀態(tài)機(jī)可拼接性和拼接規(guī)則判定裝置,其中所述長(zhǎng)度計(jì)算模塊(8)進(jìn)行長(zhǎng)度計(jì)算的公式為:長(zhǎng)度=循環(huán)體長(zhǎng)度X (總循環(huán)次數(shù)-已循環(huán)次數(shù))。
【專利摘要】本發(fā)明公開(kāi)了一種狀態(tài)機(jī)拼接規(guī)則判定方法,以及基于該方法的狀態(tài)機(jī)判定裝置。本方法均以狀態(tài)塊為判定對(duì)象,對(duì)于兩個(gè)或多個(gè)狀態(tài)塊,判斷它們是否具有可拼接性,以及拼接生成的復(fù)合狀態(tài)塊的類型,生成復(fù)合狀態(tài)塊的類型包括含有嵌套循環(huán)塊的全循環(huán)塊類型、非全順序塊類型、全順序塊類型、全循環(huán)塊類型和全嵌套循環(huán)塊類型。本發(fā)明的方法能夠保證狀態(tài)機(jī)拼接過(guò)程正確和高效地進(jìn)行,本發(fā)明的裝置作為合并狀態(tài)機(jī)的重要子裝置,更加方便拼接裝置的調(diào)試和修改,以及功能的移植和增加。
【IPC分類】G06F9-38, G06F9-46
【公開(kāi)號(hào)】CN104572029
【申請(qǐng)?zhí)枴緾N201410836240
【發(fā)明人】王磊, 楊磊, 謝少林
【申請(qǐng)人】中國(guó)科學(xué)院自動(dòng)化研究所
【公開(kāi)日】2015年4月29日
【申請(qǐng)日】2014年12月26日