專利名稱:一種表達式的解析方法
技術領域:
本發明涉及到計算機系統中表達式的解析方法,特別涉及到一種復雜表達式的解析方法。
背景技術:
閾值管理系統是網絡管理系統(NMS,簡稱網管系統)中性能管理子系統的核心子模塊。通常情況下,所述的閾值管理系統根據網管系統上報的監測數據,對用戶輸入的用于報警判決的表達式進行解析計算,然后再根據所述的計算結果判斷是否需要開啟或者關閉報警系統,從而實現網管系統中的性能管理。從上述閾值管理過程可以看出,對用戶所輸入表達式的解析方法是網管系統進行性能管理較為關鍵的技術之一。
現有閾值管理系統解析表達式的方法主要包括以下步驟A、檢驗用戶所輸入表達式的合法性。
通常情況下,用戶輸入的表達式中包含預先定義的操作符和操作數,對于閾值管理系統解析的表達式來講,其中包含的操作數也就是網管系統正在監測的測量單元的名稱,這些測量單元名稱代表了當前網管系統進行性能測試時所使用的參數值。
在表達式合法性的檢驗過程中,首先需要從待檢驗的表達式中分別識別出所包含的操作數和操作符,然后再檢驗該表達式是否符合規定。
在現有技術中,對于普通的表達式,其中可能包含的所有操作符均是預先定義的運算符,并且這些運算符很容易被閾值管理系統識別,而表達式中包含的操作數則是多種多樣、不容易識別的。因此,在表達式的解析過程中,閾值管理系統通常將表達式中的操作符當作操作數之間的分隔符來識別該表達式所包含的不同操作數。
例如,用戶輸入的表達式為((Traffic>10)&&(Load<2)),它所包括的操作符有(、)、>、&&、<;所包含的操作數有Traffic、10、Load以及2,其中,Traffic、Load為兩個網管系統需要監測的測量單元名稱。
由于操作符(、)、>、&&、<均為預先定義的運算符,可以較容易的被閾值管理系統識別,因此,在合法性的檢驗之前,閾值管理系統會將該表達式中的操作符(、)、>、&&、<作為其操作數Traffic、10、Load以及2之間分隔符來進行表達式的解析。例如,在解析過程中,當閾值管理系統檢索到操作符(和>時,就可以判斷出這兩個操作符之間的Traffic是一個操作數;同樣,當繼續檢測到后面的操作符)時,就可以判斷出操作符>和)之間的10是另一個操作數。以此類推,閾值管理系統就可以依次區分出該表達式所包含的所有操作符以及操作數,然后再進行表達式的合法性檢驗。
B、將檢驗合法的表達式從前項表達式轉換為后項表達式。
通常情況下,在表達式的計算過程中均是使用堆棧來存儲所述操作數和操作符的,因此,為了方便堆棧的存儲、加快表達式計算的速度,在表達式的合法性檢驗之后,還需要對檢驗合法的表達式進行從前項表達式到后項表達式的轉換。這種前項表達式到后項表達式的轉換方法與計算機編譯中所使用的前項表達式到后項表達式的轉換方法基本相同,在這里就不再詳細描述了。
例如,使用現有的前項表達式到后項表達式的轉換方法,對上述表達式((Traffic>10)&&(Load<2))進行轉換后,得到的后項表達式為Traffic 10>Load 2<&&,該轉換后的后項表達式雖然與前面所述的前項表達式在表現形式上有所不同,但是二者在表達式的計算過程中是等價的。
在經過上述前項表達式到后項表達式的轉換后,閾值管理系統就會將上述后項表達式按照轉換后的順序存儲在堆棧中,這樣,閾值管理系統在接收到網管系統上報的數據報告后,就可以立即將存儲在堆棧中的操作數替換為上報的數據,并快速完成表達式的計算。
例如上述后項表達式Traffic 10>Load2<&&在堆棧中存儲的順序如表1所示
表1C、計算所述表達式的值,根據計算結果進行報警判決。
在堆棧中記錄的操作數比較容易識別并且也容易用相應的數值替換,因此,當閾值管理系統接收到網管系統上報的測量數據時,閾值管理系統會立即將存儲在堆棧中的操作數替換為網管系統上報的數據,并快速按照堆棧中記錄的操作數以及操作符順序計算出該表達式的值,從而判斷是否需要開啟或者關閉報警系統,完成系統的性能管理。
上述現有的表達式解析方法可以對用戶輸入的一般閾值管理表達式進行解析計算,并最終完成報警判決,實現系統的性能管理。但是,由于上述方法在表達式的合法性檢驗以及前向表達式到后項表達式的轉換過程中是以操作符作為操作數之間的分隔符來識別該表達式中包含的不同操作數的,因此,當上述方法應用到操作數本身包含操作符的表達式解析及計算過程時,就會產生錯誤。
例如,將上述待計算的表達式替換為((Traffic-Per-Hour>10)&&(Load<2)),其中,Traffic-Per-Hour為網管系統監測的一個測量單元的名稱,也就是上述表達式的一個操作數。如果按照現有技術的方法,對上述表達式進行合法性檢驗或者在對上述表達式進行前項表達式到后項表達式的轉換時,閾值管理系統會將操作數Traffic-Per-Hour中的連接符號-識別為操作符-,從而會錯誤的將Traffic-Per-Hour識別成三個操作數Traffic、Per以及Hour相減。很顯然,通過這種方法解析上述表達式是不正確的。
發明內容
為了解決上述技術問題,本發明提供了一種表達式的解析方法,可以正確解析在操作數中包含操作符的表達式,實現完整的表達式合法性檢驗、前項表達式到后項表達式的轉換以及表達式計算過程,最終完成閾值管理系統的正確判決。
本發明所述方法包括如下步驟A、將所述表達式中出現的操作數依次替換為該操作數的替換名,其中,所述替換名與操作數為一一對應;B、對經步驟A替換得到的表達式進行合法性檢驗及前項表達式到后項表達式的轉換;C、按照操作數與替換名的一一對應關系,將步驟B得到的后項表達式中所包含的替換名依次替換成為原來的操作數;D、當網管系統上報數據報告時,計算經步驟C替換得到的表達式。
所述方法在步驟A之前進一步包括A0、將網管系統提供的所有操作數,按照操作數中字符數的多少從大到小重新排序,生成操作數列表;所述步驟A為根據步驟A0生成的操作數列表,將所述表達式中出現的操作數依次替換為與之一一對應的替換名。
步驟A所述替換為根據所述操作數在所述表達式中出現的次序生成與之對應的替換名。
所述步驟A進一步包括建立操作數和與之對應的替換名對照的操作數替換列表,每替換一個操作數就在該操作數列表中記錄所述操作數以及生成的與之對應的替換名。
步驟C所述操作數與替換名的一一對應關系為在步驟A建立的操作數替換列表中記錄的操作數和與之對應替換名之間的對照關系。
由此可以看出,本發明所述表達式的解析方法,在表達式的合法性檢驗之前,將該表達式中包含操作符的操作數替換成為預先設定的閾值管理系統可以識別的替換名,有效的避免了在表達式的解析過程中,誤將操作數中包含的操作符識別為操作數之間的分隔符所帶來的表達式解析錯誤。
應用本發明所述的方法可以實現完整的表達式合法性檢驗、前項表達式到后項表達式的轉換以及表達式的計算過程,正確完成閾值管理系統的報警判決,實現系統的性能管理。
圖1為本發明所述的表達式解析流程圖。
具體實施例方式
為使發明的目的、技術方案及優點更加清楚明白,以下參照附圖并舉實施例,對本發明作進一步詳細說明。
為了解決在現有的表達式解析過程中出現的,對在操作數中存在操作符的表達式無法正確解析的問題,本發明提供了一種表達式的解析方法,在表達式的合法性檢驗之前使用閾值管理系統可以識別的、不包含操作符的替換名替換該表達式中包含操作符的操作數。這樣,在后續的合法性檢驗以及前向表達式到后項表達式的轉換過程中,閾值管理系統可以正確識別表達式中的經過替換的操作數,從而完成表達式的合法性檢驗以及前項表達式到后項表達式的轉換,實現表達式的正確計算及報警判決,有效避免了現有技術中的問題。
如圖1所示,該方法主要包括以下步驟步驟101將網管系統提供的所有操作數,也即表達式中可能出現的所有測量單元的名稱按照字符數的多少從大到小重新排序,生成操作數列表。
需要說明的是,在該步驟中進行排序的所有操作數均是與用戶所選擇的、希望監測的設備以及測量單元有關的參數。當用戶將其所選擇的所要監測的設備、測量單元以及表達式信息上報給網管系統服務器的時候,網管系統將會根據用戶選擇的設備以及測量單元自動生成在用戶輸入的表達式中可能出現的所有操作數列表,并下發給閾值管理系統。因此,本步驟所述的排序就是對這些網管系統提供的操作數進行的重新排序。
排序的目的是為了防止在將表達式中的操作數,即測量單元名稱替換成替換名的過程中出現錯誤。下面舉例說明可能出現的錯誤情況。
假設預先確定的操作數包含以下測量單元的名稱Transfer-Rate、Transfer-Rate-per-Port以及Number-Of-Port。從中可以看出,測量單元名稱Transfer-Rate是Transfer-Rate-per-Port的一部分。另外假設待計算的表達式為(Transfer-Rate-per-Port+5)/Number-Of-Port。
由于上述測量單元名稱沒有經過排序,并且Transfer-Rate是Transfer-Rate-per-Port的一部分,因此,在表達式中操作數到其替換名的替換過程中,很可能首先將該表達式所包含操作數Transfer-Rate-per-Port中的Transfer-Rate替換為Transfer-Rate的替換名,很明顯,這樣必然造成該表達式的解析錯誤。
解決上述問題的一個有效方法就是將上述操作數,即測量單元的名稱根據其長度按照從大到小的順序排列起來。例如,對于上述測量單元名稱,可以按照如下順序重新排列起來,組成一個新的操作數列表,包括1.Transfer-Rate-per-Port2.Number-Of-Port3.Transfer-Rate這樣,在使用替換名的替換過程中,首先匹配最長的操作數,然后在匹配較短的操作數,就可以避免上述錯誤。例如,參照上例,如果在上述表達式的替換過程中,使用重新排序的操作數列表進行匹配,就能夠最先匹配到最長的操作數Transfer-Rate-per-Port,而不會首先匹配到Transfer-Rate,因而不會產生上述替換錯誤。
步驟102將表達式中出現的所有操作數依次替換成為替換名,所述替換名與所述的操作數一一對應。
在這一步驟中,根據步驟101經過排序建立的操作數列表,順序檢測表達式中的操作數,并將表達式中出現的所有操作數依次替換為預先指定的替換名。
所述替換名的選取優先采用以下策略首先,替換名不能夠與任何的測量單元名稱相同或者相似,最好是某種特殊的形式;其次,替換名在解析過程中應當容易被閾值管理系統識別。
在本發明的一個優選實施例中,將所述替換名的格式統一設定為xxNxx,其中,N表示在該表達式中操作數出現的次序。在本實施例所述的操作數替換過程中,對應每個檢測到的操作數,根據該操作數在表達式中出現的次序生成與之對應的替換名。例如,將第一個檢測到的操作數替換為xx1xx;而將第二個檢測到的操作數替換為xx2xx,以此類推,直至最后一個操作數替換完成。
為了實現后續操作,在上述操作數替換的過程中,閾值管理系統還需要建立一個操作數替換列表,用于存儲被替換掉的測量單元名稱及與之對應的替換名。
例如,在表達式(Transfer-Rate-per-Port+5)/Number-Of-Port的替換過程中,其中,Transfer-Rate-per-Port和Number-Of-Port分別為兩個測量單元的名稱,也就是該表達式的兩個操作數。由于在這兩個操作數中包含操作符-,按照現有的表達式解析方法,是無法正確解析的。因此,在這一步驟中,按照網管系統提供的操作數列表,分別將第一個出現的操作數Transfer-Rate-per-Port替換為xx1xx,將第二個出現的操作數Number-Of-Port替換為xx2xx。這樣,上述原始表達式(Transfer-Rate-per-Port+5)/Number-Of-Port就將被替換為(xx1xx+5)/xx2xx。同時,在上述操作數替換的過程中,還需要建立如表2所示的操作數替換列表。
表2從上述步驟102的替換過程可以看出,由于經過替換所生成表達式中的操作數不包含操作符,因而很容易被閾值管理系統解析。
當然,本領域的技術人員可以理解,在該步驟中所使用的替換名不限于xxNxx的格式,還可以是滿足上述優選策略的任意其他指定形式,只要可以被閾值管理系統識別,并且保證表達式中所包含的操作數與替換名一一對應就是可以的。
另外,對于上述實施例中所述操作數替換列表來講,該表記錄了被替換的操作數與生成的替換名之間的一一對應關系,因此,如果操作數與替換名之間的一一對應關系是預先確定的,也就無需在替換過程中建立該操作數替換表了。
步驟103對替換后的表達式進行合法性檢驗,并完成前項表達式到后項表達式的轉換。
在該步驟中,所述的表達式合法性檢驗以及前項表達式到后項表達式的轉換方法均與現有技術相同,在這里就不詳細敘述了。
參照上例,對替換后的表達式(xx1xx+5)/xx2xx進行合法性檢驗,再經過轉換后得到的后項表達式為xx1xx5+xx2xx/。該后項表達式與替換前的表達式等效。
步驟104按照操作數與替換名的一一對應關系,將轉換后的后項表達式所包含的替換名,再次順序替換成為原有的操作數,并按照后項表達式的順序將其操作數和操作符存儲在堆棧中。
同樣參照上面的例子,在本步驟中,將轉換后得到的后項表達式xx1xx5+xx2xx/中包含的替換名再次替換為原有的操作數后,得到的后項表達式為Transfer-Rate-per-Port 5+Number-Of-Port/。
該表達式包含的操作數以及操作符在堆棧中存儲的順序如表3所示
表3步驟105當網管系統上報數據報告時計算經步驟104替換得到的表達式,然后根據計算結果判決是否開啟或者關閉報警系統,實現系統的性能管理。
該步驟所述的計算方法也與現有技術中的表達式計算方法相同。
從上述表達式的解析過程可以看出,本發明所述的方法可以解決現有技術中的問題,實現表達式的正確解析。
另外,本領域的技術人員可以理解,本發明所述的方法不僅僅適用于上述閾值管理系統的表達式解析過程,還能夠應用到任何系統,任何在操作數中包含操作符的表達式解析過程中。
權利要求
1.一種表達式的解析方法,其特征在于,包括如下步驟A、將所述表達式中出現的操作數依次替換為該操作數的替換名,其中,所述替換名與操作數為一一對應;B、對經步驟A替換得到的表達式進行合法性檢驗及前項表達式到后項表達式的轉換;C、按照操作數與替換名的一一對應關系,將步驟B得到的后項表達式中所包含的替換名依次替換成為原來的操作數;D、當網管系統上報數據報告時,計算經步驟C替換得到的表達式。
2.如權利要求1所述的方法,其特征在于,所述方法在步驟A之前進一步包括A0、將網管系統提供的所有操作數,按照操作數中字符數的多少從大到小重新排序,生成操作數列表;所述步驟A為根據步驟A0生成的操作數列表,將所述表達式中出現的操作數依次替換為與之一一對應的替換名。
3.如權利要求1或2所述的方法,其特征在于,步驟A所述替換為根據所述操作數在所述表達式中出現的次序生成與之對應的替換名。
4.如權利要求3所述的方法,其特征在于,所述步驟A進一步包括建立操作數和與之對應的替換名對照的操作數替換列表,每替換一個操作數就在該操作數列表中記錄所述操作數以及生成的與之對應的替換名。
5.如權利要求4所述的方法,其特征在于,步驟C所述操作數與替換名的一一對應關系為在步驟A建立的操作數替換列表中記錄的操作數和與之對應替換名之間的對照關系。
全文摘要
一種表達式的解析方法,包括A.將所述表達式中出現的操作數依次替換為該操作數的替換名,所述替換名與操作數為一一對應;B.對經步驟A替換得到的表達式進行合法性檢驗及前項表達式到后項表達式的轉換;C.按照操作數與替換名的一一對應關系,將步驟B得到的后項表達式中所包含的替換名依次替換成為原來的操作數;D.當網管系統上報數據報告時,計算經步驟C替換得到的表達式。應用本發明所述的方法可以實現完整的表達式合法性檢驗、前項表達式到后項表達式的轉換以及表達式計算過程,正確完成閾值管理系統的報警判決,實現系統的性能管理。
文檔編號H04L12/24GK1832419SQ20051005355
公開日2006年9月13日 申請日期2005年3月8日 優先權日2005年3月8日
發明者溫奈, 畢洪濤 申請人:華為技術有限公司