2011-10-21 3 views
0

자바 코드로 자바 파일을 읽어야하고, 그 중 가장 중첩 된 수를 결정해야한다. 예자바에서 중첩 조건을 찾는 법

:

if (someCondition) 
{ 
    if (someCondition) 
    { 
     // Expression 
    } 
} 

greatest nested if depth is 2.

표시한다이 경우, 프로그램의 지금 문제가 if 후 중괄호의 위치는 불확실하다.

예를 들어이 같이 할 수있다 :

Curly brace start and end comes in same line 
if (someCondition){} 

OR 
Curly brace start in next line 
if (someCondition) 
{ 
} 

OR 
Conditions without curly brace 
if (someCondition) 
    if (someCondition) // Single line without curly brace 

사람이 필요한 중첩 수를 얻을 수있는 가장 좋은 방법이 될 것입니다 무엇을 제안 할 수 있습니다?

+0

주어진 코드베이스의 복잡성을 분석하기 위해이 작업을 수행하는 경우 어떤 코드 영역에주의가 필요한지 아이디어를 얻으려면 순환 복잡성과 같은 것을 측정하는 다른 도구가 있는지 살펴보십시오. –

답변

1

Java 소스 코드의 AST (Abstract Syntax Tree)를 구문 분석해야합니다. Java library for code analysis을 참조하십시오. AST가 있으면 중첩 된 조건의 가장 긴 경로를 찾기 위해 검색을 수행 할 수 있습니다.

1

대답은 이미 설명한 바와 같이 직접 코드를 보는 것이 아니라 AST에 의존해야합니다. 대서양 구사법은 결코 잘못 될 수 없으며, 자신의 독서 능력이 가장 자주 있습니다.

지금 당장은 완벽한 해결책을 모릅니다. 그러나 컴퓨팅 소프트웨어 메트릭에 대한 기존 도구를 살펴 보는 것이 좋습니다. 중첩 깊이는 일반적인 척도이며 주위에 도구가 있어야합니다.

아무 것도 찾을 수 없다면 Eclipse 플러그인과 같은 것을 작성할 수 있습니다. 이 경우 Eclipse 편집기에서 Java 파일을로드하기 만하면 Eclipse가 모든 노력을 다하고 무료로 AST를 제공한다. 주어진 AST의 중첩 깊이를 결정하는 것은 간단한 작업으로 렌더링됩니다. 프로토 타입을 개발하는 데 몇 시간 이상 걸리지 않아야합니다. 그리고 전체 프로젝트를 커버하기 위해 프로젝트를 확장하고 "프로젝트의 자바 파일 중 최대 중첩 깊이와 깊이는 무엇입니까?"와 같은 질문에 쉽게 대답 할 수 있습니다. 하지만 또 다시 .. 누군가는 이미이 작업을 수행하는 기존 도구를 지적 할 것입니다.

0

I82 많은 사람들의 답변이 분명히 당신을 거기에 데려다 줄 것입니다.하지만 속임수 같은 느낌입니다.

프로젝트에 대해 거의 알지 못하면 최대 값 레코드가있는 간단한 스택 메커니즘이 {및 팝업}에서 트릭을 수행한다고 생각합니다. 일단 기본 모델이 작동하면 제어문의 특별한 경우를 한 줄의 본문으로 추가하면됩니다 (if, for, while ...에 유효합니다). 이 경우 해당 키워드를 찾고 (와)를 찾습니다. 일단 그 조합을 만나면 스캔이 다른 제어 문이나 세미콜론 중 하나를 만나면 {이 특별한 경우 중 하나이며 팝업해야 함을 나타내는 특수 마커를 사용해야합니다. }).

관련 문제