2

我想解析 Python 源代码,以便尝试制作一个从 Python 到 Go 的基本源代码转换器。

  • 我应该使用什么模块?
  • 我应该继续还是不继续?
  • 如果我应该继续,怎么做?
4

4 回答 4

13

查看语言服务包,尤其是ast

我的猜测是,如果您还没有扎实掌握解析和代码生成技术,那么这将是一个难以承担的项目。

祝你好运!

于 2009-11-24T11:01:07.387 回答
3

至于“我应该继续还是最好不要”的问题:你为什么要首先这样做?

如果是纯粹的学习练习,那你就不用问我们值不值得了。你想学,那就继续吧。

如果它是一个实用的工具,那么我的建议是不要这样做。执行此类转换的工业级工具可能很有用,但我猜你不会走那么远。考虑到这一点,在 Go 中手动重写 Python 代码可能更有成效。

假设编译到 Go 有任何真正的好处;当前的测试表明,使用 Stackless Python 可以获得更好的性能和类似的代码结构。

于 2009-11-24T11:58:08.673 回答
3

嘘解决方案

您是否正在尝试制作一种可以编译成 Go的类似 python 的语言?这似乎是最明智的,因为您将想做特定于 Go 的事情(以利用 Go 功能)。

看看pyparsing。它包含一个完整的 python 解析器示例,但您可能不想这样做。

您想逐步构建转换器/翻译器,因此您希望逐步构建解析器,否则您可能会在 AST 上窒息。好的,您可以解析所有内容并忽略您不理解的内容,但这不是编译器的好行为。

您可以从解析基本算术开始。

Pyrex 解决方案

这类似于 Boo 解决方案,但要困难得多。首先让 Boo 解决方案发挥作用。然后学习生成包装器代码,以便您的 Go 和 python 部分可以一起工作。

PyPy 解决方案

一个完整的 Python-Go 编译器?祝你好运。你会需要它。

于 2009-11-24T11:21:55.533 回答
2

Ned Batchelder整理了一份很好的解析器列表,可能会有所帮助。

于 2009-11-24T11:24:05.390 回答