2010-06-28 54 views
1

我是一名工程學學生,並決定我最後一年的項目。UML工具的代碼生成功能背後的技術是什麼

許多考生之一是一個帶有代碼生成工具的在線UML工具。但是我沒有采用編譯器設計類,所以我不太瞭解代碼生成技術。

我想知道我應該研究的技術,以便構建這樣的東西。如果這些技術與編寫編譯器一樣複雜,那麼也許我將不得不放棄這個想法。

+0

請注意,儘管代碼生成的遍歷抽象語法樹可能不是很難,但是創建這個樹可能會有很多工作,因爲UML元模型非常複雜。也許這是一個好主意,使用已有的東西,例如EMF。 – 2010-06-28 21:39:50

回答

3

編譯實際上與the kind of code generation you are describing相反,所以我不認爲你需要知道如何編寫編譯器。

代碼生成可以像組合文本字符串或using templates一樣簡單,也可以像使用Reflection.Emit在運行時創建類一樣複雜。

我會從this Wikipedia article開始。

+0

謝謝,這是一個不錯的開局。我認爲模板和模板處理器的概念將有所幫助,特別是如果我想支持多種目標語言 – 2010-06-28 18:05:10

0

我不確定代碼生成需要什麼功能,但我使用的UML工具在其代碼生成中並不十分複雜。

我已經使用的工具只是簡單地創建文件並使用從輸入派生的參數將您的函數名稱放入它們中。這不需要任何編譯器的理解。大多數困難將出現在用戶界面中,以及如何存儲數據以使代碼生成變得簡單。

+0

對於開始我也在尋找如您所提及的最基本的代碼生成,但我想知道是否有任何標準方法或做這樣的做法,以便它可以使我無法重新發明輪子並使我的項目更具可擴展性,對於初學者,我會嘗試僅支持Java這樣的1種語言,並具有可擴展的實現,我可以支持其他語言很麻煩。 – 2010-06-28 18:14:09

1

大多數UML工具生成源代碼。這個世代通常比編譯器要簡單得多。例如,一個類圖將有一組數據結構來表示這些類之間的類和鏈接(繼承)。爲了生成輸出,你可以遍歷類對象,併爲每個對象用目標語言的語法「打印出」該對象的表示。

2

創建一個UML工具是一個長期的項目。你需要很多才能獲得不同於團隊中一名成員不同的專業知識。 你的學術項目太雄心勃勃。

一個從未做過的簡單項目是從活動或狀態圖生成代碼。您不應該嘗試重新創建圖形編輯器,因爲這非常複雜,只能使用xml解析器從xmi導出並生成代碼。這將是一個很好的6個月項目你的論文:-)

+0

+1爲新的想法:)。 – 2010-06-30 14:55:29