2011-02-24 5 views
1

C 프로그램의 두 파일이 있습니다. 나는 둘 다 꽤 같은 버전에 속해 있다고 생각한다. "diff"를 사용하면 차이가 어디 있는지 알 수 있었을 것입니다. 아마 3 줄로 구성되어있을 것입니다. 문제는 두 번째 파일이 완전히 다른 입 다듬기, 괄호 스타일 등을 사용하는 다른 프로그래머에게 주어졌지만 아마 찾을 필요가있는 세 줄만 변경한다는 것입니다. "diff"를 사용하면 많은 차이가 있습니다. 그래서 내 질문은,이 상황에서 코드의 관점에서 차이점을 어떻게 알 수 있습니까? 두 파일에 동일한 서식을 적용한 다음 "diff"를 사용하려고했지만 내 경우에는 작동하지 않습니다.형식이 다른 두 코드 버전의 차이점

답변

0

SmartDifferencer 프로그램을 사용할 수 있습니다. 두 가지 코드 파일을 실제 파서로 구문 분석하여 형식 및 배치 또는 주석 변경과 완전히 독립적 인 구문 파일 트리를 비교 한 다음 편집 작업 (복사, 이동, 삽입, 삭제 등)에 대한 변경 사항을보고함으로써구문 트리를 비교합니다. 블록 내에서 변수 변경 가능). 따라서 라인 대신에 랭글러 구조의 차이점을 볼 수 있습니다. 종종 차이점이 훨씬 적습니다. 실제 리터럴 값이 같으면 숫자 기수 및 문자열 이스케이프의 변경 사항도 무시합니다.

C# 및 Java와 같은 언어의 경우 매우 잘 작동합니다. C는 좀 더 문제가 있습니다. 사람들이 모든 정의와 #include 등을 알지 못하면 파싱 할 수없는 까다로운 C 코드를 작성하기 때문에 일부 파일은 처리되지 않으므로 아마도 기존의 diff로 대체 될 것입니다. 또 다른 저자가 제안한 포맷터이지만, 여전히 라인 diff 만 제공합니다. C++은 틀림없이 C와 동일한 문제를 가지고 있지만, 실제로 C++ 코드는 거의 악의적이지 않습니다.

+0

오픈 소스에 상응하는 일부 기능을 알고 있습니까? – flow

+0

내가 아는 한, 오픈 소스에 상응하는 것은 없습니다. 무료 버전이 과거에 SO보다 더 많은 답변이 없는지 묻는 질문입니다. http://stackoverflow.com/questions/3829453/is-there-any-free-ast-diff-tool을 참조하십시오. 그러한 제품 라인을 갖추려면 언어 정확도가 높은 파서와 유용한 AST diffing 알고리즘 (AFAIK, 연구 논문으로 만 출판 됨)의 실제 구현이라는 두 가지 희귀 한 결과의 합류가 필요합니다. 우리는 두 가지 모두를 가지고 있습니다. 후자는 논문에서 어떤 진지한 생각과 땀으로 위와 넘어 졌기 때문입니다. –

1

pretty-printer을 사용하여 두 파일의 서식을 지정한 다음 diff를 수행하십시오.

+0

어느 하나를 권장합니까? – flow

+0

Code :: Blocks API에서 AStyle 플러그인을 사용하는 것이 좋습니다. 대접을하고, 상당히 사용자 정의 할 수 있습니다. Visual Studio에서도 자동 서식을 지정할 수 있습니다. 당신이 선택한 편집기에 적합한 플러그인을 찾을 수 있을지도 모릅니다. –

0

diff은 줄을 비교할 때 모든 공백을 무시하도록 지시하는 -w 옵션을 사용합니다. 그러나 한 파일의 한 줄을 다른 파일의 두 줄 이상으로 나눌 수 있다면 @Jeff Foster의 제안을 사용하는 것이 더 나을 것입니다.