專利名稱:利用語法詞法分析工具為編解碼提供數(shù)據(jù)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)通信技術(shù)領(lǐng)域,特別是涉及一種在通訊網(wǎng)絡(luò)的編解碼過 程中使用語法詞法分析工具為通用編解碼提供l[據(jù)的方法。
背景技術(shù):
ASN. 1 (Abstract Syntax Notation One抽象語法標(biāo)記)是一種獨立于機 器的描述語言,用于描述在網(wǎng)絡(luò)上傳遞的消息,廣泛應(yīng)用于移動網(wǎng)絡(luò)通訊系 統(tǒng)中的各種協(xié)議的傳輸,例如RANAP(Radio Access Network Application Part 無線接入網(wǎng)絡(luò)應(yīng)用部分)協(xié)議、MAP (Mobile Application Part移動應(yīng)用部分) 協(xié)議、H.248協(xié)議等。
編譯器是將一種語言翻譯為另一種語言的計算機程序。編譯器將源程序 編寫的程序作為輸入,而產(chǎn)生用目標(biāo)語言編寫的等價程序。通常地,源程序 為高級語言,如(:或0 + +,而目標(biāo)語言則是目標(biāo)機器的目標(biāo)代碼,也就是寫 在計算機機器指令中的用于運行的代碼。Lex (Lexical Analyzer)是一種生 成掃描器的工具,掃描器是一種識別文本中的詞匯模式的程序,Lex工具的語 法是一種詞法規(guī)則。Yacc (Yet Another Compiler Compiler)是一種可以將 任何一種編程語言的所有語法翻譯成針對此種語言的語法解析器,Yacc工 具的語法是一種語法規(guī)則。Lex&Yacc被廣泛的應(yīng)用在程序語言的編譯器中, 檢測程序語言的合法性及將語言編譯成機器能夠執(zhí)行的機器碼。
通用編解碼程序在進(jìn)行編解碼時,編碼可以根據(jù)參數(shù)的大小,起始地址, 獲取結(jié)構(gòu)內(nèi)存中的數(shù)值,再根裙參數(shù)的數(shù)據(jù)類型進(jìn)行編碼。解碼則根據(jù)參數(shù) 的數(shù)據(jù)類型進(jìn)行解碼,并根據(jù)參數(shù)的大小,起始地址向結(jié)構(gòu)中填寫解碼的值。 還應(yīng)當(dāng)根據(jù)參數(shù)的賦值范圍進(jìn)行合法性判斷等操作。這些信息,可以通過兩 種方式獲得。 一種是使用針對協(xié)議語法的分析工具分析協(xié)議的語法并按一定的格式輸出,協(xié)議語法擁有自己的語法規(guī)范,對于語法的識別只能通過編寫 完整的語法分析工具來識別,然而協(xié)議的語法是十分復(fù)雜的,因此編寫針對 協(xié)議語法的分析工具也是一個復(fù)雜的系統(tǒng)工程。另一種通過人工讀取協(xié)議語 法規(guī)則,提取相應(yīng)的數(shù)據(jù),按照一定的格式填寫,這樣不僅工作效率低下,而且出錯幾率大幅提高。
發(fā)明內(nèi)容
本發(fā)明的目的就是使用詞法語法分析工具的詞法規(guī)則和語法規(guī)則,開發(fā)出能夠分析高級語言結(jié)構(gòu)以及用自定義規(guī)則(一種簡化的協(xié)議語法與編程語 言語法相結(jié)合的方法)記錄參數(shù)屬性信息并輸出的分析工具,輸出的數(shù)據(jù)可 以為編解碼提供所需的信息。該方法大大提高手工填寫數(shù)據(jù)信息的效率和質(zhì) 量。為統(tǒng)一的編解碼提供所需的詳細(xì)準(zhǔn)確的信息。具有簡單,靈活,快捷, 易讀,擴(kuò)展性好等特點。
為了達(dá)到上述目的,本發(fā)明提供以下技術(shù)方案-利用語法詞法分析工具為編解碼提供數(shù)據(jù)的方法,包括以下步驟-
A. 編寫分析工具:使用詞法規(guī)則、語法規(guī)則編寫能夠識別高級語言規(guī)范以及根據(jù)自定義規(guī)則記錄的參數(shù)屬性的分析工具;
B. 數(shù)據(jù)結(jié)構(gòu)的定義根據(jù)協(xié)議中消息的語法描述、高級語言規(guī)范和分析工具自定義規(guī)則定義協(xié)議中消息的數(shù)據(jù)結(jié)構(gòu);
C. 分析數(shù)據(jù)結(jié)構(gòu)使用分析工具分析定義的消息的數(shù)據(jù)結(jié)構(gòu)文件,獲取消息的結(jié)構(gòu)及參數(shù)信息;
D. 存儲相關(guān)信息分析工具將上述信息按照一定的格式存儲到文件中,以供編解碼過程調(diào)f。
所述的參數(shù)信息存儲于數(shù)據(jù)表中。所述數(shù)據(jù)表包括消息表,結(jié)構(gòu)表,參數(shù)表。
所述消息表至少包括操作碼、消息名稱、消息長度和消息類型,用于
記錄消息的開始結(jié)構(gòu)和屬性。
所述結(jié)構(gòu)表至少包括結(jié)構(gòu)名稱、標(biāo)簽、類型、顯示或隱示、原類型標(biāo) 簽和結(jié)構(gòu)長度,用于記錄結(jié)構(gòu)擁有的參數(shù)和作為的參數(shù)時具有的屬性。
所述參數(shù)表至少包括參數(shù)名,結(jié)構(gòu)名,類型名,變量名和起始位置, 用于記錄參數(shù)的信息。
所述分析數(shù)據(jù)結(jié)構(gòu)的分析流程包括分析工具從定義的消息結(jié)構(gòu)文件中 匹配到一段文法;判斷該文法中是否為消息,即是否包含消息的關(guān)鍵字;如 果是消息則將消息的信息記錄到消息表中;將分析出的消息自身的結(jié)構(gòu)屬性 加入結(jié)構(gòu)表中;分析工具分析出結(jié)構(gòu)中的一個參數(shù);獲取參數(shù)的類型,參數(shù) 名稱,參數(shù)地址,參數(shù)大小等結(jié)構(gòu)自身的信息;將參數(shù)信息記錄到參數(shù)表中; 分析工具匹配到參數(shù)的注釋,在注釋中分析出參數(shù)的屬性;將屬性記錄到參數(shù) 表中;文法分析完成后,遍歷消息表、結(jié)構(gòu)表和參數(shù)表,將信息寫入文件中。
本發(fā)明相對于現(xiàn)有技術(shù)具有以下技術(shù)效果通過使用注釋的方式,按照 分析工具自定義規(guī)則,把協(xié)議語法規(guī)定的參數(shù)屬性注釋到結(jié)構(gòu)中,使得這些 結(jié)構(gòu)的定義即符合高級語言規(guī)范,又記錄了協(xié)議語法,因此無需開發(fā)針對協(xié) 議語法的語法分析器,簡化了程序開發(fā)的難度,提高了程序的可讀性,在不 影響程序編譯運行的前提下,為應(yīng)用層使用數(shù)據(jù)結(jié)構(gòu)提供了方便。
協(xié)議發(fā)生改變或協(xié)議版本升級時,只需修改根據(jù)協(xié)議定義消息的數(shù)據(jù)結(jié) 構(gòu)文件,用分析工具重新分析,即可獲得新協(xié)議的結(jié)構(gòu)信息。本發(fā)明與人工 修改信息相比具有安全,快捷和簡單的特點。
本方法還提供了一種簡化分析工具程序邏輯的方式。使得分析工具能夠 以簡單的方法實現(xiàn)復(fù)雜邏輯,使得分析工具能夠快速開發(fā)。
圖1為詞法語法分析工具的原理圖2為分析工具向編解碼過程提供數(shù)據(jù)的流程圖3為分析工具的Lex&Yacc的詞法規(guī)則和語法規(guī)則;
圖4為C語言編譯器轉(zhuǎn)換ASN. 1字符串類型宏的原理圖5為幾種典型的ASN. 1數(shù)據(jù)類型同C語言數(shù)據(jù)類型的對應(yīng)關(guān)系;
圖6為分析工具分析過程中用于臨時保存結(jié)構(gòu)信息的表結(jié)構(gòu)和相互關(guān)系;
圖7為分析工具的分析流程;
圖8為消息結(jié)構(gòu)參數(shù)信息的存儲方式。
具體實施例方式
以下結(jié)合附圖詳細(xì)說明本發(fā)明的具體實施方式
。本實施例中使用的高級 語言為C語言,協(xié)議語法為ASN. 1,詞法語法分析工具為Lex&Yacc。
圖1為詞法語法分析工具的原理圖;將包含了正則表達(dá)式的詞法語法規(guī) 則作為分析工具的輸入規(guī)則,為每一個詞法表達(dá)式被匹配時定義一種動作。 用于通知語法規(guī)則,為每一個語法規(guī)則被匹配時也定義一種動作,根據(jù)定義 的動作保存所需的數(shù)據(jù)。編譯器根據(jù)詞法語法規(guī)則生成分析工具。分析工具 指定根據(jù)協(xié)議定義的消息的數(shù)據(jù)結(jié)構(gòu)文件作為它的輸入,并根據(jù)詞法語法規(guī) 則的分析過程,記錄結(jié)構(gòu)屬性和ASN. 1屬性,并產(chǎn)生特定格式的輸出文件, 即圖8格式的結(jié)構(gòu)信息數(shù)據(jù)。
圖2為分析工具向編解碼過程提供數(shù)據(jù)的流程圖,其包括
步驟201:使用詞法規(guī)則、語法規(guī)則編寫能夠識別高級語言規(guī)范以及根據(jù) 自定義規(guī)則記錄的協(xié)議屬性的分析工具;
步驟202:根據(jù)協(xié)議中消息的協(xié)議的語法描述、高級語言規(guī)范和分析工具 自定義規(guī)則定義協(xié)議中消息的數(shù)據(jù)結(jié)構(gòu);
步驟203:使用分析工具分析定義的數(shù)據(jù)結(jié)構(gòu)文件,獲取結(jié)構(gòu)中的參數(shù)信息;
步驟204:分析工具將獲取的結(jié)構(gòu)信息,按照一定的格式存儲到文件中, 用于為編解碼過程提供信息。
圖3展示了 Lex&Yacc的詞法規(guī)則和語法規(guī)則,結(jié)構(gòu)包括結(jié)構(gòu)定義,結(jié) 構(gòu)名和注釋。結(jié)構(gòu)定義包括結(jié)構(gòu)參數(shù)列表。結(jié)構(gòu)參數(shù)列表包括參數(shù)選用 標(biāo)志,結(jié)構(gòu)參數(shù),注釋。結(jié)構(gòu)參數(shù)定義包括類型定義和宏定義,類型定義
包含所有ASN.1的非字符串類型。宏定義包含ASN.l的所有字符串類型。注 釋中包含了用自定義規(guī)則定義的ASN. 1屬性和關(guān)鍵字。
圖4為C語言編譯器轉(zhuǎn)換ASN. 1字符串類型宏的原理圖,將ASN. 1的字 符串類型定義成C語言的帶參數(shù)宏,可以一種簡化分析工具的分析邏輯。使 得定義結(jié)構(gòu)時,ASN.l的字符串類型只占一行,C編譯器編譯時會替換的結(jié)構(gòu) 中的宏,形成結(jié)構(gòu)嵌套結(jié)構(gòu)的參數(shù)定義方式,而分析工具無需分析其中的嵌 套結(jié)構(gòu),使得工具分析數(shù)據(jù)時只需要將每一行都作為一個整體參數(shù)來個分析, 從而簡化了編寫分析工具的難度。
圖5為幾種典型的ASN. 1數(shù)據(jù)類型同C語言數(shù)據(jù)類型的對應(yīng)關(guān)系;定義 結(jié)構(gòu)時按照對應(yīng)關(guān)系將ASN. 1描述的數(shù)據(jù)轉(zhuǎn)換成C數(shù)據(jù)類型。分析工具通過 對C數(shù)據(jù)類型的分析獲取ASN. 1數(shù)據(jù)類型并記錄數(shù)據(jù)信息。
圖6展示了用于存儲中間分析結(jié)果的數(shù)據(jù)表以及表之間的父子關(guān)系。數(shù) 據(jù)表包括消息表,結(jié)構(gòu)表,參數(shù)表。
1. 消息表由操作碼,消息名稱,消息長度,消息類型等參數(shù)構(gòu)成。用 于記錄協(xié)議消息的開始結(jié)構(gòu)和屬性。
2. 結(jié)構(gòu)表由結(jié)構(gòu)名稱,標(biāo)簽,類型,協(xié)議中的數(shù)據(jù)類型,顯示或隱示,
結(jié)構(gòu)長度等信息構(gòu)成,用于記錄結(jié)構(gòu)擁有的參數(shù)和作為的參數(shù)時具有的屬性。
3. 參數(shù)表由參數(shù)名,結(jié)構(gòu)名,類型名,變量大小,起始位置等屬性字
段構(gòu)成,用于記錄參數(shù)的信息和參數(shù)的協(xié)議屬性等詳細(xì)信息。
圖7為分析工具的分析流程;包括以下步驟
步驟701:分析工具從定義的協(xié)議中消息的數(shù)據(jù)結(jié)構(gòu)文件中匹配到一段文
法;
步驟702:判斷該文法中是否為消息,即是否包含消息的關(guān)鍵字;
步驟703:如果是消息則將消息的信息記錄到圖6所示的消息表中;
步驟704:將分析出的消息自身的結(jié)構(gòu)屬性加入到圖6所示的結(jié)構(gòu)表中;
步驟705:分析工具分析出結(jié)構(gòu)中的一個參數(shù);
步驟706:獲取參數(shù)的類型,參數(shù)名稱,參數(shù)地址,參數(shù)大小等結(jié)構(gòu)自身 的信息;
步驟707:將參數(shù)信息記錄到圖6所示的參數(shù)表中;
步驟708:分析工具匹配到參數(shù)的注釋,在注釋中分析出標(biāo)簽、可選/必選、 賦值范圍等參數(shù)擁有的ASN. 1屬性;
步驟709:將分析出的ASN. 1屬性記錄到參數(shù)圖6所示的參數(shù)表中該參數(shù) 的相應(yīng)字段中;
步驟710:判斷結(jié)構(gòu)文件是否結(jié)束,未結(jié)束轉(zhuǎn)入步驟701繼續(xù)進(jìn)行文法分析;
步驟711:分析完成時,圖6所示的三張表(消息表,結(jié)構(gòu)表和參數(shù)表) 中記錄了所有消息的結(jié)構(gòu),子結(jié)構(gòu),參數(shù),參數(shù)的ASN.1屬性等信息,從消 息表開始,遍歷所有消息的結(jié)構(gòu),結(jié)構(gòu)中的子結(jié)構(gòu)和參數(shù),將這些信息寫入 文件中(如圖8),將這個文件加入到編解碼過程中,就能夠為編解碼過程提 供消息,消息的結(jié)構(gòu),結(jié)構(gòu)的參數(shù)等的編解碼過程中需要的詳細(xì)信息。
圖8展示了根據(jù)MAP(移動應(yīng)用部分)協(xié)議中的插入用戶數(shù)據(jù)響應(yīng)消息(即 圖8中的InsertSubscriberDataRes)結(jié)構(gòu)生成的結(jié)構(gòu)及其參數(shù)的詳細(xì)信息。 消息由六行元素組成,每一行元素代表結(jié)構(gòu)的一個參數(shù),每一行中的一項代 表參數(shù)的一個信息、ASN. 1屬性或參數(shù)包含的子參數(shù)指針。其中telServLst, bearServeLst, ss—List為結(jié)構(gòu)參數(shù),包含了指向子結(jié)構(gòu)的指針,這些值都 被編解碼程序加載用于編解碼。
以上公開的僅為本發(fā)明的一個具體實施例,但是本發(fā)明并非局限于此,任 何本領(lǐng)域的技術(shù)人員能思之的變化,都應(yīng)落在本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
1、利用語法詞法分析工具為編解碼提供數(shù)據(jù)的方法,其特征在于包括以下步驟(A)編寫分析工具使用詞法規(guī)則、語法規(guī)則編寫能夠識別高級語言規(guī)范以及根據(jù)自定義規(guī)則記錄的參數(shù)屬性的分析工具;(B)數(shù)據(jù)結(jié)構(gòu)的定義根據(jù)協(xié)議中消息的語法描述、高級語言規(guī)范和分析工具自定義規(guī)則定義協(xié)議中消息的數(shù)據(jù)結(jié)構(gòu);(C)分析數(shù)據(jù)結(jié)構(gòu)使用分析工具分析定義的消息的數(shù)據(jù)結(jié)構(gòu)文件,獲取消息的結(jié)構(gòu)及參數(shù)信息;(D)存儲相關(guān)信息分析工具將上述信息按照一定的格式存儲到文件中,以供編解碼過程調(diào)用。
2、 根據(jù)權(quán)利要求1所述的為編解碼提供數(shù)據(jù)的方法,其特征在于將步驟 (C)所述的參數(shù)信息存儲于數(shù)據(jù)表中。
3、 根據(jù)權(quán)利要求2所述的為編解碼提供數(shù)據(jù)的方法,其特征在于所述數(shù) 據(jù)表包括消息表,結(jié)構(gòu)表,參數(shù)表。
4、 根據(jù)權(quán)利要求3所述的為編解碼提供數(shù)據(jù)的方法,其特征在于所述消 息表至少包括操作碼、消息名稱、消息長度和消息類型,用于記錄消息的 開始結(jié)構(gòu)和屬性。
5、 根據(jù)權(quán)利要求3所述的為編解碼提供數(shù)據(jù)的方法,其特征在于所述結(jié)構(gòu)表至少包括結(jié)構(gòu)名稱、標(biāo)簽、類型、顯示或隱示、原類型標(biāo)簽和結(jié)構(gòu)長度,用于記錄結(jié)構(gòu)擁有的參數(shù)和作為的參數(shù)時具有的屬性。
6、 根據(jù)權(quán)利要求3所述的為編解碼提供數(shù)據(jù)的方法,其特征在于所述參數(shù)表至少包括參數(shù)名,結(jié)構(gòu)名,類型名,變量名和起始位置,用于記錄參數(shù)的信息。
7、 根據(jù)權(quán)利要求1所述的為編解碼提供數(shù)據(jù)的方法,其特征在于所述分析數(shù)據(jù)結(jié)構(gòu)的分析流程包括 分析工具從定義的消息結(jié)構(gòu)文件中匹配到一段文法;判斷該文法中是否 為消息,即是否包含消息的關(guān)鍵字;如果是消息則將消息的信息記錄到消息 表中;將分析出的消息自身的結(jié)構(gòu)屬性加入結(jié)構(gòu)表中;分析工具分析出結(jié)構(gòu) 中的一個參數(shù);獲取參數(shù)的類型,參數(shù)名稱,參數(shù)地址,參數(shù)大小等結(jié)構(gòu)自 身的信息;將參數(shù)信息記錄到參數(shù)表中;分析工具匹配到參數(shù)的注釋,在注釋 中分析出參數(shù)的屬性;將屬性記錄到參數(shù)表中;文法分析完成后,遍歷消息 表、結(jié)構(gòu)表和參數(shù)表,將信息寫入文件中。
全文摘要
本發(fā)明涉及利用語法詞法分析工具為編解碼提供數(shù)據(jù)的方法,包括(A)編寫分析工具使用詞法規(guī)則、語法規(guī)則編寫能夠識別高級語言規(guī)范以及根據(jù)自定義規(guī)則記錄的參數(shù)屬性的分析工具;(B)數(shù)據(jù)結(jié)構(gòu)的定義根據(jù)協(xié)議中消息的語法描述、高級語言規(guī)范和分析工具自定義規(guī)則定義協(xié)議中消息的數(shù)據(jù)結(jié)構(gòu);(C)分析數(shù)據(jù)結(jié)構(gòu)使用分析工具分析定義的消息的數(shù)據(jù)結(jié)構(gòu)文件,獲取消息的結(jié)構(gòu)及參數(shù)信息;(D)存儲相關(guān)信息分析工具將上述信息按照一定的格式存儲到文件中,以供編解碼過程調(diào)用。本發(fā)明簡化了程序開發(fā)的難度,提高了程序的可讀性,具有簡單,靈活,快捷,易讀,擴(kuò)展性好的特點。
文檔編號G06F9/45GK101201750SQ20061010515
公開日2008年6月18日 申請日期2006年12月13日 優(yōu)先權(quán)日2006年12月13日
發(fā)明者段保平, 龍 賴 申請人:西安大唐電信有限公司