2011-04-07 3 views
2

안녕하세요 저는 정적 변수 분석 규칙을 개발하여 로컬 변수가 외부 범위의 이름을 그늘지게하지 않도록하려고합니다. 외부 범위와 동일한 이름을 사용하여 if 블록/중첩 클래스를 식별 할 수있게 도와줍니다. 또한 부모 멤버 메서드의 메서드 숨기기를 피하는 방법을 알려줍니다.부모/컨테이너 클래스와 같은 이름의 로컬 변수를 식별하는 방법

정적 코드 분석 규칙을 개발할 수 있도록 알고리즘을 만드는 데 도움을주십시오.

+0

어떤 프로그래밍 언어를 분석 하시겠습니까? –

+0

나는 C# .net에 대한 규칙을 코드화하고 싶다. – dotnetdeveloper

답변

1

(편집 : OP는 목표 언어에 대한 원래 명확하지 않았다)

Java를 가정하면, 대서양 표준시를 구축 자바 파서를 사용합니다. 다음 알고리즘을 구현 : 그것은 두 번 이상 몇 가지 하위 트리가 더 검색 할 수 있다는 점에서

for all Java source files F of interest 
    parse F 
    for all nodes N of F 
     if N is a "class declaration" for a class C 
      for all methods M under N 
       for all nodes m in M 
        if m is a declaration with name C 
         report "found " m " in " M " shadowing " C 
        endif 
       endfor 
      endfor 
     endif 
    endfor 
endfor 

이 조금 비효율적이다.

네임 스페이스는 C# 및 C++의 경우 더욱 복잡합니다. 이러한 언어로 을 사용하고 싶다면 이름 해석 (기호 표)과 함께 전체 구문 분석기가 필요하다고 생각합니다. 메소드가 해당 langauges의 클래스 선언 인 " "의 "언더"로 선언되었으므로 간단한 트리 검색으로 트릭을 수행 할 수 없습니다. 이 경우 에 네임 스페이스 선언에 대한 구문 검사를 추가하고 네임 스페이스가 기호 테이블을 검사하여 선언 된 클래스를 참조하는지 확인해야합니다.

C++의 경우 Clang 또는 C++ Front End을 사용할 수 있습니다.

심볼 테이블이 필요하므로 C#에서이 코드를 사용할 수 있을지 잘 모르겠습니다. 아마도 Mono는 충분한 액세스를 제공하지만 C# 3.0 또는 4.0을 처리하지 못했을 것입니다.

관련 문제