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
'언어이론' 카테고리의 다른 글
파스 트리 (2) - 모호성과 모호성 제거 (4) | 2020.05.18 |
---|---|
파스 트리 (1) - 파스 트리 그리는 방법 (0) | 2020.05.18 |
배커스-나우어 형식 (BNF) (4) | 2020.05.14 |
문맥자유언어 (Context Free Grammar) (1) | 2020.05.14 |
프로그래밍 패러다임 개요 (0) | 2020.04.14 |
인터프리터 & 혼합 기법 (0) | 2020.04.14 |
프로그래밍 언어의 분류 (0) | 2020.01.22 |