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