UFO ET IT

C 컴파일러는 어떻게 C로 작성할 수 있습니까?

ufoet 2020. 12. 31. 22:43
반응형

C 컴파일러는 어떻게 C로 작성할 수 있습니까?


이 질문에 이미 답변이 있습니다.

이 질문은 내 부분에서 컴파일러에 대한 오해에서 비롯된 것일 수 있지만 여기에 있습니다 ...

K & R 초판 서문 (xi 페이지)에서 다음 내용을 찾을 수 있습니다.

운영 체제, C 컴파일러 및 기본적으로 모든 UNIX 응용 프로그램 (이 책을 준비하는 데 사용되는 모든 소프트웨어 포함)은 C로 작성됩니다.

(내 강조)

제가 이해하지 못하는 것은 다음과 같습니다. C 코드를 컴파일하기 전에 C 컴파일러가 자체적으로 컴파일되어야하지 않습니까? 그리고 그 C 컴파일러가 C로 작성 되었다면, 이미 존재하는 C 컴파일러가 필요하지 않습니까?!

이 무한 회귀 수수께끼 (또는 닭과 계란 문제)를 해결하는 유일한 방법은 K & R이 참조하는 C로 작성된 C 컴파일러가 실제로 C 이외의 언어로 작성된 기존 C 컴파일러로 컴파일되었다는 것입니다. C로 작성된 C 컴파일러가 후자를 대체했습니다.

아니면 완전히 벗어 났습니까?


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

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

  1. X 언어에 대한 인터프리터 또는 컴파일러를 Y로 구현했습니다. Niklaus Wirth는 Fortran에서 첫 번째 Pascal 컴파일러를 작성했다고보고했습니다.
  2. X 용 다른 인터프리터 또는 컴파일러는 이미 다른 언어 Y로 작성되었습니다. 이것이 Scheme이 종종 부트 스트랩되는 방식입니다.
  3. 이전 버전의 컴파일러는 다른 컴파일러가 존재하는 X의 하위 집합으로 작성되었습니다. 이것이 Java, Haskell 및 초기 Free Pascal 컴파일러의 일부 수퍼 세트가 부트 스트랩되는 방법입니다.
  4. X 용 컴파일러는 X 용 컴파일러가있는 다른 아키텍처에서 크로스 컴파일됩니다. 이것이 C 용 컴파일러가 일반적으로 다른 플랫폼으로 포팅되는 방식입니다. 또한 이것은 초기 부트 스트랩 이후 Free Pascal에 사용되는 방법입니다.
  5. X로 컴파일러 작성; 그런 다음 소스에서 직접 컴파일하고 (대부분 최적화되지 않은 방식으로) 코드에서 실행하여 최적화 된 컴파일러를 얻습니다. Donald Knuth는이를 자신의 웹 지식 프로그래밍 시스템에 사용했습니다.

당신이 관심이 있다면, 여기 데니스 리치의 첫 번째 C 컴파일러 소스입니다.


Wikipedia 페이지 의 Chicken and Egg 섹션을 참조하십시오 .

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

  • X 언어에 대한 인터프리터 또는 컴파일러를 Y로 구현했습니다. Niklaus Wirth는 Fortran에서 첫 번째 Pascal 컴파일러를 작성했다고보고했습니다.
  • X 용 다른 인터프리터 또는 컴파일러는 이미 다른 언어 Y로 작성되었습니다. 이것이 Scheme이 종종 부트 스트랩되는 방식입니다.
  • 이전 버전의 컴파일러는 다른 컴파일러가 존재하는 X의 하위 집합으로 작성되었습니다. 이것이 Java, Haskell 및 초기 Free Pascal 컴파일러의 일부 수퍼 세트가 부트 스트랩되는 방법입니다.
  • X 용 컴파일러는 X 용 컴파일러가있는 다른 아키텍처에서 크로스 컴파일됩니다. 이것이 C 용 컴파일러가 일반적으로 다른 플랫폼으로 포팅되는 방식입니다. 또한 이것은 초기 부트 스트랩 이후 Free Pascal에 사용되는 방법입니다.
  • X로 컴파일러 작성; 그런 다음 소스에서 직접 컴파일하고 (대부분 최적화되지 않은 방식으로) 코드에서 실행하여 최적화 된 컴파일러를 얻습니다. Donald Knuth는이를 자신의 웹 지식 프로그래밍 시스템에 사용했습니다.

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

C 언어의 역사에 대한 페이지읽을 수 있습니다 . UNIX 시스템에도 강력하게 연결되어 있음을 알 수 있습니다.


컴파일러가 컴파일하는 언어로 작성되는 것은 매우 평범합니다. 이를 달성하는 한 가지 방법은 다른 언어로 L 언어에 대한 완전한 컴파일러를 작성한 다음 L에 L에 대한 새 컴파일러를 작성하는 것입니다. 더 흥미로운 접근 방식은 일부 언어에서 L의 하위 집합에 대한 최소 컴파일러를 작성하는 것입니다. 그런 다음이 최소한의 하위 집합을 사용하여 컴파일러를 개선하여 L의 사용 가능한 하위 집합을 늘리는 것을 최소화합니다. 이러한 방식으로 완전한 컴파일러를 빌드 할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/18247888/how-can-ac-compiler-be-written-in-c

반응형