들여 쓰기 -KR 코드 -o code.out
AWK -f split.awk code.out
당신이 조금 split.awk 느릅 나무를 적응해야
내 코드 리팩토링 요구에 다소 다릅니다 (예를 들어, Y는 너무
을 타입 정의되지 않은 사람 구조체하고 난 당신이 기능을 추출하기 어려운 찾는 경우
--
BEGIN { line=0; FS="";
out=ARGV[ARGC-1] ".out";
var=ARGV[ARGC-1] ".var";
ext=ARGV[ARGC-1] ".ext";
def=ARGV[ARGC-1] ".def";
inc=ARGV[ARGC-1] ".inc";
typ=ARGV[ARGC-1] ".typ";
system (rm " " -f " " out " " var " " ext " " def " " inc " " typ);
}
/^[ ]*\/\/.*/ { print "comment :" $0 "\n"; print $0 >> out ; next ;}
/^#define.*/ { print "define :" $0 ; print $0 >>def ; next;}
/^#include.*/ { print "define :" $0 ; print $0 >>inc ; next;}
/^typedef.*{$/ { print "typedef var :" $0 "\n"; decl="typedef";print $0 >> typ;infile="typ";next;}
/^extern.*$/ { print "extern :" $0 "\n"; print $0 >> ext;infile="ext";next;}
/^[^ }].*{$/ { print "init var :" $0 "\n";decl="var";print $0 >> var; infile="vars";
print $0;
fout=gensub("^([^ \\*])*[ ]*([a-zA-A0-9_]*)\\[.*","\\2","g") ".vars";
print "var decl : " $0 "in file " fout;
print $0 >fout;
next;
}
/^[^ }].*)$/ { print "func :" $0 "\n";decl="func"; infile="func";
print $0;
fout=gensub("^.*[ \\*]([a-zA-A0-9_]*)[ ]*\\(.*","\\1","g") ".func";
print "function : " $0 "in file " fout;
print $0 >fout;
next;
}
/^}[ ]*$/ { print "end of " decl ":" $0 "\n";
if(infile=="typ") {
print $0 >> typ;
}else if (infile=="ext"){
print $0 >> ext;
}else if (infile=="var") {
print $0 >> var;
}else if ((infile=="func")||(infile=="vars")) {
print $0 >> fout;
fflush (fout);
close (fout);
}else if (infile=="def") {
print $0 >> def;
}else if (infile=="inc"){
print $0 >> inc;
}else print $0 >> out;
next;
}
/^[a-zA-Z_]/ { print "extern :" $0 "\n"; print $0 >> var;infile="var";next;}
{ print "other :" $0 "\n" ;
if(infile=="typ") {
print $0 >> typ;
}else if (infile=="ext"){
print $0 >> ext;
}else if (infile=="var") {
print $0 >> var;
}else if ((infile=="func")||(infile=="vars")){
print $0 >> fout;
}else if (infile=="def") {
print $0 >> def;
}else if (infile=="inc"){
print $0 >> inc;
}else print $0 >> out;
next;
}
이것이 제가 생각한 첫 번째 아이디어였습니다. 그러나 주석은 상황을 좀 더 복잡하게 만듭니다. 그러나 그런 스크립트를 작성하고 싶습니다. 나는 그것을 출판 할 것입니다 - 다른 사람들에게 유용 할 수도 있습니다. –
동의합니다. 내부에 일치하지 않는 중괄호가 포함될 수 있으므로 의견을 수렴해야 할 수도 있습니다. 코드 작성이 너무 어렵지는 않습니다. –
나는 그들을 제거하고 함수의 끝 위치를 얻은 다음 주석이있는 코드를 추출해야합니다. 또 다른 문제는 상단에 함수 서명이 있다는 것입니다.이 함수는 한 줄 이상 될 수 있습니다. 앞서 언급했듯이 큰 문제는 아니지만 차라리 연구에 집중하고 기성품 도구를 사용합니다. 그게 가능하지 않으면, 파이썬 문제 야! –