공부/CS

컴파일 시 작동 순서는 어떻게 되는가?

셩잇님 2022. 12. 26. 17:46
반응형

 

 

컴파일 프로세스란?

컴파일러가 사용자가 프로그래밍 언어로 작성한 소스 코드를 컴퓨터에서 실행할 수 있는 기계 코드로 변환하는 일련의 과정입니다. 기계 코드는 일반적으로 실행 파일을 생성하기 위해 다른 코드와 연결될 수 있는 실행 파일 또는 라이브러리의 형태입니다.

다음은 일반적인 컴파일 프로세스 단계입니다. 이는 기본적인 사항이며, 보다 세부 사항은 프로그래밍 언어, 대상 플랫폼 및 사용 중인 컴파일러에 따라 다를 수 있습니다.

'전처리 - 어휘 분석 - 구문 분석 - 의미론적 분석 - 중간 코드 생성 - 최적화 - 코드 생성 - 연결'

 

 


 

 

전처리(Preprocessing) : 소스 코드 내부에 있는 매크로(#) 명령어를 확인하고 해당 전처리기 지시문에 지정된 작업들을 수행합니다. 

어휘 분석(Lexical analysis) : 전처리 단계에서 전달된 코드들을 토큰(키워드, 식별자 및 기호와 같은 더 작은 단위)으로 분해하는 어휘 분석기로 전달됩니다.

구문 분석(Syntax analysis) : 어휘 분석으로 나온 결과값은, 흔히 '파서'라고도 하는 구문 분석기로 전달되어 코드의 구문 정확성을 확인하고 코드 구조를 나타내는 파스 트리를 생성합니다.

의미론적 분석(Semantic analysis) : 구문 분석기에 의해 전달된 코드를 정확성(예: 변수 및 함수의 올바른 사용)을 확인하고 유형 정보 및 기타 메타데이터로 구문 분석 트리에 주석을 추가하는 의미론적 분석기로 전달됩니다.

중간 코드 생성(Intermediate code generation) : 의미 분석기의 결과 값은 중간 코드를 생성하는 데 사용되며, 이는 컴파일러가 작업하기 더 쉬운 형식으로 소스 코드를 표현한 것입니다. 중간 코드는 일반적으로 어셈블리 코드 또는 바이트코드 형식입니다.

최적화(Optimization) : 중간 코드로 전달된 코드의 성능을 향상시키기 위해 다양한 기술을 적용하는 최적화 프로그램으로 전달됩니다(예: 중복 명령 제거, 캐싱 개선을 위한 코드 재배열).

코드 생성(Code generation) : 최적화된 중간 코드는 코드 생성 과정으로 전달되어 대상 플랫폼의 기계어 코드로 변환됩니다. 기계 코드는 일반적으로 실행 파일을 만들기 위해 다른 개체 파일 및 라이브러리와 연결되어야 하는 개체 코드의 형태입니다.

연결(Link) : 개체 파일과 라이브러리는 링커로 전달되어 단일 실행 파일 또는 라이브러리로 결합됩니다. 또한 링커는 링크되는 개체 파일 및 라이브러리에 정의되지 않은 모든 기호(예: 함수 호출)를 확인합니다.

 

 

 

반응형