컴파일러는 '프런트 엔드'와 '백 엔드'의 두 가지 주요 블록으로 구성됩니다. 컴파일러의 프런트 엔드는 소스 코드를 분석하고 소스 코드보다 기계 알고리즘에 의해 분석하기가 훨씬 쉬운 상기 소스 코드의 '중간 표현'을 구축합니다 (예 : C++의 소스 코드가 설계된 반면 인간 프로그래머이 코드를 작성하는 것을 돕기 위해 중개 양식은 알고리즘을 단순화하는 데 도움이되도록 설계되었습니다. 컴파일러의 백 엔드는 중간 양식을 가져 와서 '대상 언어'로 변환합니다.
이제 범용 컴파일러의 대상 언어는 다양한 프로세서 용 어셈블러 언어이지만 컴파일러 백 엔드가 다른 언어로 코드를 생성하는 것을 막을 수있는 방법은 없습니다. 대상 언어가 (적어도) 일반적인 CPU 어셈블러만큼 유연합니다.
C가 C++에서 C 컴파일러가 기술적 인 pov로 구현하는 데 아무런 문제가 없도록 C는 확실히 CPU의 어셈블러만큼 융통성이 있다고 상상해보십시오.
그래서 당신은 : C++를 --- 프론트 엔드 ---> someIntermediaryForm --- 백엔드 ---> C
당신은이 사람들을 체크 아웃 할 수 있습니다 : http://www.edg.com/index.php?location=c_frontend은 (위의 링크는 단지 정보입니다 무엇 는 GNU에 의해 C 컴파일러에는 같은 C++에서이없는, 그들의 앞은 내가 아는 한 수십
PS ) 수천 달러에 대한 종료 라이센스, 수행 할 수 있습니다, 이것은 완전히 경우 (저를 친다 나는 이것에 대해 옳다). C 언어는 상당히 작고 내부 메커니즘이 매우 초보적이기 때문에 C 컴파일러는 1 년 동안의 일과 같은 것을 필요로합니다. (필자가 직접 이런 컴파일러를 몇 년 전에 작성했기 때문에 내가 말할 수 있고, 가상 머신] 중개자 코드)를 가지고 있고 유지 보수 된 최신 C++ 컴파일러를 가질 수 있다면 C 컴파일러를 작성하는 것은 좋은 일이 될 것입니다 ...
@MSalters : Comeaus 컴파일러에 대한 포인터 주셔서 감사합니다. 하지만 안타깝게도 저의 목적을 달성하지 못합니다. 보통 컴파일러 중간 형식 C 코드는 얻을 수 없으며, 일반 ANSI-C 컴파일러로는 컴파일 할 수없는 경우에도 얻을 수 있습니다. – goldenmean
코드에서 예외 및 템플릿을 사용하지 않는 경우 코드에서 작동 할 수있는 cfront의 이전 복사본을 얻을 수 있습니다. 그러나 MSalters가 말하듯이 – lothar
도 표준 라이브러리 기능을 사용하지 않아야합니다. –