Stroustrup은 최초의 C ++ 컴파일러 인 Cfront가 C ++ ( Stroustrup FAQ ) 로 작성되었다고 주장합니다 .
그러나 첫 번째 C ++ 컴파일러를 C ++로 작성하는 방법은 무엇입니까?
컴파일러를 구성하는 코드도 컴파일해야하므로 첫 번째 C ++ 컴파일러를 C ++로 작성할 수 없었습니까?
Stroustrup은 최초의 C ++ 컴파일러 인 Cfront가 C ++ ( Stroustrup FAQ ) 로 작성되었다고 주장합니다 .
그러나 첫 번째 C ++ 컴파일러를 C ++로 작성하는 방법은 무엇입니까?
컴파일러를 구성하는 코드도 컴파일해야하므로 첫 번째 C ++ 컴파일러를 C ++로 작성할 수 없었습니까?
답변:
열쇠는 바로 여기 있습니다 :
첫 번째 C ++ 컴파일러 (Cfront)는 C ++로 작성되었습니다. 이를 구축하기 위해 먼저 C를 사용하여 "C를 사용하여 클래스"-C 전처리기를 작성했습니다. "C with Classes"는 C ++의 직접적인 조상이 된 C 방언이었습니다. 이 전처리 기는 "C with Classes"구문 (예 : 클래스 및 생성자)을 C로 변환했습니다. 모든 언어를 이해하지 못하고 C 컴파일러가 수행 할 수있는 유형 검사를 대부분 남겨두고 개별을 번역 한 전통적인 전 처리기였습니다. 완전한 지식이없는 구조. 그런 다음 "C with Classes"에 Cfront의 첫 번째 버전을 작성했습니다.
따라서 Cfront의 첫 번째 버전은 C ++로 작성된 것이 아니라 중간 언어로 작성되었습니다. C에서 직접 C 컴파일러와 전처리기를 만들 수있는 기능으로 인해 C의 많은 혁신 (및 방대한 보안 허점 )이 발생했습니다. 따라서 C 클래스를 사용할 수 있기 때문에 "C with Classes"코드를 직선 C로 바꾸는 새로운 전임자를 작성하십시오. 그런 다음 "C with Classes"를 사용하여 C ++ 컴파일러를 작성하십시오 (C에서 할 수는 없지만 잠시 시간이 걸릴 것입니다).이 C ++ 컴파일러를 사용하여보다 효율적이고 완전한 컴파일러를 작성하십시오. C ++. 알았다?
BS가 그 질문에 대답한다고 생각합니다.
첫 번째 C ++ 컴파일러 (Cfront)는 C ++로 작성되었습니다. 이를 구축하기 위해 먼저 C를 사용하여 "C를 사용하여 클래스"-C 전처리기를 작성했습니다. "C with Classes"는 C ++의 직접적인 조상이 된 C 방언이었습니다. 이 전처리 기는 "C with Classes"구문 (예 : 클래스 및 생성자)을 C로 변환했습니다. 모든 언어를 이해하지 못하고 C 컴파일러가 수행 할 수있는 유형 검사를 대부분 남겨두고 개별을 번역 한 전통적인 전 처리기였습니다. 완전한 지식이없는 구조.
그런 다음 "C with Classes"에 Cfront의 첫 번째 버전을 작성했습니다. Cfront는 C ++ 소스의 구문과 의미를 완벽하게 검사하는 전통적인 컴파일러였습니다. 이를 위해 완전한 파서가 작성되었으며, 기호 테이블이 작성되었으며, 각 클래스, 함수 등의 완전한 내부 트리 표현이 작성되었습니다. 또한 C를 출력하기 전에 C ++ 구문의 내부 트리 표현에 대한 소스 레벨 최적화를 수행했습니다. 생성 된 C는 모든 유형 검사에 C를 사용하지 않았습니다. 단순히 C를 어셈블러로 사용했습니다. 결과 코드는 매우 빠릅니다.
먼저 그는 간단한 전처리기에 의해 C로 구현 된 "C with Classes"라는 것을 만들었습니다. 기본적으로 C ++이지만 전처리 기는 거의 확인하지 않았습니다. 그런 다음이를 사용하여 C ++ 번역기의보다 강력한 버전 인 Cfront를 작성하여 형식 검사, 기호 테이블 등을 완성했습니다.