컴파일 개요

언어이론

2020. 4. 14. 11:44

1. 컴파일 (번역) 기법

  • 고급 언어로 작성된 프로그램을 컴퓨터가 바로 실행할 수 있는 프로그램으로 변환하는 방식
  • 번역이 완료되면 빠르게 프로그램을 실행할 수 있는 장점이 있음
  • 컴파일러의 입력은 고급언어로 된 원시 프로그램(source program)이고,
  • 컴파일러의 출력은 기계어로 된 목적 프로그램(object program)이다.

 

2. 컴파일 과정

[그림] 컴파일 과정

1) 어휘분석 (Lexical Analysis) :

  • 모든 텍스트를 토큰 단위로 자르는 과정임.
  • 예를 들어 A = 3 + (5 - 2)라는 문장이 있으면 [A, =, 3, +, (, 5, -, 2, )]와 같이 토큰별로 분리됨.

 

2) 구문분석(Syntax Analysis) : 

  • 토큰들이 문법적으로 옳은지 검사하고, 파스트리라는 임베딩 구조를 생성함
  • 파스트리를 이용하여 현재 토큰들이 문법적으로 올바르게 구성되어있는지 평가할 수 있음 (BNF이용)

 

3) 의미분석 및 중간코드 생성 (Semantic Analysis & Intermediate code) :

  • 기계어는 아니지만 어느정도 기계어에 가까운 중간코드(어셈블리어)를 생성함
  • 이 과정에서 의미적으로 옳은지 검사함 (문법오류는 구문분석, 의미오류는 의미분석)
input :
A = 3 + (5 - 2)

output :
sub t0 5 2
add t0 t0 3
mov A t0

 

4) 최적화 단계 (Optimization)

  • 중간 코드에서 불필요한 코드를 제거하거나 더 효율적인 코드로 개선하여
  • 중간코드의 크기를 줄이고 실행속도를 빠르게 한다.
input :
mov t0 10
mov t1 t0
mov t2 t1
add t2 2 t2

output :
mov t0 10
add t0 2 t0

 

5) 코드 생성단계

  • 최적화된 중간코드를 컴퓨터가 이해할 수 있는 기계어(2진수)로 만들어낸다.
  • 이를 목적 프로그램 (Object Program)이라고 한다.
input :
mov t0 19
add t0 2 t0

output :
000010010000110100110110111011101
010010010101010110111011010101010