5

我的老师告诉我,如果我想在我们的编程课上取得最好的成绩,我应该编写一个简单的源代码转换器。

Python to Ruby(他说的最简单的)

现在我的问题是:编写一个简单的从 python 到 ruby​​ 的源代码转换器有多难。(它应该转换文件控制、控制语句等)

你对我有什么建议吗?

我应该使用哪种语言对转换器进行编码(C#、Python 或 Ruby)?

4

8 回答 8

13

我认为你的老师在撒谎——这很难。它相当于编写一个编译器/解释器。我不知道你有多少时间可以用于这个项目,但你通常会考虑几个人年的工作。

于 2009-02-23T21:52:37.067 回答
2

将一种类型的代码转换为另一种类型的程序有一个名称。它被称为编译器(即使目标语言实际上不是机器码或字节码)。

编译器不是计算机科学中最简单的部分,如果它不仅仅是一个转换器的玩具实现,那么这个项目将是一个庞大的项目。肯定比大多数大学课程中通常为课堂项目所做的要大。(即使是许多/大多数编译器课程也有相当少的项目分配。

至于使用什么语言?好吧,无论您最了解哪一个,都可能是答案。虽然如果你想学习一些新东西,Haskell 将是一个不错的选择,它具有模式匹配功能。(免责声明:我是 haskell 的新手。)(如果您真的很想进入编译器,也可以使用 Yacc。)

您还需要查阅:The Dragon Compiler Book,即使您不打算编写编译器,也值得学习。

于 2009-02-23T22:10:00.193 回答
0

就像想出足够聪明的正则表达式来正确转换语法一样简单。
Ruby 和 python 的语法非常接近,所以这不是很难。
你可能需要做一些额外的工作来重写你在 python 中的东西,这些东西在 ruby​​ 中不存在,例如列表理解。

于 2009-02-23T21:51:58.897 回答
0

第一个简单可能意味着它不处理 Python 的所有有效语义,而只处理其中的一个子集。

我会得到的第一件事是龙书的副本,你可以在任何大学图书馆找到它。我要做的第二件事是获取 Python 的语法和语义的副本。

于 2009-02-23T21:52:02.903 回答
0

语言应该无关紧要。选择你最喜欢使用弦乐的那个。

明智的提示我会为关键字使用字典/查找数组。最困难的部分将是处理 python 中的空白

于 2009-02-23T21:52:16.773 回答
0

听起来你的老师有点恶作剧!

于 2009-02-23T22:10:25.747 回答
0

最难的部分是保留语义。

比如你在使用 Ruby 时如何处理元类分配、函数装饰器或基于产量的生成器?我没有 Ruby 经验,所以我不知道直接支持什么。

于 2009-02-23T22:19:49.343 回答
0

在Brainf***和 C之间编写一个转换器相当简单。我确信这远低于你需要做的范围(我猜是关于解析上下文无关语法的教学),但会真的很容易做到。

于 2009-02-23T22:21:04.723 回答