itsource

C 컴파일러를 C로 작성하려면 어떻게 해야 합니까?

mycopycode 2022. 8. 27. 10:17
반응형

C 컴파일러를 C로 작성하려면 어떻게 해야 합니까?

이 질문은 제 컴파일러에 대한 오해에서 비롯된 것일 수도 있지만...

K&R 제1판(xi페이지)의 서문에서 다음과 같은 내용을 확인할 수 있습니다.

operating system, C 컴파일러, 및 기본적으로 모든 UNIX 애플리케이션 프로그램(본서의 작성에 사용되는 모든 소프트웨어 포함)은 C로 기술되어 있습니다.

(중요)

C 컴파일러가 C 코드를 컴파일하기 전에 컴파일러 자체를 컴파일해야 하지 않을까요?그리고 그 C 컴파일러가 C로 쓰여져 있다면 컴파일러는 이미 존재하는 C 컴파일러가 필요하지 않을까요?

이 무한회귀의 난제(또는 치킨앤에그 문제)에서 벗어날 수 있는 유일한 방법은 K&R이 말하는 C 컴파일러가 C 이외의 언어로 작성된 기존 C 컴파일러를 사용하여 컴파일된 것입니다.그 후 C로 작성된 C 컴파일러가 후자를 대체했습니다.

아니면 완전히 끊긴 건가요?

Wikipedia에서 인용한 Bootstraping이라고 합니다.

언어 X용 컴파일러를 입수하기 위해 언어 X용 컴파일러가 필요한 경우(언어 X로 작성됨) 첫 번째 컴파일러는 어떻게 작성되었습니까?이 닭고기 또는 계란 문제를 해결할 수 있는 가능한 방법은 다음과 같습니다.

  1. 언어 Y의 언어 X용 인터프리터 또는 컴파일러 구현니클라우스 워스는 그가 Fortran에서 최초의 파스칼 컴파일러를 썼다고 보고했다.
  2. X용 다른 인터프리터 또는 컴파일러는 이미 다른 언어 Y로 작성되어 있습니다.이것은 Scheme가 부트스트랩되는 방법입니다.
  3. 이전 버전의 컴파일러는 다른 컴파일러가 존재하는 X의 서브셋으로 작성되었습니다.이것이 Java, Haskell 및 초기 Free Pascal 컴파일러의 일부 슈퍼셋이 부트스트랩되는 방법입니다.
  4. X용 컴파일러는 X용 컴파일러가 존재하는 다른 아키텍처에서 크로스 컴파일됩니다.이는 보통 C용 컴파일러를 다른 플랫폼으로 이식하는 방법입니다.또한 이것은 초기 부트스트랩 후에 Free Pascal에 사용되는 방법입니다.
  5. 컴파일러를 X로 쓴 후 소스로부터 손으로 컴파일하여(대부분 최적화되지 않은 방법으로) 코드로 실행함으로써 최적화된 컴파일러를 얻을 수 있습니다.Donald Knuth는 그의 WEB 리터레이티 프로그래밍 시스템에 이것을 사용했습니다.

그리고 만약 관심이 있다면, 여기 Dennis Richi의 첫 번째 C 컴파일러 소스가 있습니다.

보통 첫 번째 컴파일러는 다른 언어로 작성됩니다(이 경우 PDP11 어셈블러로 직접 작성되거나 대부분의 "현대" 언어에서는 C로 작성됩니다).그런 다음 이 첫 번째 컴파일러를 사용하여 언어 자체에서 작성된 컴파일러를 프로그래밍합니다.

당신은 C 언어의 역사에 대해 이 페이지를 읽을 수 있습니다.UNIX 시스템에도 강하게 연결되어 있는 것을 알 수 있습니다.

Wikipedia 페이지의 "치킨 앤 에그" 섹션을 참조하십시오.

언어 X용 컴파일러를 입수하기 위해 언어 X용 컴파일러가 필요한 경우(언어 X로 작성됨) 첫 번째 컴파일러는 어떻게 작성되었습니까?이 닭고기 또는 계란 문제를 해결할 수 있는 가능한 방법은 다음과 같습니다.

  • 언어 Y의 언어 X용 인터프리터 또는 컴파일러 구현니클라우스 워스는 그가 Fortran에서 최초의 파스칼 컴파일러를 썼다고 보고했다.
  • X용 다른 인터프리터 또는 컴파일러는 이미 다른 언어 Y로 작성되어 있습니다.이것은 Scheme가 부트스트랩되는 방법입니다.
  • 이전 버전의 컴파일러는 다른 컴파일러가 존재하는 X의 서브셋으로 작성되었습니다.이것이 Java, Haskell 및 초기 Free Pascal 컴파일러의 일부 슈퍼셋이 부트스트랩되는 방법입니다.
  • X용 컴파일러는 X용 컴파일러가 존재하는 다른 아키텍처에서 크로스 컴파일됩니다.이는 보통 C용 컴파일러를 다른 플랫폼으로 이식하는 방법입니다.또한 이것은 초기 부트스트랩 후에 Free Pascal에 사용되는 방법입니다.
  • 컴파일러를 X로 쓴 후 소스로부터 손으로 컴파일하여(대부분 최적화되지 않은 방법으로) 코드로 실행함으로써 최적화된 컴파일러를 얻을 수 있습니다.Donald Knuth는 그의 WEB 리터레이티 프로그래밍 시스템에 이것을 사용했습니다.

컴파일러가 컴파일한 언어로 작성되는 것은 지극히 평범한 일이다.이를 달성하기 위한 한 가지 방법은 완전한 L 컴파일러를 다른 언어로 작성하고 새로운 L 컴파일러를 L로 작성하는 것입니다. 더 흥미로운 접근법은 L의 서브셋에 대해 최소한의 컴파일러를 다른 언어로 작성하고 컴파일러를 개선하기 위해 이 최소 서브셋을 사용하는 것입니다.L의 사용 가능한 서브셋.이렇게 하면 완전한 컴파일러를 구축할 수 있습니다.

언급URL : https://stackoverflow.com/questions/18247888/how-can-a-c-compiler-be-written-in-c

반응형