專利名稱:層次化系統(tǒng)描述語言SmartC到C代碼的自動轉換方法
技術領域:
本發(fā)明涉及嵌入式領域基于模型的軟件開發(fā)方法中的自動代碼生成技術, 尤其是涉及一種由層次化系統(tǒng)描述語言SmartC到C代碼的自動轉換方法。
技術背景隨著嵌入式技術的不斷發(fā)展,傳統(tǒng)的基于手工編寫代碼的開發(fā)方法存在容 易出錯、開發(fā)效率低等許多不足,已經(jīng)無法滿足嵌入式軟件開發(fā)的需要?;?模型的軟件開發(fā)方法是嵌入式領域一種新的軟件開發(fā)方法。該方法通過抽象出 軟件系統(tǒng)的關鍵問題并用模型加以描述,表達出系統(tǒng)的解決方案,然后通過采 用形式化的工具對系統(tǒng)模型進行驗證,以保證系統(tǒng)設計的正確性。在保證系統(tǒng) 正確性的基礎上,就可以根據(jù)模型自動生成代碼、自動生成文檔等,甚至自動 生成測試案例?;谀P偷脑O計思想從根本上解決了軟件設計的正確性保證問 題,從而大大提高了軟件開發(fā)效率和質量。在基于模型的軟件開發(fā)方法中,對系統(tǒng)的描述方法非常重要。C語言本身結 構單一,無法很好描述一個系統(tǒng),所以一般會用更高級的模型來描述軟件系統(tǒng)。 SmartC語言是浙江大學嵌入式系統(tǒng)工程實驗室自主開發(fā)的面向汽車電子領域的 系統(tǒng)表述語言,用于解決嵌入式系統(tǒng)結構的描述問題。SmartC語言的核心是其 層次化結構模型,系統(tǒng)結構從上到下分為四個層次,分別是系統(tǒng)層(Application)、 模塊層(Module)、任務層(Task)、以及組件層(Component)。在SmartC層次 化結構模型中,各個層次功能明確,系統(tǒng)層關注系統(tǒng)結構,不涉及模塊的具體 實現(xiàn);模塊層則關注對該模塊的具體實現(xiàn),主要利用操作系統(tǒng)提供的功能(比 如任務、Alarm、事件等)來實現(xiàn)某一功能;任務層則關注任務的具體執(zhí)行流程 的實現(xiàn);組件層則關注具體算法的實現(xiàn)。SmartC語言通過把系統(tǒng)結構的設計分 為層次化的描述,使得系統(tǒng)結構變得更加清晰和合理,增強了對系統(tǒng)結構的表 現(xiàn)力。SmartC語言能夠很方便的描述一個嵌入式系統(tǒng),但是SmartC語言描述的系 統(tǒng)是層次化的,而C代碼則是扁平的結構,所以兩者之間的轉換需要解決一些 問題,主要有以下三個方面1) 如何用扁平結構的C語言程序框架去描述層次化的系統(tǒng)結構。2) 層次化結構帶來的名字沖突問題。3)層次化結構中上下層數(shù)據(jù)的傳遞問題。所以,如果能發(fā)明一種較為通用的從層次化語言轉化到扁平的C語言的方 法,將對嵌入式軟件開發(fā)工具的開發(fā)具有重要意義。 發(fā)明內容本發(fā)明為實現(xiàn)嵌入式領域的基于模型的軟件開發(fā)方法,提出了一種由層次 化系統(tǒng)描述語言SmartC到C代碼的自動轉換方法。 本發(fā)明解決其技術問題所采用的技術方案如下1) 根據(jù)特定的解析方法,解析SmartC代碼,生成一種層次化的中間數(shù)據(jù) 結構;2) 然后再根據(jù)特定的生成方法,從中間數(shù)據(jù)結構生成C代碼。 所述的特定的解析方法采用通過深度優(yōu)先的解析方法,從高層到低層依次解析SmartC代碼,高層確定低層要解析的SmartC代碼,低層向高層提供解 析得到的信息,最終生成一個層次化的中間結構。所述的特定的生成方法采用深度優(yōu)先的生成方法,從高層到低層依次生 成C代碼,高層為低層提供數(shù)據(jù),低層為高層提供函數(shù)實體的方法,并提出了 解決名字沖突以及數(shù)據(jù)傳遞問題的方法。本發(fā)明具有的有益效果是本發(fā)明設置層次化的中間數(shù)據(jù)結構,把解析階段和生成階段按模塊分開, 提高模塊復用率;提供的解析方法和生成方法適用于其他的層次化語言到C代 碼的轉換。利用該自動轉換機制,使SmartC語言真正成為一種編程語言,大大 簡化了汽車電子領域軟件的開發(fā)。
圖1 SmartC代碼自動生成C代碼示意圖。 圖2層次化的中間數(shù)據(jù)結構示意圖。 圖3從高層到低層的解析過程結構圖。 圖4每一層的具體解析方法。 圖5從高層到低層的代碼生成過程結構圖。 圖6每一層代碼生成的具體過程。
具體實施方式
下面結合圖,具體描述本發(fā)明的實施方式。本發(fā)明一種層次化系統(tǒng)描述語言SmartC到C代碼的自動轉換方法的具體轉 換過程如圖1所示,具體分為兩個階段第一個階段是解析階段,即通過解析SmartC代碼,生成一個層次化的中間數(shù)據(jù)結構。第二個階段是生成階段,即通 過分析中間數(shù)據(jù)結構,根據(jù)特定代碼生成方法,生成相應的C代碼。 具體轉換過程的實現(xiàn)分為如下三個步驟1. 設計層次化的中間數(shù)據(jù)結構和層次化的SmartC語言相匹配,中間數(shù)據(jù)結構被設計為一個層次化的數(shù)據(jù) 結構。圖2是中間數(shù)據(jù)結構示意圖。該數(shù)據(jù)結構類似一個語法樹,但在普通的 樹結構上增加了同一層之間的關系連接以及從低層到高層的關系連接,用來表 示模型間的關系以及下層模型對上層模型的訪問,從而包含了 SmartC層次化模 型的所有信息。2. 從高層往低層的解析過程解析SmartC代碼的過程采用深度優(yōu)先的解析方法,如圖3所示,具體為從 高層往低層解析,高層確定低層要解析的SmartC代碼,低層通過解析相應的 SmartC代碼,向高層提供解析得到的信息。對每一層的解析則按圖4所示的流 程進行解析,首先從高層中依次遍歷需要解析的節(jié)點,直到遍歷完全。對每個 需要解析的節(jié)點,首先找到對應的SmartC代碼,然后分析生成所有節(jié)點和表示 相互關系的連接。然后分析生成的連接,設置各個節(jié)點之間的相互關系。最后 根據(jù)生成的信息,設置解析的文件對應的在高層中的節(jié)點。3. 從層次化中間數(shù)據(jù)結構生成C代碼本方法針對從層次化的SmartC語言轉化為扁平結構的C語言而需要解決的 三個問題,分別提出了解決方法,具體為-l)生成程序框架生成程序框架部分是把層次化的SmartC代碼轉化為扁平的C代碼的主要部 分。生成過程和解析過程類似,也是按深度優(yōu)先,從高層到低層來依次生成C 代碼。圖5表示了生成C代碼的總體過程。高層為低層提供數(shù)據(jù),低層為高層 提供函數(shù)實現(xiàn)。在對每一層生成的代碼中,生成三個方面的代碼(1) 生成對該層所建模型的聲明(.h文件)(2) 生成對該層所建模型的定義(.c文件)(3) 生成表示該層邏輯流程的代碼其中,本層次包含的所有節(jié)點的聲明生成在.h文件里,他們的定義生成在.c 文件里,而表示這些模型的邏輯流程的代碼將會提供給上一層,生成在上一層 的.c文件里。(最高層和最低層除外,最高層不需要向上層提供表示該層邏輯流 程的代碼,最低層不包含更下一層的模型,所以不需要生成,h和.c文件。)對每一層的代碼生成按圖6所示的方式進行。依次遍歷生成的節(jié)點,根據(jù) 節(jié)點類型以及設置好的相互關系來具體生成代碼。如果該節(jié)點是數(shù)據(jù)或者其他 模型,則直接在本層的.h和.c文件里生成相應的聲明和定義。如果是需要代碼 生成的下一層次的節(jié)點,則先對該節(jié)點進行代碼生成,然后提取表示其邏輯流 程的信息,具體生成代碼。最后,分析該層次的邏輯和流程信息,保存提供給 上層。2) 解決名字沖突層次化的SmartC代碼轉換到扁平的C代碼的過程中會有名字沖突問題。因 為不同模型的下一層可能含有相同名稱的模型。解決方法是在每個模型名前加 上上層模型的名字。比如APP系統(tǒng)下AMT模型的Collector任務,生成的C代 碼中,其名字將是APP一AMT一Collector。3) 實現(xiàn)上下層數(shù)據(jù)傳遞在層次化模型中, 一個某層上的數(shù)據(jù)對該層而言是局部的,對下層而言是 全局的。本方法對數(shù)據(jù)傳遞按如下方式處理 一般用函數(shù)參數(shù)的形式傳遞到下 層。如果下層不能實現(xiàn)為函數(shù)或者不能自己定義該函數(shù)的參數(shù),則把該數(shù)據(jù)在 上升為全局數(shù)據(jù)(即在.c文件里定義全局數(shù)據(jù)),然后下層通過export該數(shù)據(jù)來 訪問該數(shù)據(jù)。
權利要求
1.一種層次化系統(tǒng)描述語言SmartC到C代碼的自動轉換方法,其特征在于1)根據(jù)特定的解析方法,解析SmartC代碼,生成一種層次化的中間數(shù)據(jù)結構;2)然后再根據(jù)特定的生成方法,從中間數(shù)據(jù)結構生成C代碼。
2. 根據(jù)權利要求1所述的一種層次化系統(tǒng)描述語言SmartC到C代碼的自動 轉換方法,其特征在于所述的特定的解析方法采用通過深度優(yōu)先的解析方法, 從高層到低層依次解析SmartC代碼,高層確定低層要解析的SmartC代碼,低 層向高層提供解析得到的信息,最終生成一個層次化的中間結構。
3. 根據(jù)權利要求1所述的一種層次化系統(tǒng)描述語言SmartC到C代碼的自動 轉換方法,其特征在于所述的特定的生成方法采用深度優(yōu)先的生成方法,從 高層到低層依次生成C代碼,高層為低層提供數(shù)據(jù),低層為高層提供函數(shù)實體 的方法,并提出了解決名字沖突以及數(shù)據(jù)傳遞問題的方法。
全文摘要
本發(fā)明公開了一種層次化系統(tǒng)描述語言SmartC到C代碼的自動轉換方法。根據(jù)特定的解析方法,解析SmartC代碼,生成一種層次化的中間數(shù)據(jù)結構;然后再根據(jù)特定的生成方法,從中間數(shù)據(jù)結構生成C代碼。本發(fā)明設置層次化的中間數(shù)據(jù)結構,把解析階段和生成階段按模塊分開,提高模塊復用率;提供的解析方法和生成方法適用于其他的層次化語言到C代碼的轉換。利用該自動轉換機制,使SmartC語言真正成為一種編程語言,大大簡化了汽車電子領域軟件的開發(fā)。
文檔編號G06F9/44GK101216769SQ20081005911
公開日2008年7月9日 申請日期2008年1月14日 優(yōu)先權日2008年1月14日
發(fā)明者吳朝暉, 張莉蘋, 楊國青, 博 胡, 堅 趙, 趙民德, 凱 黃 申請人:浙江大學