我想基于规则集构建转换引擎(从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 :(得分: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非常好,但主要集中在“纯”转换引擎上(仅在抽象语法树上运行)。
我碰巧相信一个人需要的远不止于此;看我的生物学讨论“解析后的生活”。您可以在我的older technical paper on our DMS system中获取Google Tech Talk和/或我们系统的最近视频概述,包括它的不同之处。
在对原始问题的评论中,有一个“深度技术之旅”的请求。见this for detailed discussion on how DMS handles rewrite rules;该页面链接到相关主题的类似深度讨论。