크로스 컴파일러의 T 다이어그램


9

Red Dragon Book Compilers에서 부트 스트랩을 공부하고 있으며 크로스 컴파일러에 대한 T 다이어그램이 매우 혼란 스럽다는 것을 알았습니다. "compiler1 through compiler2"의 의미를 이해할 수 없습니다. 누구나 실제 컴파일러와 관련하여 더 나은 설명, 비유 또는 예를 제공 할 수 있습니까?

먼저 몇 가지 표기법. 으로 에스= 여기에 이미지 설명을 입력하십시오출력 언어 / 기계 코드 을 생성하는 언어 작성된 언어 의 컴파일러를 의미합니다 . 이것은 묘비 또는 T- 다이어그램 입니다.에스

컴파일러 컴파일

  1. 기계 N에 대한 코드를 생성하는 구현 언어 S에 새로운 언어 L에 대한 크로스 컴파일러가 있다고 가정하십시오.

    에스=
    LSN에 대한 T- 다이어그램

  2. 기계 M에서 기계 M에 대한 코드를 구현하는 기존 S 컴파일러도 있다고 가정합니다.

    에스미디엄미디엄=
    SMM에 대한 T- 다이어그램

  3. SMM을 통해 LSN을 실행하여 LMN 생성

컴파일러 구성

미디엄=에스+에스미디엄미디엄
LMN = LSN + SMM의 T- 다이어그램


T- 다이어그램을 추가했는데, 실제로 무슨 일이 일어나고 있는지 더 쉽게 이해할 수 있어야합니다. 바라건대 누군가가 더 나은 렌더링 방법을 사용할 수 있기를 바랍니다.
Dave Clarke

답변:


11

T- 다이어그램 (원본의 질문에서 생략 한)은 이러한 종류의 질문을 이해하는 데 중요합니다. 마지막 T- 다이어그램을 봅시다.

여기에 이미지 설명을 입력하십시오

첫 번째 T는 S로 작성된 L에서 N까지의 컴파일러를 설명합니다.

두 번째 T는 M에서 작성된 M에서 (또는 M에서 실행되는) S에서 M으로의 컴파일러를 설명합니다. 이것은 컴파일러 컴파일러 가 될 것 입니다.

첫 번째 T에 두 번째 T를 적용하면 첫 번째 T가 머신 M에서 실행되도록 컴파일됩니다. 따라서 결과는 머신 M에서 실행되는 L에서 N으로의 컴파일러입니다.

두 번째 T도 머신 M에서 실행된다는 사실은 크로스 컴파일러를 사용하지 않고 컴파일러를 실행할 머신에서 컴파일러 컴파일러를 실행하고 있다는 것을 캡처합니다 (하단 M이 다른 경우) ).


5

그것은 우리가 SMM으로 LSN을 컴파일하는 것을 의미합니다. 즉, SMM을 통해 LSN의 소스 코드를 실행합니다.

SMM이 일부 소스 코드를 컴파일하면 머신 M에 대한 실행 파일이 생성되므로 SMM으로 LSN을 컴파일하면 머신 N에 대한 실행 파일을 생성하기 위해 머신 M에서 L 소스 파일을 컴파일하는 LMN이 실행 파일이됩니다.

아마도 이것을 유추하여 이해하는 것이 더 쉬울 것입니다. ccARM 코드를 생성하는 Fortran으로 작성된 C 컴파일러가 있다고 가정합니다 . fcx64 컴퓨터에 포트란 컴파일러가 있다고 가정 합니다. cc소스 코드를 컴파일하면 fcx64에서 실행되고 C 프로그램은 컴파일되지만 ARM 용 실행 파일이 생성되는 프로그램이 생성됩니다.


0

간단하게 ....

참고 : 컴파일러는 저수준 언어에서만 실행할 수 있습니다.

첫 번째 다이어그램에서 컴파일러는 HLL (High Level Langg)로 작성되므로 컴퓨터에서 컴파일러를 실행하려면 컴파일러의 구현 언어가 LLL이어야합니다.

따라서 두 번째 다이어그램에서 컴파일러의 구현 언어는 대상 코드가 자체 컴퓨터에서 실행될 수 있도록 자체 상주 컴파일러에서 실행됩니다.

마지막으로 컴파일러와 langg--M이있는 머신에서이 둘을 결합

입력 언어 --L

출력 Langg--N

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.