2010-05-19 2 views
7

방금 ​​흥미로운 도전이 될 것 같은 새로운 임무를 받았습니다.새 언어에 대한 정적 코드 분석. 어디서 시작하나요?

고객은 JVM에서 실행되는 내부 (곧 오픈 소스 임) 프로그래밍 언어 용으로 개발 된 코드 스타일 검사 도구를 원합니다. 언어 구문은 매우 자바 같다.

고객은 기본적으로 checkstyle과 같은 것을 생산하기를 원합니다.

제 질문은 이것입니다. 어떻게이 문제에 접근합니까? 깨끗한 슬레이트를 감안할 때 고객에게 어떤 권장 사항을 제시하겠습니까?

가 나는 3 개 가지 옵션

  1. 처음부터 쓰기 뭔가를 생각합니다. Id는 이런 종류의 코드 분석 도구 문제가 여러 번 해결되어 더 "프레임 워크"또는 "플랫폼"지향적 인 접근 방식이 있어야하는 것처럼 보이지 않기를 선호합니다.

  2. 포크 기존 코드 스타일 검사 도구이 새로운 언어 등 등

  3. 확장하거나 기존의 정적 코드 분석 도구에 플러그에 맞게 해석을 수정합니다. (어쩌면 Yasca위한 플러그인을 쓰기?)

답변

4

이러한 도구를보십시오. 가장 쉬운 출발점은 종종 기존 컴파일러 프론트 엔드를 적용하는 것이므로 고객의 컴파일러부터 살펴 봐야합니다. 운이 좋으면 프론트 엔드와 백엔드를 깨끗하게 분리 할 수 ​​있으며 그대로 사용하고 프론트 엔드가 생성 한 AST 나 IR을 사용하여 추가 분석을 수행 할 수 있습니다.

+0

그래, 그렇지 않으면 파서 생성기를 사용하십시오. –

0

는 기본적으로 언어의 적어도 일부에 대한 컴파일러 프론트 엔드를 구현해야 FindBugs

+0

예, FindBugs, PMD 체크 스타일 등 워드 프로세서는 확장 가능하지만 모든 마술이 바이트 코드 수준에서 수행되는 것처럼 보입니다. 따라서 상자 밖으로 나오면 생성 된 바이트 코드에서 문제를 감지 할 수 있지만이 오류를이 새로운 언어의 소스 코드에 매핑하는 것은 어려울 수 있습니다. – tinny

1

처음부터 모든 것을 쓰고 싶지는 않습니다.

DMS Software Reengineeering Toolkit을 참조하십시오. 이것은 구문 분석, AST 작성, 기호 테이블 구성, 제어 흐름 및 데이터 흐름 그래프 구성 및 트래버스/호출 트리에 대한 컴파일러 시스템을 일반화했습니다.

DMS는 위의 AST, 기호 테이블 및 흐름 분석을 빌드하는 전체 Java 프런트 엔드에서 얻을 수 있습니다. DMS는 언어가있는 언어를 처리하므로 고객의 Java 변형 언어와 일치하도록이 프런트 엔드를 수정하면서이 모든 분석 기계를 획득하는 것이 실용적 일 정도로 간단해야합니다.

0

PMD는 어떨까요? 필자는 수년 동안 PMD를 사용해 왔지만 이전에는 결코 내부 동작을 살펴 보지 않았습니다.

PMD는 클래스 경로의 JAR 내에서 다음 구현을 제공하여 사용자 정의 언어 파서를 작성하여 확장 할 수 있습니다.

net.sourceforge.pmd.cpd.Language
net.sourceforge.pmd.cpd.Tokenizer는

http://pmd.sourceforge.net/cpd-parser-howto.html

그런 다음 PMD rule designer를 사용하여 나는 결과 AST에서 규칙을 정의 할 수 있습니다.

내가 PMD에 대해 좋아하는 점은 Java 공간에서 광범위하게 인식되는 코드 분석 도구에는 제 3 자 지원이 많이 있다는 것입니다. 예 : 이클립스 플러그인, 허드슨 CI 플러그인 등

관련 문제