Если у вас есть AST, это должно быть очень легко. Когда вы проходите AST, все, что вам нужно сделать, это отслеживать текущий уровень отступа - вы можете использовать глобальный для этого. Код, который проходит по дереву, просто должен увеличивать уровень отступа каждый раз, когда вы входите в блок, и уменьшать его, когда вы выходите из блока. Затем, когда вы печатаете строку кода, вы называете это так:
print "\t"*indentlevel + code
Вы должны получить красиво отформатированный код. Тем не менее, я немного озадачен тем, что вы задаете этот вопрос - если у вас есть навыки для синтаксического анализа C # в AST, я не могу представить, что вы не сможете написать красивую функцию вывода на печать. : -)