컴파일 프로세스란?
컴파일러가 사용자가 프로그래밍 언어로 작성한 소스 코드를 컴퓨터에서 실행할 수 있는 기계 코드로 변환하는 일련의 과정입니다. 기계 코드는 일반적으로 실행 파일을 생성하기 위해 다른 코드와 연결될 수 있는 실행 파일 또는 라이브러리의 형태입니다.
다음은 일반적인 컴파일 프로세스 단계입니다. 이는 기본적인 사항이며, 보다 세부 사항은 프로그래밍 언어, 대상 플랫폼 및 사용 중인 컴파일러에 따라 다를 수 있습니다.
'전처리 - 어휘 분석 - 구문 분석 - 의미론적 분석 - 중간 코드 생성 - 최적화 - 코드 생성 - 연결'
전처리(Preprocessing) : 소스 코드 내부에 있는 매크로(#) 명령어를 확인하고 해당 전처리기 지시문에 지정된 작업들을 수행합니다.
어휘 분석(Lexical analysis) : 전처리 단계에서 전달된 코드들을 토큰(키워드, 식별자 및 기호와 같은 더 작은 단위)으로 분해하는 어휘 분석기로 전달됩니다.
구문 분석(Syntax analysis) : 어휘 분석으로 나온 결과값은, 흔히 '파서'라고도 하는 구문 분석기로 전달되어 코드의 구문 정확성을 확인하고 코드 구조를 나타내는 파스 트리를 생성합니다.
의미론적 분석(Semantic analysis) : 구문 분석기에 의해 전달된 코드를 정확성(예: 변수 및 함수의 올바른 사용)을 확인하고 유형 정보 및 기타 메타데이터로 구문 분석 트리에 주석을 추가하는 의미론적 분석기로 전달됩니다.
중간 코드 생성(Intermediate code generation) : 의미 분석기의 결과 값은 중간 코드를 생성하는 데 사용되며, 이는 컴파일러가 작업하기 더 쉬운 형식으로 소스 코드를 표현한 것입니다. 중간 코드는 일반적으로 어셈블리 코드 또는 바이트코드 형식입니다.
최적화(Optimization) : 중간 코드로 전달된 코드의 성능을 향상시키기 위해 다양한 기술을 적용하는 최적화 프로그램으로 전달됩니다(예: 중복 명령 제거, 캐싱 개선을 위한 코드 재배열).
코드 생성(Code generation) : 최적화된 중간 코드는 코드 생성 과정으로 전달되어 대상 플랫폼의 기계어 코드로 변환됩니다. 기계 코드는 일반적으로 실행 파일을 만들기 위해 다른 개체 파일 및 라이브러리와 연결되어야 하는 개체 코드의 형태입니다.
연결(Link) : 개체 파일과 라이브러리는 링커로 전달되어 단일 실행 파일 또는 라이브러리로 결합됩니다. 또한 링커는 링크되는 개체 파일 및 라이브러리에 정의되지 않은 모든 기호(예: 함수 호출)를 확인합니다.
'공부 > CS' 카테고리의 다른 글
유니코드(Unicode)란? (0) | 2023.06.05 |
---|---|
스택(Stack)영역과 힙(Heap)영역의 차이점은? (2) | 2023.03.28 |
컴퓨터 구조에서 캐시(Cache)는 왜 필요할까? (0) | 2023.03.21 |
메모리 구조의 개념 (0) | 2023.02.11 |
프로그램 실행 순서와 메모리 구조 (1) | 2023.01.08 |