【发布时间】:2009-04-09 14:05:37
【问题描述】:
假设我用 Python 或 Ruby 编写了一个编译器,将一种语言翻译成 C# AST。
如何从 Python 或 Ruby 漂亮地打印此 AST 以获得良好缩进的 C# 代码?
Thanks, Joel
【问题讨论】:
标签: c# python ruby parsing pretty-print
假设我用 Python 或 Ruby 编写了一个编译器,将一种语言翻译成 C# AST。
如何从 Python 或 Ruby 漂亮地打印此 AST 以获得良好缩进的 C# 代码?
Thanks, Joel
【问题讨论】:
标签: c# python ruby parsing pretty-print
在 python 中,pprint 模块可用。
根据您的数据结构,它可能不会返回您要查找的结果。
【讨论】:
拥有 AST 后,这应该很容易。当你走你的 AST 时,你所要做的就是跟踪你当前的缩进级别是什么——你可以使用一个全局的。遍历树的代码只需要在每次进入块时增加缩进级别,并在退出块时减少缩进级别。然后,无论何时打印一行代码,都可以这样调用:
print "\t"*indentlevel + code
您应该得到格式良好的代码。但是,我对您提出这个问题感到有些困惑——如果您具备将 C# 解析为 AST 的技能,我无法想象您将无法编写打印精美的输出函数。 :-)
【讨论】:
一种方法是打印它,然后调用代码格式化程序。
【讨论】: