本發(fā)明涉及一種基于“逆波蘭式”算法的判據(jù)自動解析方法,屬于自動判讀技術(shù)領(lǐng)域。
背景技術(shù):
現(xiàn)階段,在使用自動判讀技術(shù)的系統(tǒng)中,判據(jù)的管理多采用兩種方式:
第一種方式 直接固化在軟件或硬件中
采用這種方式快速,簡單,但也有其致命的缺點,即缺乏靈活性,維護成本高,如果需要更改其中某項判據(jù),必須對軟件重新進行編譯,或者對芯片重新進行燒寫,無法滿足通用化的要求。
第二種方式 采用配置文件的方式
為達到通用化的目的,可以將判據(jù)保存在單獨的配置文件中,在需要時進行讀取。這種方式提高了靈活性,降低了維護的代價,但由于判據(jù)的復雜性,這種方式只能存儲不需要其他觀測量即可進行判讀的數(shù)據(jù),如+M1母線電壓判據(jù)為28±3V,地球重力加速度G判據(jù)為9.8±0.5m/s2。部分數(shù)據(jù)無法直接進行判讀,需要依據(jù)某些先行觀測量的值進行計算,才能得出相應(yīng)的判據(jù)范圍,如+M1母線漏電的判據(jù)即需要根據(jù)+M1的實際測量值確定,慣組陀螺的某些判據(jù)需要根據(jù)慣組諸元某些參數(shù)確定等,這種數(shù)據(jù)使用配置文件的方式保存較為困難。
在航天領(lǐng)域中,自動判讀技術(shù)被廣泛使用。自動判讀技術(shù)與使用者的接口只有判據(jù),因此判據(jù)的表達是否簡單易用直接影響著自動判讀的效率,如何對判據(jù)進行解析也是自動判讀技術(shù)的關(guān)鍵。
如何有效的配置并自動解析含有參數(shù)的判據(jù)文件是本領(lǐng)域亟待解決的技術(shù)問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種基于“逆波蘭式”算法的判據(jù)自動解析方法,降低自動判讀技術(shù)中判據(jù)管理的復雜度,實現(xiàn)具有依賴值的測量數(shù)據(jù)的自動判讀。
本發(fā)明目的通過如下技術(shù)方案予以實現(xiàn):
提供一種基于“逆波蘭式”算法的判據(jù)自動解析方法,采用“逆波蘭式”算法進行判據(jù)的自動解析和計算,包括如下步驟:
(1)配置判據(jù)文件,將所需判讀的參數(shù)標準值V、上偏差VH、下偏差VL寫入配置文件,標準值V依賴于d,上偏差VH依賴于觀測量d1,下偏差VL依賴于觀測量d2;
(2)自動判讀模塊讀取配置判據(jù)文件,讀取標準值V、上偏差VH、下偏差VL的中序表達式;
(3)采用“逆波蘭式”算法將標準值V、上偏差VH、下偏差VL中的中序表達式轉(zhuǎn)換為后序表達式;
(4)根據(jù)觀測量d、d1、d2的測量結(jié)果,計算標準值V、上偏差VH、下偏差VL數(shù)值;
(5)判斷所需判讀的參數(shù)是否合格。
優(yōu)選的,步驟(1)中將所需判讀的參數(shù)標準值V、上偏差VH、下偏差VL寫入配置文件的具體方法為:
采用常用文本編輯器根據(jù)具體判據(jù)范圍,將參數(shù)標準值V、上偏差VH、下偏差VL按照中序表達式的方式寫入到判據(jù)配置文件中,判據(jù)文件采用UTF-8編碼的文本文件保存。
優(yōu)選的,步驟(2)中自動判讀模塊讀取配置判據(jù)文件,讀取標準值V、上偏差VH、下偏差VL的中序表達式的具體方法為:
以字符串流的方式順序讀入判據(jù)文件,以空格字符分割標準值V,上偏差VH和下偏差VL,以回車換行符區(qū)分不同的參數(shù)名稱。
優(yōu)選的,步驟(3)中采用“逆波蘭式”算法將標準值V、上偏差VH、下偏差VL中的中序表達式轉(zhuǎn)換為后序表達式的具體方法為:
(3.1)在內(nèi)存中分配兩個堆棧S1和S2,分別用于臨時存儲運算符和轉(zhuǎn)換后的逆波蘭式;
(3.2)依次讀取中序表達式,若讀入的是操作數(shù),則將操作數(shù)輸出到堆棧S2;
(3.3)若取出的字符是運算符Op,如果此時堆棧S1為空,則將該運算符保存入堆棧S1,如果此時堆棧S1非空,則將該運算符Op與堆棧S1棧頂?shù)牟僮鞣麅?yōu)先級做比較,若低于堆棧S1棧頂操作符優(yōu)先級,則將堆棧S1棧頂操作符彈出,壓入S2堆棧,再將該運算符Op與堆棧S1棧頂?shù)牟僮鞣麅?yōu)先級做比較,重復該操作直至棧頂運算符優(yōu)先級不高于運算符Op的優(yōu)先級,將運算符Op入堆棧S1;若運算符Op優(yōu)先級高于棧頂運算符優(yōu)先級,則直接將運算符Op存入堆棧S1;
對于運算符‘(’,則直接存入堆棧S1,若為‘)’,則將距離S1棧頂最近的‘(’及S1棧頂之間的字符彈出并依次送入堆棧S2,并丟棄‘(’;
(3.4)重復以上步驟3.1~3.2,直到單個表達式解析完,最后將堆棧S1中的所有運算符彈出并壓入堆棧S2,此時依次彈出堆棧S2中的字符構(gòu)成的字符串即為轉(zhuǎn)換后的后序表達式。
優(yōu)選的,運算符的優(yōu)先級如下:最高優(yōu)先級包括乘號“*”和除號“÷”,最低優(yōu)先級包括加號“+”和減號“-”。
優(yōu)選的,步驟(4)中計算標準值V、上偏差VH、下偏差VL數(shù)值的具體方法為:
(4.1)取得觀測量d、d1、d2;
(4.2)將觀測量d、d1、d2分別代入步驟(3)中轉(zhuǎn)換所得的后序表達式中,替代表達式中變量的值;
(4.3)在內(nèi)存中新建一個堆棧S0,依次讀取后續(xù)表達式中的字符,若讀入的字符是數(shù)字,則壓入堆棧S0;如果是運算符,則將S0中最上面的兩個操作數(shù)彈出并利用運算符進行相應(yīng)運算,將運算結(jié)果壓入堆棧S0,當表達式掃描完,堆棧S0中的數(shù)值即為計算結(jié)果。
本發(fā)明與現(xiàn)有技術(shù)相比具有如下優(yōu)點:
(1)本發(fā)明的“逆波蘭式”算法的判據(jù)自動解析方法,實現(xiàn)了具有依賴值的測量數(shù)據(jù)的自動解析和判讀,解決了傳統(tǒng)技術(shù)無法在配置文件中對間接判據(jù)進行配置的弊端,使得判讀技術(shù)更為靈活,通用。
(2)用戶使用時只需按照正常理解輸入中序表達式,該技術(shù)可自動轉(zhuǎn)換為計算機容易理解的“逆波蘭式”,進而進行解析、計算,避免了人為操作可能導致的錯誤。
附圖說明
圖1為本發(fā)明自動判讀原理示意圖;
圖2為本發(fā)明自動判讀方法流程圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明作進一步詳細說明。
“逆波蘭式”算法的判據(jù)自動解析方法包括如下步驟:
(1)配置判據(jù)文件,將所需判讀的參數(shù)標準值V、上偏差VH、下偏差VL寫入配置文件,標準值V依賴于d,上偏差VH依賴于觀測量d1,下偏差VL依賴于觀測量d2;采用常用文本編輯器根據(jù)具體判據(jù)范圍,將參數(shù)標準值V、上偏差VH、下偏差VL按照中序表達式的方式寫入到判據(jù)配置文件中,判據(jù)文件采用UTF-8編碼的文本文件保存,以方便操作者編寫以及計算機讀取。
(2)自動判讀模塊讀取配置判據(jù)文件,讀取標準值V、上偏差VH、下偏差VL的中序表達式;以字符串流的方式順序讀入判據(jù)文件,以空格字符分割標準值V,上偏差VH和下偏差VL,以回車換行符區(qū)分不同的參數(shù)名稱。
(3)采用“逆波蘭式”算法將標準值V、上偏差VH、下偏差VL中的中序表達式轉(zhuǎn)換為后序表達式;
3.1在內(nèi)存中分配兩個堆棧S1和S2,分別用于臨時存儲運算符和轉(zhuǎn)換后的逆波蘭式;
3.2依次讀取中序表達式,若讀入的是操作數(shù),則將操作數(shù)輸出到堆棧S2;
3.3若取出的字符是運算符Op,如果此時堆棧S1為空,則將該運算符保存入堆棧S1,如果此時堆棧S1非空,則將該運算符Op與堆棧S1棧頂?shù)牟僮鞣麅?yōu)先級做比較,若低于堆棧S1棧頂操作符優(yōu)先級,則將堆棧S1棧頂操作符彈出,壓入S2堆棧,再將該運算符Op與堆棧S1棧頂?shù)牟僮鞣麅?yōu)先級做比較,重復該操作直至棧頂運算符優(yōu)先級不高于運算符Op的優(yōu)先級,將運算符Op入堆棧S1;若運算符Op優(yōu)先級高于棧頂運算符優(yōu)先級,則直接將運算符Op存入堆棧S1;
對于運算符‘(’,則直接存入堆棧S1,若為‘)’,則將距離S1棧頂最近的‘(’及S1棧頂之間的字符彈出并依次送入堆棧S2,并丟棄‘(’;
3.4重復以上步驟3.1~3.2,直到單個表達式解析完,最后將堆棧S1中的所有運算符彈出并壓入堆棧S2,此時依次彈出堆棧S2中的字符構(gòu)成的字符串即為轉(zhuǎn)換后的后序表達式。
運算符的優(yōu)先級如下:最高優(yōu)先級包括乘號“*”和除號“÷”,最低優(yōu)先級包括加號“+”和減號“-”。
(4)根據(jù)觀測量d、d1、d2的測量結(jié)果,計算標準值V、上偏差VH、下偏差VL數(shù)值;
4.1取得觀測量d、d1、d2;
4.2將觀測量d、d1、d2分別代入步驟(3)中轉(zhuǎn)換所得的后序表達式中,替代表達式中變量的值;
4.3在內(nèi)存中新建一個堆棧S0,依次讀取后續(xù)表達式中的字符,若讀入的字符是數(shù)字,則壓入堆棧S0;如果是運算符,則將S0中最上面的兩個操作數(shù)彈出并利用運算符進行相應(yīng)運算,將運算結(jié)果壓入堆棧S0,當表達式掃描完,堆棧S0中的數(shù)值即為計算結(jié)果。
(5)判斷所需判讀的參數(shù)是否合格。即判斷計算結(jié)果是否在合格范圍內(nèi),并輸出判讀結(jié)果。
實施例:
如在慣組的某項測試中,參數(shù)NGX的判讀標準值為(98+11*D0x)÷Kgx,上偏差為6÷Kgx,下偏差為-5÷Kgx,則配置文件采用如下的描述方式:
為了方便計算機解析,需要先將中序表達式轉(zhuǎn)換為“逆波蘭式”。逆波蘭式是將運算符號置于操作數(shù)之后的一種表達方式,這種表達方式對于計算機解析非常方便。轉(zhuǎn)換后的后序表達式如下:
在需要對待判讀參數(shù)進行判讀之前,所依賴的其他所有參數(shù)值均應(yīng)為已確定的,如對NGX進行判讀前,所依賴的D0x,Kgx均可從慣組諸元中取得,因此計算機對上述逆波蘭式進行解析、計算,即可得出判讀所需的標準值、上偏差和下偏差。
本發(fā)明設(shè)計了基于“逆波蘭式”算法的判據(jù)自動解析技術(shù),逆波蘭式(Reverse Polish Notation)又稱為后綴表達式,后綴表達式將二元運算符放置在操作數(shù)之后,相比與中綴表達式的記法更加符合計算機處理表達式的邏輯順序,易于計算機執(zhí)行。
在本發(fā)明中,用戶可直接將判據(jù)的計算公式采用自然語言描述,記錄在配置文件中,該技術(shù)可以自動解析采用自然語言描述的數(shù)學公式,將其轉(zhuǎn)換為方便計算機處理的“逆波蘭式”,進而計算出判據(jù)的具體范圍,對待判讀量進行判讀。
以上所述,僅為本發(fā)明最佳的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。
本發(fā)明說明書中未作詳細描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員的公知技術(shù)。