티스토리 뷰

SoftWare/기타

[컴파일러]컴파일 과정

White Whale 2016. 4. 1. 04:17
728x90

1.개요
   
예시를 이용한 컴파일의 4단계를 알아보자


<컴파일 과정도>

 

2. 컴파일의 4단계
   
좁은 의미의 파일 과정은 다음 4단계 과정으로 나눌 수 있다.

1. 구문 해석[어휘 해석(Lexical Analysis) + 구문 해석(Syntactic Analysis)]
2. 의미 해석(Semantic Analysis)
3. 중간 표현 생성(Create Intermediate code)
4. 코드 생성(Code Generation)

 

3. 예시

int a, b; ->
float c; ->
a = b + c; -> ③
d= 2a + c; -> ④
iff() ->

c = b a -> ⑥

 

4. 구문 해석 - 어휘 해석(Lexical Analysis)
   Token 생성 및 테이블 정의를 한다. 코드를 읽을 때 하나 하나 FSA에 넣어 예약어인지 함수인지 변수인지 판단한다.

④에서 d는 선언이 안되었지만 토큰 생성시 알 수 없으므로 에러가 나지 않는다. 다만, 2a를 FSA에 가져가면 예약어도 함수도 숫자도 변수도 아니라서 Lexial error가 발생한다. Lexial error에는 변수 이름 자리에 숫자를 넣거나 'float 2.3.1'이 있다.

 

5. 구문 해석 - 구문 해석(Syntactic Analysis)
   파싱을 하여 생성된 Token으로 구성된 Tree를 만든다. 파싱시 에러가 나면 해당 루틴을 제거하고 계속 진행한다. 'c = b a'와 'a + b = c' 는 트리 구조를 못만들기 때문에 Syntactic 에러가 발생한다. 추가로 파싱을 하면서 symbol table에 저장된 것들의 자료형을 매칭 시킨다.

 

6. 의미 해석(Semantic Analysis)
   만들어진 구문 트리를 읽으면서 추상 구문 트리(Abstract Syntax Tree) 데이터 구조를 만든다. 해당 트리를 만들면서 아래와 같은 작업을 한다.

1. 로컬 변수와 글로벌 변수 구별
2. 변수 선언과 참조 연결
3. 변수나 식 타입 체크
4. 변수 초기화 확인
5. 리턴 값 유효성 확인

 

 iff는 추후 링킹 시간 때까지 해당하는 함수를 못 찾을 시 에러가 발생한다.

 

7. 중간 표현의 생성
   추상 구문 트리가 완성되면, 컴파일러 내부에서만 사용 되는 중간 표현(IR, Intermediate Representation)구조로 추상 구문 트리를 변환한다. 중간 표현을 생성하는 이유는 여러 종류의 프로그래밍 언어를 생산지가 다른 CPU의 기계어와 대응 시키기 위해서이다.

만약 중간 표현이 없다고하면 각 언어는 cpu 제조사에 따라 명령어를 모두 가지고 있어야한다.

반대로 모든 프로그래밍 언어를 공통의 중간 표현으로 변환하면 각 제조사에 대한 중간 표현의 구분만 있으면 된다.

 

8. 최적화(Optimization)
   컴파일의 4단계에는 들어가지 않지만 실제 컴파일러 과정에는 코드 최적화(Optimizaion)를 하는 단계가 존재한다. 대표적인 예로 곱하기 2와 나누기 2를 Shift로 대체하고 a+1 대신 inc로 변경 해주는 것이다.

 

9. 코드 생성(Code Generation)
   중간 표현을 어셈블리 언어로 변환하는 단계이다. 최적화된 Intermediate Code를 가지고 Target language의 Object Code를 생성한다. 코드를 생성하는 프로그램 모듈이 코드 제너레이터이다. 코드 생성의 포인트는 프로그래밍 언어와 어셈블리 언어의 차이를 얼마나 줄이는 것이가? 이다.


10. Linking
   생성된 목적 코드를 합쳐서 실행 가능한 목적코드를 만들어 준다,

 


'SoftWare > 기타' 카테고리의 다른 글

표준화의 예  (0) 2016.04.13
C언어 type에 대한 subtype  (0) 2016.04.13
Programming Language - 용어 정리 1  (0) 2016.03.21
Binding의 개념  (1) 2016.03.15
Names과 Variables  (0) 2016.03.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함