2011-12-14 2 views
2

내가 구문을 확장하는 방법을 찾고 있는데, 기본적으로 컴파일 할 때 AST를 수정할 전 처리기를 사용할 수있는 리스프 "매크로"시스템을 구현하고 싶습니다. -시각.자바 구문 (위생적 매크로)을 확장하는 가장 쉬운 방법은 무엇입니까

내 개인 구문 확장을 기반으로 AST를 수정할 수 있도록 Java 컴파일러를 플러그인하는 가장 쉬운 방법은 컴파일러가 클래스 캐스트 예외를 계속 catch 할 수 있도록하는 것입니다. 또한 AST를 읽고 발견 된 내용을 기반으로 수정하고 싶습니다. 기본적으로 자바로 위생적 매크로를 갖고 싶습니다.

나는 대략 project lombok을 알고있다. 그러나 그것은 내가 실제로 알고있는 라이브러리/프로젝트이지만 실제로는 AST를 확장하지만, 내가하고 싶은 것은 좀 더 복잡하다.

왜 내가 이것을하고 싶습니까? 가능한 경우 패턴 일치 구문, 유형 유추, 정말 읽을 수있는 함수 구문 등을 Java로 추가 할 수 있는지 확인하려고합니다.

+0

당신은 여기에서 몇 가지 아이디어를 빌릴 수 있습니다 : http://www.chrisseaton.com/katahdin/ –

답변

1

COTS Java 컴파일러가 구문을 확장하려고 시도 할 때 협조 할 것인지 잘 모르겠습니다. 그리고 나는 그것이 소스 코드를 다시 생성 할 것이라고 생각하지 않지만 매크로를 확장 한 후에 만 ​​프로그램을 컴파일하고 싶다면 신경 쓸 필요가 없습니다.

문법을 확장하려면 파서 생성기, Java 용 문법을 얻고 해킹을 시작하는 것이 가장 좋습니다. ANTLR 할 것이고, 자바 문법을 사용할 수 있다고 생각합니다. 컴파일러에 공급하기 위해 매크로 해석 코드를 다시 생성하기 위해 사전 결정 인자를 만들어야합니다. 나는 ANTLR이 이것을 선반에서 제공한다고 생각하지 않는다.

실용적인 문제로서, 유전자 변형 매크로가 확장 될 때 유전자 변형 매크로가 검사하고 조정할 수있는 기호 표 정보가 필요하다고 생각합니다. 이 경우 오픈 소스 Java 컴파일러 (Jikes)를 얻어서 해킹 할 수 있습니다. 그러한 오픈 소스 컴파일러가 최신 Java 표준에 맞지 않을 수도 있습니다.

Java를 구문 분석하고 문법을 해킹 할 수있게 해주고 전체 기호 테이블을 지원하려면 DMS Software Reengineering Toolkit 및 해당 Java Front End을 고려해야합니다. DMS는 구문 분석, 트리 작성, 기호 테이블 구성, AST에 절차 적 액세스/수정, 원본 다시 생성을위한 사전 인쇄 및 사용자가 정의한 문법에 대한 소스 - 소스 변환을 제공합니다 (구문 분석을 추가 할 경우 하이젠 릭 매크로 포함). 자바 문법).

+0

openjdk이 공식 Java 7 레퍼런스 구현이므로, 나는 해킹 할 수는 있지만 발견 할려고합니다. 쉬운 방법 (있는 경우) 또는 더 많은 휴대용 솔루션. 나는 DMS를 점검 할 것이다, 포인터에 감사한다. – mikkom

+0

Mikkom : openJDK에서 컴파일러 소스를 제공합니까? 그렇다면 답입니다. –

+0

예, OpenJDK는 GPL입니다. "... 오픈 소스 컴파일러에 대한 최신 Java 표준이 아닌 ..."에 대해 의견을 말하려고했습니다 ... (실제로 보지 않았지만) 폐쇄 소스 Java 컴파일러는 실제로 알지 못합니다. – BRFennPocock

0

Eclipse IDE를 사용하는 경우 Eclipse Xtend 프로젝트를 살펴볼 수 있습니다.

active annotations을 통해 사용자 지정 매크로를 사용하여 Java를 확장 할 수 있습니다.