通過逆波蘭表達式對五防邏輯表達式進行校驗的方法
【技術領域】
[0001]本發(fā)明涉及電子信息及數(shù)據(jù)處理技術領域,具體涉及一種通過逆波蘭表達式對五防邏輯表達式進行校驗的方法。
【背景技術】
[0002]變電站的倒閘操作需要使用操作票,而操作票中的操作步驟的合法性,需要由五防軟件進行判斷,目前五防軟件的判斷依據(jù)只有兩種方法:(I)五防邏輯校核表達式;(2)電網(wǎng)拓樸分析。但是由于電網(wǎng)拓樸分析不具備可視性,一般的變電站要求必須采用五防邏輯校核表達式判斷操作步驟的合法性。綜上,一般變電站進行倒閘操作必須得使用五防邏輯校核表達式。
[0003]—種五防邏輯校核表達式的結構,例如:
[0004]“1115-3L: {} 1111115 = 10,(1115-1=01+1115-2 = 01)!”解釋如下:
[0005]1115-3L:此為操作設備與狀態(tài),表示該條邏輯表達式是對1115-3編號的設備進行分操作(L為分操作,H為合操作);
[0006]{}| I 1:此為情況條件,表示該邏輯表達式是單一情況操作。如果有多種情況條件,那么會表達成“{...} I 2 1...; I 11...!”,且沒有個數(shù)限制。多種情況條件下,情況條件I中“{Γ中不能有語句,其他情況條件的“{}”必須都存在語句,同時必須為高條件在前,低條件在后。例如:1115H:{ 1115 = 00} |2|...} 111...!;
[0007]1115 = 10,(1115-1 = 01+1115-2 = 01)!:此為第一種情況條件對應的邏輯表達式,表示滿足當前設備操作需要的其他設備狀態(tài)。其中“=”左側表示當前需要判斷的設備,右側第二位表示當前設備需要判斷的設備需要的狀態(tài),右側第一位表示如果當前設備需要判斷的設備需要的狀態(tài)與其實際狀態(tài)不符的錯誤原因序號;“,”表示“且”的意思;“O”表示括號內(nèi)的是一個整體,優(yōu)先判斷;“+”表示或的意思。
[0008]那么當前這條表達式解釋為1115-3設備需要分開的條件為:1115當前狀態(tài)為分(如果不為分,提示為I號錯誤),而且1115-1或者1115-2當前狀態(tài)為合(如果都不滿足,提示O號錯誤)。
[0009]五防邏輯校核表達式直接關系到電網(wǎng)的人身與財產(chǎn)安全,但是五防邏輯校核表達式中存在校核優(yōu)先級順序,導致表達式中存在“O”等來表明優(yōu)先級的符號。
[0010]如此,存在一個明顯缺陷:程序員在編寫代碼時,判斷當前設備是否滿足五防邏輯表達式的語句,進行表達式字符串拆分時,會對含有多重“O”的表達式進行拆分,難免會出現(xiàn)拆分錯誤或者考慮不全面的情況,引起變電站現(xiàn)場倒閘操作的錯誤,嚴重時,會影響操作人員的人生安全。
[0011]波蘭邏輯學家J.Lukasiewi CZ于1929年提出了逆波蘭表達式,逆波蘭表達式又叫做后綴表達式,下面是一些例子:
[0012]正常的表達式逆波蘭表達式
[0013]a+b--->a,b,+
[0014]a+(b_c)--->a,b,c,-,+
[0015]a+(b_c)*d--->a,b,c,-,d,*,+
[0016]a+d*(b_c)--->a,d,b,c,-,*,+
[0017]a = 1+3--->a = 1,3+
[0018]它將復雜表達式轉換為可以依靠簡單的操作得到計算結果的表達式。例如(a+b)*(c+d)轉換為ab+cd+*。它的優(yōu)勢在于只用兩種簡單操作,入棧和出棧就可以搞定任何普通表達式的運算。其運算方式如下:
[0019]如果當前字符為變量或者為數(shù)字,則壓棧,如果是運算符,則將棧頂兩個元素彈出作相應運算,結果再入棧,最后當表達式掃描完后,棧里的就是結果。
【發(fā)明內(nèi)容】
[0020]本發(fā)明提供一種通過逆波蘭表達式對五防邏輯表達式進行校驗的方法,能夠在五防邏輯校核表達式轉換成逆波蘭表達式的過程中,把最明顯的缺陷一一“()”全部轉換掉,從而完全避免在判斷當前設備是否滿足五防邏輯表達式的語句時,可能出現(xiàn)的問題。本發(fā)明的目的由以下技術方案實現(xiàn):
[0021 ] 一種通過逆波蘭表達式對五防邏輯表達式進行校驗的方法,如下:
[0022](I)首先構造一個運算符棧SI和逆波蘭棧S2,運算符在運算符棧SI內(nèi)遵循越往棧頂優(yōu)先級越尚的原則;
[0023](2)讀入需要操作設備對應狀態(tài)的五防邏輯;
[0024](3)判斷是否存在沒有轉換的情況條件,存在則進入步驟(4),否則邏輯校驗不通過并結束;
[0025](4)讀入該情況條件下對應的五防邏輯表達式,并從左至右掃描該情況條件下對應的五防邏輯表達式;
[0026](5)如果當前字符是數(shù)字,則分析到該數(shù)字串的結束并將該數(shù)字串直接輸出并壓入逆波蘭棧S2;如果不是數(shù)字,該字符則是運算符,此時需比較優(yōu)先關系后再將該字符壓入逆波蘭棧S2 ;
[0027](6)重復步驟(5)直至掃描完該情況條件下對應的五防邏輯表達式,確定所有字符都得到處理,便將該情況條件下對應的五防邏輯表達式轉化為逆波蘭表示的簡單算術表達式;
[0028](7)將逆波蘭棧S2中所有元素出棧,組成字符串,各個元素之間以“I”分割,并對轉換完成的逆波蘭表達式進行求值運算;
[0029](8)判斷求值結果是否通過,通過則提示校驗通過可以操作,否則返回步驟(3)。
[0030]作為具體的技術方案,所述步驟(5)中比較優(yōu)先關系的做法如下:將該字符與運算符棧SI棧頂?shù)倪\算符的優(yōu)先關系相比較,如果該字符優(yōu)先關系高于此運算符棧頂?shù)倪\算符,則將該字符壓入逆波蘭棧S2,否則將棧頂?shù)倪\算符從運算符棧SI中彈出,如此比較,直到運算符棧SI棧頂運算符的優(yōu)先級低于當前運算符,將該字符壓入逆波蘭棧S2。
[0031]本發(fā)明的有益效果在于,根據(jù)逆波蘭表達式將傳統(tǒng)的五防邏輯表達式進行轉換,剔除表達式中復雜的算術符號“O”,只留下最簡單的運算,能夠保證方法的正確性的同時,減少程序員出現(xiàn)BUG的可能性,提高五防軟件對于五防校驗的準確性,同時能減少測試部門的測試壓力。
【附圖說明】
[0032]圖1為逆波蘭表達式轉換流程圖。
[0033]圖2為本發(fā)明提供的通過逆波蘭表達式對五防邏輯表達式進行校驗的方法的流程圖。
【具體實施方式】
[0034]如圖1所示,將一個普通的中序表達式轉換為逆波蘭表達式的一般算法是:
[0035](I)首先構造一個運算符棧SI和逆波蘭棧S2,運算符在運算符棧SI內(nèi)遵循越往棧頂優(yōu)先級越