汚いC言語ソースを綺麗にする.
汚いコード
main.c
# include <stdio.h>
int main
()
{ int // how to
a=0; // comment ?
if(a)printf("hello world\n"
) ;else{ printf /* is this ?*/
("good by\n"); } return
0;}
pycparserを使う
C言語パーサのpycparserを使う.
c2c.py
# !/usr/bin/env python
import sys
from pycparser import parse_file, c_parser, c_generator, c_ast
def main():
text = ''.join(sys.stdin.readlines()) # 読み込む
parser = c_parser.CParser() # パーサ
ast = parser.parse(text, filename='<none>') # パースする
generator = c_generator.CGenerator() # 生成器
print(generator.visit(ast)) # 単にパースしたものを書き出すだけ
if __name__ =='__main__':
main()
参考
整形
pycparserは#includeやコメントには対応していないので,
- grepで#includeを取り除く
-
gcc -E
でコメントを取り除く
それから整形
実行
$ cat main.c | grep -v "#include" | gcc -E - | python c2c.py
int main()
{
int a = 0;
if (a)
printf("hello world\n");
else
{
printf("good by\n");
}
return 0;
}
$
用途
- 初心者の学生が書いたC言語のソースをきれいにする