컴파일러

컴파일러 내부에서 소스 언어에도 CPU에도 의존하지 않는 중간 표현(IR)을 사용하는 주된 이점은?

  1. A중간 표현을 사용하면 소스 코드를 읽지 않고도 컴파일할 수 있게 되기 때문에
  2. B중간 표현은 CPU가 그대로 실행할 수 있으므로 기계어 생성이 필요 없어지기 때문에
  3. C언어별 전단부와 CPU별 후단부를 분리할 수 있고 최적화도 공통으로 사용할 수 있기 때문에
정답과 해설 보기

정답: C. 언어별 전단부와 CPU별 후단부를 분리할 수 있고 최적화도 공통으로 사용할 수 있기 때문에

M종류의 언어와 N종류의 CPU를 지원할 때 조합마다 컴파일러를 만들면 M×N개가 필요하지만, 공통 중간 표현을 거치면 언어에서 중간 표현까지의 전단부(프런트엔드) M개와 중간 표현에서 CPU까지의 후단부(백엔드) N개로 충분합니다. 최적화의 상당 부분도 중간 표현 위에서 한 번 만들면 모든 언어와 CPU에서 사용할 수 있습니다. 중간 표현은 CPU가 그대로 실행할 수 있는 것이 아니며, 마지막에 기계어로 변환해야 합니다.

  • A. 소스 코드는 반드시 읽어야 합니다.
  • B. 중간 표현은 CPU가 직접 실행할 수 없으며 기계어로의 변환이 필요합니다.
  • C. 올바릅니다. 전단부와 후단부를 분리하여 최적화를 공통화할 수 있습니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 기본 블록에 대한 설명으로 올바른 것은?
  2. 제어 흐름 그래프에서 노드와 화살표가 나타내는 것의 조합으로 올바른 것은?
  3. SSA 형식 중간 표현의 특징으로 올바른 것은?
  4. 위의 코드를 SSA 형식으로 만들면 if문 뒤에 「x3 = φ(x1, x2)」와 같은 식이 들어간다. 이 φ 함수의 역할로 올바른 것은?
  5. 컴파일러의 상수 폴딩의 예로 올바른 것은?

이 분야의 비교