CS

컴파일의 각 단계 파고들기

kark 2025. 4. 22. 13:57
728x90

컴파일 과정


어휘분석 - 구문분석 - 의미분석 - 중간언어코드생성 - 최적화 - 기계어코드생성 - 링킹


 

 

어휘 분석 단계


컴퓨터는 소스코드로 작성된 문자열을 그대로 해석할 수 없습니다.

그렇기에 소스코드를 이해하기 앞서 문장을 키워드 단위로 분할하고 각 키워드 용도(변수, 기호, 연산자 등)를

확인해 종류별로 태그를 붙이는 과정을 의미합니다.


 

 

구문 분석 단계


어휘 분석 단계로 분리된 키워드를 통해 문장이 형성되는지 검사하는 단계입니다.

각 문장은 세미콜론으로 구분되며 '주어와 동사관계가 옳바르게 형성되었는지'와 같이

각 키워드들이 문법에 맞게 작성되었는지 확인하는 과정입니다.


 

 

의미 분석 단계


문장의 형태가 완성되었더라도 의미가 부적합하다면 의미오류로 검출되는 과정입니다.

타입의 불일치와 같이 실행할수 없는 상황인지 확인하게 됩니다.

1. 타입검사 > 
		int a = "hello"

2. 선언검사 >
		Myclass A;
    	Console.Write(A.Value);
    
3. 접근성 검사 > 
		외부에서 private 접근

4. 반환성 검사 >
		반환타입 불일치
        
5. 상수 검사 >
		const int a = 5;
        a = 3; (상수 변경)

 

중간언어 코드 생성


타겟에 맞는 기계어 코드 생성작업과 다음에 있을 최적화 단계의 작업 효율성을 높이기 위해 사전작업을 준비해두는 단계입니다.

최적화 단계 준비과정은 복잡한 식을 전부 간단한 식으로 풀어두는 과정이 포함되어있습니다.

 

 

최적화 단계


명령의 실행 결과는 같으나 더 빨리 실행될 수 있게, 불필요한 연산을 제거하고 다수의 명령어를 더 빠르게 처리하기 위한 명령어 재배치와 같은 최적화 작업이 수행됩니다.


 

 

기계어 생성 단계 - 런타임 (실제 프로그램이 동작을 시작하는 단계)


중간언어로 작성된 코드를 CPU가 이해할 수 있는 바이너리 코드로 변환하는 단계입니다.

이 과정에서는 CPU에 따른 명령어 선택, 레지스터 할당, 명령어 재배치, 메모리 주소 계산 과정이 포함되어 있으며

실행환경에 따른 동적 최적화가 수행됩니다.


 

 

링킹 단계


각 컴파일단계는 각자 독립적인 기계어 변환을 수행합니다.

각 파일은 서로 독립적인 구조이므로 외부 참조를 통해 서로의 기능을 연동시켜야 하는 작업이 필요하며

이 단계에서 이와같은 작업을 수행하게 됩니다. 그로 인해 하나의 완전한 실행파일로 구성될 수 있게 됩니다.

'CS' 카테고리의 다른 글

클래스 파고들기  (0) 2025.04.24
컴파일 파고들기  (0) 2025.04.22
오버로드, 오버라이드(가상테이블 개념) 파고들기  (0) 2025.04.21
Static 파고들기  (0) 2025.04.18
절차지향 프로그래밍 POP  (0) 2025.02.13