本發(fā)明涉及同步數(shù)據(jù)流語言的可信編譯領域,特別涉及一種基于形式化方法的同步數(shù)據(jù)流語言可信編譯方法。
背景技術:
1、近五十年來,電子計算機技術得到迅速發(fā)展,工業(yè)和計算機的融合也愈發(fā)密切,計算機已在工業(yè)技術的發(fā)展中扮演者主導者的角色。伴隨著計算機在工業(yè)中的蓬勃發(fā)展,安全關鍵型系統(tǒng)的研究成為工業(yè)控制和嵌入式領域的主要議題。安全關鍵型系統(tǒng)(safety-critical?systems)是指發(fā)生故障就會導致人身危險、巨大財產(chǎn)損失或社會危害的系統(tǒng)。這類系統(tǒng)廣泛應用于工業(yè)領域,如航空航天、鐵路、汽車等方面。安全關鍵型系統(tǒng)在醫(yī)療領域也有廣泛的應用,如放射型治療機、輸液泵、醫(yī)療通風系統(tǒng)等。在對安全性具有極高要求的核電領域,對于核設施的管控,安全關鍵系統(tǒng)也起著至關重要的作用。
2、其中編譯器作為系統(tǒng)開發(fā)的重要部分,構建了高級編程語言和機器可讀的機器語言之間的橋梁,提供可供處理器解讀的代碼。例如gcc,目前最著名的開源編譯工具之一,支持c、c++、ada、fortran等多種語言的編譯。具體來說,編譯器是整個計算機系統(tǒng)中重要的系統(tǒng)軟件之一,所有高級語言編寫的軟件都必須通過編譯器的編譯才能成為計算平臺可執(zhí)行的程序。一些嵌入式系統(tǒng),尤其是安全關鍵領域相關系統(tǒng),甚至是a級(safety10-9)系統(tǒng)在核工業(yè)、航空航天等領域的軟件工程項目設計實現(xiàn)過程中一直是備受關注的焦點。一個a級安全關鍵軟件必須是由a級編譯系統(tǒng)產(chǎn)生的可執(zhí)行代碼。因此,安全關鍵編譯是安全關鍵系統(tǒng)的重要保證。
3、安全關鍵型系統(tǒng)使用的很多領域,都對電子系統(tǒng)的響應速度有較高要求,需要能夠對環(huán)境做出實時響應,這類系統(tǒng)可以隨時接收輸入,并實時運算獲得輸出結果,以便與環(huán)境不斷進行交互。這類場景中所使用的系統(tǒng)的編程語言以同步數(shù)據(jù)流語言為主,由于這類語言產(chǎn)生的程序對實時性和可靠性有較高要求,因此對編譯器也有較高要求,尤其是在安全關鍵型系統(tǒng)中。嵌入式系統(tǒng)和控制系統(tǒng)常用的建模軟件scade使用的語言為類lustre語言,lustre是典型的同步數(shù)據(jù)流模型語言。
4、軟件開發(fā)中從領域思想到設計模型,再到源代碼這一系列過程過于復雜,容易導致各種錯誤產(chǎn)生,因而針對于這種情況的特定領域建模語言(domain-specific?modelinglanguage,dsml)得到快速發(fā)展,這種語言可以安全和高效的完成特定領域的軟件開發(fā),減少了傳統(tǒng)編程語言復雜的開發(fā)過程。lustre作為嵌入式控制和信號處理系統(tǒng)中使用的領域建模語言,產(chǎn)生了相應的工業(yè)軟件scade套件。scade套件可以將simulink/stateflow的一個子語言編譯成可執(zhí)行代碼,并且可用于開發(fā)安全關鍵應用程序,如電傳飛傳控制器和電廠監(jiān)管軟件系統(tǒng)。而作為scade的使用語言,一些特性使的lustre適用于上述諸多任務。lustre基于數(shù)據(jù)流的運行方式使得其擁有良好的語義,可以用于實時性控制器的構造,并且具有良好的可追蹤性并可以提供模塊化編程方案,在自動程序驗證和工業(yè)領域都有較高的實用性。但scade作為商業(yè)軟件具有高可用性的同時,其黑盒編譯過程也使得對于lustre編譯的研究無法深入進行,無法確保lustre編譯無錯誤產(chǎn)生。
5、通過測試來保證軟件的正確和安全性不能從根本上解決安全性問題,無法滿足高安全要求的軟件系統(tǒng)要求。關于編譯過程的正確性,普遍認為通過形式化開發(fā)的才具有最高的正確性和安全性?,F(xiàn)有技術中,主要有兩種方式對于編譯進行驗證,一種是對于編譯器本身的形式化驗證,這種方法需要對編譯器的整個編譯過程的各個步驟進行證明驗證,一般是基于高階邏輯,使用公理系統(tǒng)中的公理和推導規(guī)則進行推導驗證,目前尚無法全部自動化,需要有專業(yè)人員介入驗證。另一種則為翻譯確認方法,翻譯確認對于每一個單獨的編譯過程生產(chǎn)的目標代碼,驗證目標代碼是否正確實現(xiàn)的源程序。翻譯確認可以自動化執(zhí)行,為了使翻譯確認過程可以自動化實現(xiàn),則需要建立一個用于表示源代碼和目標點代碼的通用語義框架,通過框架對程序的語義進行描述,并將程序的正確性通過形式化的描述,最終基于語義證明源程序和目標程序之間的等價關系,以上兩種驗證方案無法保證編譯結果的正確性并且驗證過程過于復雜。
技術實現(xiàn)思路
1、有鑒于此,本發(fā)明實施例提供了一種基于形式化方法的同步數(shù)據(jù)流語言可信編譯方法,以解決現(xiàn)有技術中編譯結果的正確性無法保證并且驗證過程復雜的技術問題。該方法包括:
2、構建下推自動機模型,所述下推自動機模型通過自動機識別算法對lustre語言進行文法識別,文法識別過程包括對所述lustre語言中表達式和語句的識別、解析和檢測,并對所述lustre語言的文法錯誤位置進行定位,獲得所述lustre語言對應的lustre文法;
3、根據(jù)預設的所述lustre文法與目標c代碼的模版對應表,將所述lustre文法轉化為所述目標c代碼;
4、使用基于語義的形式化驗證方法對所述lustre語言與所述目標c代碼的語義進行一致性驗證,并獲得用于驗證的證明序列。
5、進一步的,所述下推自動機模型通過自動機識別算法對lustre語言進行文法識別,包括:
6、對所述lustre語言進行標準化處理獲得所述lustre語言的文法單元,所述標準化處理包括消除左遞歸、將ebnf范式化簡以及格式化終結符與非終結符;
7、基于標準化處理之后的所述文法單元,生成所述下推自動機模型,所述下推自動機模型通過所述自動機識別算法對所述lustre語言進行文法識別,獲得所述lustre文法,所述lustre文法包括lustre語言的文法單元序列,所述文法單元序列用于生成所述目標c代碼。
8、進一步的,基于標準化處理之后的所述文法單元,使用下推自動機生成算法生成所述下推自動機模型,所述下推自動機生成算法的輸入是上下文無關文法的產(chǎn)生式序列和開始狀態(tài)符號,其中,所述文法單元是構成所述上下文無關法的基本單元。
9、進一步的,所述目標c代碼的運行邏輯包括模擬采樣、結點運算、結點輸出和更新數(shù)據(jù)流。
10、進一步的,所述根據(jù)預設的所述lustre文法與目標c代碼的模版對應表,將所述lustre文法轉化為所述目標c代碼,包括:
11、基于所述lustre文法、中間數(shù)據(jù)與所述模版對應表,生成所述lustre文法各所述文法單元對應的所述目標c代碼,其中,所述中間數(shù)據(jù)包括符號表、node表以及輔助函數(shù)表,所述lustre文法包括多個所述文法單元。
12、進一步的,所述使用基于語義的形式化驗證方法對所述lustre語言與所述目標c代碼的語義進行一致性驗證,包括:
13、將所述lustre語言識別為所述lustre文法后轉化為isabelle格式;
14、將所述目標c代碼識別成c語言文法后轉化成isabelle格式;
15、在isabelle目標碼中設定所述lustre語言的前置條件與所述目標c代碼的前置條件相等,通過運行中間代碼獲得輸出結果,如果所述輸出結果為相等,則所述lustre語言與所述目標c代碼的語義一致,所述lustre語言編譯正確。
16、進一步的,所述基于語義的形式化驗證方法通過分段驗證的方式對所述lustre語言與所述目標c代碼的語義進行一致性驗證,所述分段驗證即分別對不同時間點的所述lustre語言與所述目標c代碼的語義一致性進行單獨驗證。
17、與現(xiàn)有技術相比,本說明書實施例采用的上述至少一個技術方案能夠達到的有益效果至少包括:本發(fā)明提供的lustre編譯方法可以識別文法并能夠定位錯誤位置及類型,實現(xiàn)了編譯過程的透明化;使用基于形式化驗證的方式對lustre語言與目標c代碼的語義進行一致性驗證,降低了驗證的復雜性。