2011-02-11 4 views
4

가능한 중복은 :
implementing a compiler in “itself”자바 컴파일러

나는 자바 컴파일러에 대해 읽고이 자바로 작성된 것을 깨달았다. 그게 어떻게 가능할까요?

내 말은, "치킨 앤 에그"와 같은 문제가 아닐까요? 같은 언어로 컴파일러를 작성하려면 어떻게해야합니까?

+1

부트 스트랩을 통해. 예 : [컴파일러를 "자체"로 구현] (http://stackoverflow.com/questions/193560/implementing-a-compiler-in-itself) – delnan

답변

1

해결하려는 문제는 모든 컴파일러에서 실제로 발생하는 문제입니다. 예를 들어, 많은 컴파일러가 C로 작성되었습니다. 음 ... C 컴파일러를 사용하지 않고 C 컴파일러를 컴파일하는 방법은 무엇입니까?

찾고있는 프로세스의 이름은 bootstrapping입니다. 위키 백과에서 (그리고 더 많은 정보와 다른 기사에 대한 링크는 문서를 참조하십시오) :

부트 스트랩 대상에서 컴파일러 (또는 어셈블러) 작성에 관련된 기술을 설명하는 컴퓨터 과학에서 사용되는 용어입니다 컴파일 언어가되는 인 프로그래밍 언어. 이 기술을 적용하면 자체 호스팅 컴파일러가됩니다.

프로그래밍 언어의 큰 비율

는 BASIC, C, 파스칼, 요소, 하스켈, 모듈라 2, 오베론, OCaml의, 커먼 리스프, 계획, 파이썬 등을 포함하여, 부트 스트랩된다.

이 문서는 또한 사용자가 지적한 chicken and the egg problem을 해결합니다. 나는 그것을 여기에 모두 인용 할 수 있지만, 바라건대 이것으로 당신은 그것을 이해하게된다. 좋은 질문입니다!

0

프로그래밍 언어로 충분한 기능을 얻은 후에는 "특정 형식의"입력을 받아 "특정 형식의"출력을 작성하는 프로그램처럼 컴파일러를 처리하면 컴파일러가 될 수 있습니다.

즉, 컴파일러가 구현 된 언어 및 컴파일 할 언어에 대한 종속성이 없습니다. 아무런 의존성이 없기 때문에 동일해야 할 필요가 없습니다. 다른 필요는 없습니다.

원본 컴파일러는 분명히 Java로 작성되지 않았습니다. 그것은 C로 쓰여졌습니다; 그러나 강력한 문서화가 가능하며 부트 스트래핑의 기술을 실제로 단계별로 수행하려면 16 진수 편집기를 사용하여 "컴파일 된 코드"를 작성하십시오. 부트 스트랩을 회피하는 것은 가능하지만 16 진수 편집기에서 오브젝트 코드를 작성하는 것은 시간이 많이 걸리고 오류가 발생하기 때문에 부트 스트랩하는 것이 좋습니다.

3

original은 C로 작성되었으며 Java로 다음 버전을 작성할 수 있습니다. :)

+0

이것 좀보세요 : http://jikesrvm.org/ :) – Favonius

+0

@Favonius http://jikes.sourceforge.net/ – Bax