CS

컴파일러 Compiler

kark 2025. 2. 10. 12:27
728x90

컴파일러는 프로그래밍 언어로 작성된 소스 코드를 기계어로 변환하는 프로그램이다.

평소에 작성하는 코드는 사람이 이해하기 쉬운 고수준 언어이지만 컴퓨터는 기계어 0과 1로 된 코드만 이해할 수 있다.

컴파일러는 이 둘을 연결해주는 역할을 하며, 소스 코드를 실행 가능한 프로그램으로 변환해준다.

 

컴파일러의 주요 역할

1. 코드 변환 : 프로그래머가 작성한 코드를 컴퓨터가 실행할 수 있는 기계어로 변환

2. 코드 최적화 : 성능 향상을 위해 중복 코드 제거, 실행 속도 개선, 메모리 최적화 등을 수행

3. 오류 감지 : 코드에 문법 오류, 의미 오류가 있는지 검사

 

컴파일러 동작 과정

1. 전처리 Preprocessing

컴파일 전 코드에서 #include, #define 같은 전처리기 지시문을 처리하는 단계로

이 과정에서는 헤더 파일 포함, 매크로 치환, 조건부 컴파일 처리, 주석제거 작업이 수행된다.

 

헤더파일 포함처리

#include <stdio.h> 같은 헤더 파일을 코드에 삽입해 사용 가능하게 만듦

전처리기가 헤더 파일의 내용을 그대로 포함시킴

 

매크로 치환

#define 으로 정의된 코드를 변경시킨다.

컴파일 타임에 텍스트 그대로 대체된다. 예로 #define PI 3.141592

 

조건부 컴파일

#if 와 같이 특정 조건에 따라 코드 포함 여부를 결정한다.

 

2. 어휘 분석

소스 코드를 토큰 단위로 분석해 의미를 구분하는 단계이다.

토큰은 키워드, 식별자, 연산, 숫자 리터럴 등으로 분류된다.

int x = 10 + 20;

[int] [x] [=] [10] [+] [20] [;]

 

어휘 분석 후, 프로그램은 코드를 토큰의 나열 형태로 변환하고 다음 단계로 진행된다.

 

3. 구문 분석

토큰이 프로그래밍 언어의 문법에 맞게 작성되었는지 검사하는 단계

int x = 10; 정상

int x = ; 오류

 

4. 의미 분석

코드가 문법적으로 맞더라도, 논리적 오류가 있는지 검사하는 단계

int x = "Hello"; 오류

 

5. 중간 코드 생성

플랫폼 별 독립적인 중간 코드를 생성하는 단계

중간 코드는 CPU 아키텍처에 관계없이 공통적으로 사용할 수 있다.

이후에 실제 실행 환경에 맞춰 기계어 코드로 변환이 이루어진다.

 

 6. 최적화

코드의 실행속도를 높이고 메모리 사용을 줄이기 위해 최적화를 수행하는 단계이다.

int x = 5+3; => int x = 8;

 

7.기계어 코드 생성

최적화된 중간 코드를 CPU 가 실행할 수 있는 기계어로 변환하는 단계

 

8. 링킹

여러개의 개별 컴파일된 객체 파일과 라이브러리를 연결해 실행 파일을 생성하는 단계