폐쇄 . 이 질문은보다
중점 이어야합니다. 현재 답변을 받고 있지 않습니다.
댓글
Answer
“XYZ”라는 새 프로그래밍 언어를 작성한다고 가정 해 보겠습니다. 첫 번째 단계는이 언어에 대한 컴파일러를 작성하는 것입니다. 이 새로운 언어는 아직 존재하지 않기 때문에 컴파일러를 작성합니다. 자바를 예로 들어 보겠습니다. jxyz라고합니다. 이 프로세스를 수행하는 것은 대학의 일반적인 수업 입니다.
이제 XYZ 소스 파일을 가져 와서 생성하는 Java 프로그램 (jxyz)이 있습니다. 실행 파일. 그런 다음 jxyz에 의해 준수되는 XYZ에서 XYZ 용 컴파일러를 작성하는 것이 가능합니다.
이 시점에서 jxyz를 준수하는 XYZ 용 컴파일러가 있습니다. 이 프로그램을 “xyzFromJ”라고 부르세요.
“xyzFromJ”는 스스로를 입력으로 취하고 언어의 종속성과 정의에서 jxyz에 의해 생성 된 모든 것을 완전히 제거 할 수 있어야합니다. 이 시점부터 XYZ 언어에 대한 모든 변경은 XYZ로 작성되고 자체적으로 컴파일 된 컴파일러에서 수행 될 수 있습니다.
Answer
1 단계. 다른 언어로 컴파일러를 작성합니다.
2 단계. 1 단계에서 코드를 컴파일합니다.
3 단계. 동일한 언어로 컴파일러를 작성합니다.
4 단계에서 코드를 컴파일합니다. 3 단계.
컴파일러를 추가로 업데이트하려면 3-4 단계를 반복합니다.
1 단계와 3 단계는 동시에 또는 다른 순서로 발생할 수 있습니다.
나는 이것이 지나치게 단순화 된 것임을 인정합니다.
의견
Answer
다른 언어로 컴파일러 작성을 제안하는 다른 답변과 달리 (타겟팅하는 머신에서 실행되는 것으로 추정 됨), 처음부터 타겟 언어로 컴파일러를 작성하는 것도 가능합니다 (실제로 선호 됨).
C 용 컴파일러를 작성하고 싶다고 가정 해 보겠습니다. ARM 프로세서의 경우. Windows (Intel 아키텍처)에서 실행되는 C 컴파일러가 이미 있습니다. C로 새 컴파일러를 작성합니다. 프런트 엔드 (어휘 분석 및 구문 분석)와 백 엔드 (코드 생성) 모두입니다. 물론 백엔드는 Intel이 아닌 ARM 용 코드를 생성하도록 작성되었습니다.
그런 다음 기존 컴파일러로 새 컴파일러의 소스를 컴파일합니다. 컴파일러가 ARM에 대해 유효한 코드를 생성하는 것에 만족하면 컴파일 된 ARM 코드를 가져와 타겟 ARM 아키텍처에서 실행합니다. 이제 새 컴파일러에 대한 소스를 가지게되었으며,이를 수정하여 실행 파일로 공급하여 새 버전을 생성 할 수 있습니다.
이 프로세스를 크로스 컴파일이라고합니다. 장점은 컴파일러를 한 번 작성합니다.
Answer
다른 답변에서 :
Step 1. Write your compiler in a different language. Step 2. Compile the code from Step 1. Step 3. Write your compiler in the same language. Step 4. Compile the code from step 3.
1 단계와 2 단계는 새 언어에 대한 “최초”컴파일러에만 필요합니다. 3 단계와 4 단계에는 많은 변형이 있으므로 예를 들어 새 아키텍처에 대한 코드 생성기를 작성할 수 있습니다. 교차 컴파일 한 다음 새 컴퓨터에서 동일한 컴파일러를 실행합니다.또는 확장을 사용하지 않고 새 구문과 구문을 처리하도록 컴파일러를 확장 한 다음 확장을 사용하고 자체적으로 컴파일하도록 컴파일러를 다시 작성할 수 있습니다.