컴파일러

추상 구문 트리(AST)의 특징으로 올바른 것은?

  1. A소스 코드의 괄호나 구분 기호까지 모두 노드로 남겨 둔다
  2. B의미와 관계없는 기호를 생략하고 연산자의 우선순위를 트리 형태로 나타낸다
  3. CCPU의 명령과 1대1로 대응하며 그대로 실행할 수 있다
정답과 해설 보기

정답: B. 의미와 관계없는 기호를 생략하고 연산자의 우선순위를 트리 형태로 나타낸다

구문 분석에서는 문법 규칙대로 괄호나 구분 기호까지 포함한 트리(구체 구문 트리)가 만들어지지만, 이후의 처리에는 불필요한 정보가 많이 들어 있습니다. 추상 구문 트리는 프로그램의 의미에 필요한 연산과 문장만을 노드로 한 트리로, 예를 들어 (a + b) * c에서는 곱셈 노드 아래에 덧셈 노드가 오므로 괄호가 없어도 계산 순서를 알 수 있습니다. CPU의 명령에 대응하는 것은 더 뒤의 단계에서 생성하는 코드입니다.

  • A. 괄호까지 남기는 것은 구체 구문 트리 쪽입니다.
  • B. 올바릅니다. 불필요한 기호를 생략하고 우선순위를 트리 형태로 나타냅니다.
  • C. CPU의 명령에 대응하는 것은 뒤 단계의 코드입니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 컴파일러 내부에서 소스 언어에도 CPU에도 의존하지 않는 중간 표현(IR)을 사용하는 주된 이점은?
  2. 기본 블록에 대한 설명으로 올바른 것은?
  3. 제어 흐름 그래프에서 노드와 화살표가 나타내는 것의 조합으로 올바른 것은?
  4. SSA 형식 중간 표현의 특징으로 올바른 것은?
  5. 위의 코드를 SSA 형식으로 만들면 if문 뒤에 「x3 = φ(x1, x2)」와 같은 식이 들어간다. 이 φ 함수의 역할로 올바른 것은?

이 분야의 비교