2012-04-19 6 views
1

내 프로그램에 대한 질문이 있습니다. 내 프로그램은 자바 코드에서 UML 다이어그램을 만들 수 있어야하지만, (로드) Java 키워드, 객체 등을 검색 할 방법, 디자인 방법, 알지 못한다. 알림 : 나는 자동화 된 프로그램을 사용하여 UML 다이어그램을 만들 수 없다. 그것은 내 논문입니다.로드 된 Java 코드에서 UML 다이어그램을 만드는 방법은 무엇입니까?

제 아이디어는 UML 다이어그램에서 볼 수 있고이 열거 형으로로드 된 코드를 모두 확인하는 Java 키워드로 enum 클래스를 만드는 것입니다. 하지만 해결할 수없는 몇 가지 문제, 특히 공간이 있습니다. 다음 문제는 다음된다

[space][space]public[space]class[space][space][space]SomeClass[space]{ 
[empty line] 
private int something; 
public BufferedReader br; 
private ArrayList<File> al; 
} 

이 코드 코멘트 :

  • [공간] 코드의 고전 갭을 나타내는 예를 들어

    는 I 코드를 갖는다.

  • 필자는 문법적으로 정확하기 때문에 의도적으로 틈을 강조했습니다.
  • 모든 Java 클래스를 BufferedReader, ArrayList 등 또는 다른 객체로로드하는 방법을 모르겠습니다.

답장을 보내 주셔서 감사합니다. 이 문제를 해결할 더 좋은 방법이 있다고 생각합니다.

답변

1

Java 코드를 파싱하는 라이브러리를 사용하는 것이 좋습니다. 확실히 나는 당신에게 하나를 말할 수 없었다, 하나를 위해 구글을 시도해라.

다음은 내가 수행 할 접근법입니다. Eclipse Abstract Syntax Tree에 대한이 기사를 먼저 읽으십시오. Eclipse AST를 사용하면 도구를 Eclipse 플러그인으로 설계 할 수 있습니다. 이 작업을 원하지 않으면 소스 트리를 구문 분석하는 방법에 대한 몇 가지 힌트를 얻을 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. Netbeans IDE를 사용합니다. 나는 지금 Eclipse에가는 것이 좋을지 모르겠다. 불행하게도, 코드를 컴파일하는 것이 아니라 순수한 자바 파일 일 수 있습니다. 흰색 문자 뒤에 읽는 해결책 일 수도 있지만 속성, 클래스 등의 이름을 어떻게 알았는지 알 수 없습니다. – avalagne

+0

