단순한 암호문을 제공하는 대신 자세한 내용을 설명합니다.
컴파일러는 코드를 구문 분석하는 것과 마찬가지로 규칙을 만드는 토큰 시퀀스를 기반으로 정규식을 작성할 수 있습니다. 우리는 메소드 정의의 탐지에만 특히 관심이 있기 때문에 인수 목록을 매개 변수 사이의 것으로 취급 할 수 있습니다.
당신은 뭔가 이런 식으로 생각할 수 -
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 등과 같은 다른 사례는 처리하지 않습니다. 그러나 동일한 개념을 사용하여 표현식을 처리하여 처리 할 수 있습니다.
'Enemy' 클래스에서 변경해야하는 모든 함수가 있습니까? –
적 클래스에서 오류가 발생했는지 의심 스럽습니다. 하지만 내 목적은 모바일 포팅에서 발생하는 일부 오류를 디버깅하는 것입니다.Visual Studio에서 프로젝트는 잘 돌아 갔지만 Eclipse와 Android 포팅에서 갑자기 응용 프로그램이 죽었습니다. –