0

我想根據規則集(從COBOL到Java) 例如建立一個轉換引擎,我們有以下COBOL代碼:構建轉換引擎

PERFORM 3 TIMES 
    IF X = 10 THEN; 
    ELSE 
     CALL PARA01. 
END PERFORM. 

我希望能夠定義像下面這樣的規則:

Rule1: 
    Pattern: PERFORM $VAR TIMES ==> for (int i = 0; i < $VAR; i ++) 
Rule2: 
    Pattern: IF CONDITION THEN ; 
      ELSE 
       BLOCK_OF_CODE 
      ==> if (!(condition)) 
        BLOCK_OF_CODE 

所以Java代碼轉換後應該是這樣的:

for (int i = 0; i < 3; i ++) 
    if (!(A== 10)) 
     Para01(); 

有沒有工具,平臺可以幫忙?在我們需要從頭開發的情況下,有沒有什麼建議? 非常感謝你

+0

您可能會看看[Xpand2](http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.xpand.doc%2Fhelp%2FXtend_language.html)中包含的[ Eclipse Modeling Framework(EMF)](http://www.eclipse.org/modeling/emf/) – 2014-10-18 16:38:58

+0

@RomanVottner:如何處理COBOL語法? – 2014-10-18 16:44:45

+0

是的,有這樣的系統。我親自給你一個深入的技術參觀。你爲什麼再問這裏? – 2014-10-18 16:46:21

回答

1

有些人試圖用正則表達式來做這種事情。它不起作用;正則表達式不能處理上下文無關的匹配。

正確的答案是Program Transformation Systems

這些工具可以解析源代碼,編譯AST,還可以在源語法中編寫代碼轉換,就像OP所顯示的那樣。

雖然有很多理論(請參見scholar.google.com,術語程序轉換),但構建這些工具相當困難。只是解析代碼片段的概念(正如OP所暗示的)在解析機器時需要一些非常有趣的轉折。自20世紀80年代以來,我一直在這個領域工作,並且看到過去15 - 20年內維基百科上列出的工具;我沒有看到更多。我們建立系統的經驗(見我的博客)大約有50人年的博士級軟件工程,所以我並不感到驚訝,我沒有看到他們更多。

這些工具通常需要精確的語言前端才能發揮作用,而這正是在建立基本轉換引擎後,實際使用它們的大部分工作所在。 (見discussion on parsing Java and C++;它同樣適用於complex legacy languages like COBOL)。

[在評論中的查詢想知道更多的地方學習更多的技術細節。如果你想要「先切」但深入的技術細節,這survey是相當不錯的,但主要集中在「純」轉換引擎(僅在抽象語法樹上操作)。

我碰巧認爲需要比這更多的東西;看到我的生物討論「解析後的生活」。您可以在我的Google Tech Talk中獲得older technical paper on our DMS system和/或我們系統的更新視頻概述,包括它的差異。

在對原始問題的評論中,有人要求進行「深度技術參觀」。見this for detailed discussion on how DMS handles rewrite rules;該頁面鏈接到相關主題的類似深入討論。