2016-10-20 2 views
0

이렇게 프로젝트의 모든 기능을 변경하고 싶습니다. >정규식에서 C++ 함수 이름을 나타내는 방법은 무엇입니까?

void Enemy::Create(int asdf, int asdf, float asdf) 
{CCLOG("ERROR OCCURED"); 
} 

그리고 코드를 다음 또 다른 예입니다 -

void Enemy::Create(int asdf, int asdf, float asdf) 
{ 
} 

.

void Enemy::Change() 
{ 

} 

->

void Enemy::Change() 
{CCLOG("ERROR OCCURED"); 

} 

하지만 내 프로젝트는 변함 너무 많은 기능을 가지고있다. 그래서 정규 표현식을 사용하여 모든 기능을 변경하기로 결정했습니다.

(Visual Studio를 지원 정규식 포함하여 코드를 대체)하지만 정규 표현식에 익숙하지 않은, 그래서 나는 그것을 위해 아무 생각이 없습니다.

어떻게 프로젝트의 모든 기능을 위쪽으로 변경할 수 있습니까?

+1

'Enemy' 클래스에서 변경해야하는 모든 함수가 있습니까? –

+0

적 클래스에서 오류가 발생했는지 의심 스럽습니다. 하지만 내 목적은 모바일 포팅에서 발생하는 일부 오류를 디버깅하는 것입니다.Visual Studio에서 프로젝트는 잘 돌아 갔지만 Eclipse와 Android 포팅에서 갑자기 응용 프로그램이 죽었습니다. –

답변

2

단순한 암호문을 제공하는 대신 자세한 내용을 설명합니다.

컴파일러는 코드를 구문 분석하는 것과 마찬가지로 규칙을 만드는 토큰 시퀀스를 기반으로 정규식을 작성할 수 있습니다. 우리는 메소드 정의의 탐지에만 특히 관심이 있기 때문에 인수 목록을 매개 변수 사이의 것으로 취급 할 수 있습니다.

당신은 뭔가 이런 식으로 생각할 수 -

void Enemy::Create(int asdf, int asdf, float asdf) { 

일반화 된 식별자가 _ 제로 또는 _, A-Z 또는 0-9 더 뒤에 A-Z입니다 ++ C에서

<Identifier><Whitespace><Identifier>::<Identifier>(<Anthing>)<Whitespace>{ 

한다. 그와 함께했다 -

<Identifier> = [a-zA-Z_][a-zA-Z0-9_]* 
<Whitespace> = [\n\r\s]+ 
    <Anything> = .* 

그래서식이 멀티 라인 지원 물건 때문에이

([a-zA-Z_][a-zA-Z0-9_]*)([\n\r\s]+)([a-zA-Z_][a-zA-Z0-9_]*)::([a-zA-Z_][a-zA-Z0-9_]*)\((.*)\)([\n\r\s]+)\{ 

그리고 대한을 사용하여 찾을 수없는이

([a-zA-Z_][a-zA-Z0-9_]*) # <Identifier> ($1) 
([\n\r\s]+)    # <Whitespace> ($2) 
([a-zA-Z_][a-zA-Z0-9_]*) # <Identifier> ($3) 
::      # ::   
([a-zA-Z_][a-zA-Z0-9_]*) # <Identifier> ($4) 
\(      # (
(.*)      # <Anything> ($5) 
\)      #) 
([\n\r\s]+)    # <Whitespace> ($6) 
\{      # { 

그러나 비주얼 스튜디오처럼 보일 것이다 대체, 위에 나열된 캡처 그룹을 사용하여 표현식을 재구성해야합니다. 여기에 CCLOG을 삽입 할 위치입니다. 이 꽤 심한입니다 만 빠른 및 Visual Studio에서 코드를 리팩토링과 같은 더러운 뭔가를 사용하는 것을

$1$2$3::$4($5)\n{CCLOG("ERROR OCCURED"); 

참고. 생성자 초기화 목록, throw, const, noexcept 등과 같은 다른 사례는 처리하지 않습니다. 그러나 동일한 개념을 사용하여 표현식을 처리하여 처리 할 수 ​​있습니다.

+0

와우, 좋은 답변에 감사드립니다. 그리고 정규 표현식에 대해 더 깊이 이해할 수 있습니다. –

+0

단계별 해결해 주셔서 감사합니다 –

+1

@ 종현예요이 문제를 해결하면 수락하는 것을 잊지 마세요. –

관련 문제