以编程方式缩进自动生成的C代码

时间:2012-03-30 12:30:21

标签: python

我有一个自动生成C代码的python脚本。 这是一个小片段:

source = open("auto_comps.c", "w")    
filter_proto = """bool filter_%s_%s(char *record, 
                  size_t field_offset, 
                  uint64_t value, 
                  uint64_t delta)"""
...
for op in 'eq', 'ne', 'lt', 'gt', 'le', 'ge':
    for atype in 'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t':
        source.write(filter_proto%(op,atype))

我不想在脚本中为C代码显式创建缩进。 目前我让脚本生成带有haywire缩进的代码 然后使用IDE选择整个代码并从那里缩进。

然而,因此我必须每次必须手动执行此过程 调整脚本。此外,另一位开发商可能没有奢侈品 一个IDE,可能会疯狂地看着自动生成的C代码。

有没有办法可以编程方式从脚本中缩进代码 在关闭源文件之前?

3 个答案:

答案 0 :(得分:6)

Vaibhav Bajpai,

源代码缩进比首次出现要复杂得多。实际上,要正确缩进源代码,您需要有效地构建编译器的前端。请查看this article以了解特殊情况。

关键是,你真的,真的想要使用其他人创建的工具。以下是一些:

其中,我有使用C和Java的AsStyle的个人经验,并乐意推荐它。

答案 1 :(得分:1)

最简单的解决方案可能是通过GNU indent这样的独立压头运行生成的代码。

答案 2 :(得分:0)

顺便说一句,重新定位可能需要您识别c令牌并对其采取行动。您可能可以从reindent.py开始,这是用于python,但是将标记更改为C.我认为,它至少可以让您意识到任务的难度! :)

另一种选择是在写入文件之前安装像astyle这样的程序并运行生成的代码。那会更容易。