@avalagne : Netbeans은 [비슷한 API] (http://wiki.netbeans.org)를 제공합니다./Java_DevelopersGuide). 이 솔루션은 컴파일 된 코드가 필요하지 않으며 속성, 클래스 등의 이름을 제공합니다. 내가 언급 한 기사를 읽었습니까? – Kai

+0

네, 읽어 보았습니다. 이해한다면 Java 코드를 분석하는 일종의 AST를 기반으로합니다. 다시 감사합니다. Netbeans TreeMaker에서 어떻게 작동하는지 알아 내려고 노력하겠습니다. – avalagne

1

컴파일 된 코드를 사용할 수 있다면 좋을 것입니다. 자바에서는 초기화없이 클래스를로드하고 java.lang.reflect으로 구조를 검사 할 수 있습니다. 물론 매개 변수 이름은 누락 될 수 있습니다.

자세한 내용은 ASM과 같은 대체 클래스 구문 분석 라이브러리가 있습니다.

+0

불행히도 순수 자바 코드 일 수 있습니다. – avalagne

1

두 개의 이전 답변과 귀하의 의견에 특히 re. '순수 자바 코드'.

질문을 올바르게 이해한다고 가정 할 때 가장 먼저해야 할 일은 자바 소스 코드 (즉, 텍스트 파일)를 일부 데이터 구조로 변환하는 것입니다. 여기에서 데이터 구조에 대한 UML 다이어그램을 생성 할 수 있습니다.

이렇게 가정하면 꽤 일반적인 패턴입니다.

손으로 쓰기 (@Joop Eggen에 의해 제안) 반사를 이용하여

  • (@ user714965에 의해 제안) 텍스트를 구문 분석
  • : 데이터 구조에 텍스트를 변환하는이 방법은 일반적으로있다 파서는 사소한 일이 아닙니다. 열거 형 클래스를 만드는 것에 대한 귀하의 의견은 그것이 여러분이 생각하고있는 것을 제안합니다. 그러나 손으로 코딩 한 파서는 극히 소수의 경우에만 권장되는 솔루션입니다. 알고리즘과 기법을 파싱하는 데 전념하는 이론과 실습이 있습니다. 나는 당신이 당신의 프로젝트를 위해 그것에 들어가기를 정말로 원하지는 않는다.

    대부분의 사람들은 문법 정의에서 파서를 생성하기 위해 파서 생성기 (예 : antlr)를 사용합니다. 자바의 인기를 감안할 때, antlr에 대한 기존의 자바 문법은 at least one입니다. 나는 '순수 자바 코드'제약이 무엇을 의미하는지 잘 모르겠습니다. Antlr는 순수 Java 코드 파서를 생성하므로 괜찮습니다. 처음부터 모든 코드를 작성해야한다는 의미라면 파서 생성기를 사용하면됩니다. 그러나 그것은 매우 이상한 제약으로 보입니다 ...

    어쨌든. 다른 옵션은 리플렉션을 사용하고 있습니다. 실제로 JVM에서 파서를 사용하고 쿼리 &에 대한 API 액세스를 제공하여 코드 자체를 탐색합니다. java.lang.reflect 또한 (명백하게) 순수한 java이기 때문에 코드를 호출하는 코드도 마찬가지입니다.

    Eclipse/Netbeans API는 다른 가능한 경로를 제공합니다. 실제로 그들은 자바 코드를 나타내는 일련의 데이터 구조를 제공하는 또 다른 '파서'일뿐입니다.

    직접 파서를 직접 쓰는 대신 세 가지 방법 중 하나를 사용하는 것이 좋습니다.

    도움이되는지 잘 모르겠습니다. 아마도 '순수 자바 코드'제약 조건을 좀 더 설명 할 수있을 것입니다.

+0

나는 내 일이 무엇인지 더 잘 묘사하려고 노력할 것이다. 이름 테마는 '자바 애플리케이션의 소스 코드 분석'입니다. 작업 설명은 다음과 같습니다. 목표는 Java의 어휘 및 구문 분석입니다. 이 데이터는 분석되어 XML 파일에 저장된 UML 모델 프로젝트를 작성하는 데 사용됩니다. 또한 1) 호스트 언어 분석기 선택, 2) 스캐너 (어휘 분석기) 작성, 3) 구문 분석기 작성 (구문 분석기), 4) XML 형식으로 얻은 정보 저장, 5) UML 그래픽 분석 된 프로젝트의 표현. – avalagne

+0

이것은 내 작품에 대한 설명입니다. 솔직히, 나는 가능한 한 간단하게 그것을하는 법을 모른다. 그래서 나는 하얀 간판 읽기 등 다양한 해결책을 고안했다. 나의 상사는 불행히도 학교에 앉아 있기를 원하는 나이든 신사이기 때문에 내가 사용할 수있는 어떤 아이디어라도 기쁘게 생각한다. 모든 옵션 중에서 텍스트를 파싱하는 것이 가장 좋지만 거래를 계속하겠습니다. 고맙습니다! – avalagne

+0

음, 좋아. 음, 목표 중 하나가 파서가 어떻게 공정하게 작동 하는지를 배우는 것입니다. 그렇다면 파서 이론 및 실습에 대한 독서를하는 것이 좋습니다. 많은 좋은 책들이 있습니다. 하지만 감독관에게 파서를 처음부터 써 줄 것을 다시 한 번 확인해 보겠습니다. 파서 - 생성기를 사용하면 아마 당신에게 어휘 및 통사론 분석의 개념을 손으로 쓰는 것으로 다량 (어쩌면 더) 가르쳐 줄 것입니다. 행운을 빕니다! – sfinnie

0

JavaCC (작업 1)와 같은 파서 생성기를 선택하기 만하면됩니다. 완료된 Java 문법을 사용하거나 자체 문법을 작성하십시오. Lexer (2)를 생성하고 문법에 자신의 파서 항목을 씁니다 (3). 파서에서 트리를 저장하거나 XML/XMI 표현을 얻기 위해 먼저 수정하십시오. 5) 당신은 실제로 기존의 도구를 선택하여 자신의 글을 작성하여 완전한 추가 논문이 될 수 있습니다.

+0

도움을 당신을 감사하십시오. 내가 원한 초안 작성 ... 특정 Java 파서에 대한 경험이 있습니까? – avalagne

+0

JavaCC와 antlr 모두 정말 좋습니다. 이 스레드 읽기 : http : // stackoverflow.com/questions/382211/whats-better-antlr-or-javacc 또는 즐겨 찾는 검색 엔진에서 두 이름을 모두 검색하여 그 이상을 가져 오십시오. – Christian

+0

고맙습니다.이 주제를 읽었습니다. 파서를 찾고 있는데 가능한 빨리 배우게됩니다. 내가 읽은 바로는, JavaCC가 더 쉽습니다. – avalagne

관련 문제