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;该页面链接到相关主题的类似深入讨论。