2

作为一个宠物项目,我正在考虑编写一个程序来将用语言 A 编写的应用程序迁移到语言 B。A 和 B 将是面向对象的语言。我想这是一项非常艰巨的任务:映射相似的语言结构是可行的,但映射库概念将是一项非常漫长的任务。

我想知道使用什么工具,我知道这与编译有关,但我有点害怕使用 Lex 和 Yacc 以及所有这些东西。我正在考虑使用 Eclipse 建模框架,它可以帮助我以可读的形式编写(应用程序代码的)模型转换。但首先我必须编写解析器来创建模型(并且还要从语言语法创建元模型)。

是否存在可以使我的任务更轻松的工具?

4

6 回答 6

2

您可以为该TXLStratego/XT使用特殊的转换工具/语言。

您还可以查看并轻松尝试Java 到 PythonJava 到 Tcl迁移我使用 TXL 制作的项目。

您对映射库概念是正确的。这是一项相当艰巨而漫长的任务。这里有两种方法:

  • 将类库从语言 A 完全迁移到 B
  • 将类/函数从语言 A 迁移到语言 B 中的相应概念

您将选择的方法取决于您的目标和可用的时间/资源。同样在许多情况下,您不会进行涵盖所有可能情况的一般 A->B 迁移,您只需要转换一些项目/库/等。因此,您将在特定情况下看到使用类/库更好的方法。

于 2009-07-13T19:41:02.027 回答
0

我认为这几乎是不可能的,尤其是作为个人项目。但是,如果您要这样做,请不要尝试提出通用解决方案,从而使自己的生活更加困难。选择两种特定的现实生活中的编程语言并调查它们之间转换的可能性。我想你会对这将暴露的问题和问题的数量感到震惊。

于 2009-07-04T10:38:16.333 回答
0

对于 A 和 B 的某些组合,有一些用于直接迁移的工具。

有多种逆向工程和代码生成工具适用于不同的语言和平台。很少看到逆向工程工具能够捕获源语言的所有语义,并且 UML 的语义没有很好的定义(因为它被设计为映射到不同的实现语言,它本身并没有为其定义一个完整的执行模型)行为表示),因此您不太可能在工具之间进行逆向工程和生成代码。您可能会发现一种工具可以为您的 A 和 B 语言进行完整的逆向工程和完整的代码生成,因此可能会有所帮助。

通常,您不会在不同平台上使用相同的习语,因此您更有可能获得在 B 上模拟 A 代码的东西,而不是与原生 B 解决方案相对应的东西。

于 2009-07-04T10:41:08.510 回答
0

如果您想使用 Java 作为源语言(您尝试转换的语言),那么您可能会使用 Checkstyle AST(它用于编写规则)。它为您提供了在源代码中完成的每个操作的树结构。这将比编写自己的 paser 或使用正则表达式容易得多。

您可以从 checkstyle-4.4.jar 运行 com.puppycrawl.tools.checkstyle.gui.Main 来启动解析 Java 源代码的 Swing GUI。

于 2009-07-04T11:39:57.597 回答
0

根据您的评论

我还不确定,但我认为源语言/框架将是 Java/Swing,目标是一些 RIA 语言,如 Flex 或 Javascript/Ajax 框架。– 阿兰·米歇尔 3 小时前

Google Web Toolkit可能值得一看。

于 2009-07-04T14:14:20.890 回答
0

请参阅此答案:我可以对代码强制执行哪些类型的模式以使其更容易转换为另一种编程语言?

于 2011-03-22T02:31:36.267 回答