2009-11-28 1 views
1

편집 :정규식/유닉스 도구는 파일 ++은 C의 모든 기능 정의의 시작 전에 새로운 라인을 삽입하는

indent -bap foo.cpp 

새를 삽입 할 수있는 쉬운 방법이 있나요

를 작동 C++ 파일의 모든 함수 정의가 시작하기 전에 텍스트를 삽입하거나 삽입 하시겠습니까?

int main() { 
    return 0; 
} 
void foo() { 
} 

는 펄에서

int main() { 
    return 0; 
} 

void foo() { 
} 
+2

... HTML을 파싱하기에 정규 표현식을 얻는 것이 어렵습니다. 이제는 C를 사용하기를 원합니다. ?? – int3

+0

힘들다는 것을 알고 있습니다. 나는 그것을하는 도구의 라인에 대해 더 많은 것을 찾고있었습니다. 더 명확하게하기 위해 질문을 변경했습니다. – user855

+0

"들여 쓰기 -bap foo.cpp"할 수 있습니다. 이 작품! – user855

답변

0

된다 : 그들은 세미콜론에서이 있기 때문에

while(my $line = <>) 
{ 
    $line =~ s/^\}[ \t]*$/}\n/; 
    print $line; 
} 

하는 것도 있지만, 구조체 또는 클래스하지 (모든 네임 스페이스의 말에 무언가를 삽입합니다 그 끝). 당신은 아마 그걸 피하기 위해 더 영리해질 수 있지만, 그것이 과잉이라고 생각합니다.

또한 클래스 선언에서 인라인으로 정의 된 함수를 주목하지 않을 것입니다. 나는 그것이 당신 사건에서 중요한 경우인지 확실하지 않습니다.

+0

오늘 유닉스에서 indent 프로그램을 매우 유용하게 사용하고 있습니다. 위의 내 대답을 참조하십시오. – user855

0

regexp로 C++ 소스 코드를 파싱하는 것이 소스 코드/코딩 스타일에 따라 이 발생하지 않을 수 있습니다. 따라서 어떤 종류의 구문 분석은 항상 더 나은 전략입니다.

cproto의 소스 코드를 살펴보면서 함수를 찾을 때 단순히 빈 줄을 추가 할 수 있는지 알아보기 시작했습니다.

업데이트 : cproto은 C++를 처리하지 않지만 genproto은 처리합니다.