관리 메뉴

범슈의 연구실

컴파일(Compile) 기법은 무엇인가 본문

Computer Science/프로그래밍 언어론

컴파일(Compile) 기법은 무엇인가

berom 2023. 3. 26. 20:20
728x90

컴파일 기법이란

  • 고급 언어로 작성된 프로그램을 바로 실행 할 수 있는 프로그램으로 변환하는 방식이다
  • 소스 코드로 작성해 놓은 것을 컴퓨터가 알아들을 수 있는 언어로 바꾸는 과정
    • 컴퓨터는 바이너리 즉 기계어만 이해한다
    • 소스 코드를 목적 프로그램으로 변경 시켜야 한다
  • 번역이 완료되면 빠르게 실행 시킬 수 있는 장점이 있다

컴파일 단계

어휘 분석(lexical analysis)

  • 원시 프로그램을 토큰 단위로 자르고, 토큰과 관련된 정보를 구문 분석 단계로 전달 한다.

구문 분석(syntax analysis)

  • 어휘 분석 단계에서 전달 받은 토큰들이 문법적으로 옳은지 검사
  • 오류가 없다면 파스 트리라 불리는 구조를 생성한다

중간 코드 생성 단계

  • 중간 코드
    • 소스 코드를 기계어로 번역하기 전, 번역기가 이해가 쉬운 추상화 된 코드를 말한다
    • 기계어보다는 고수준이며 언어와 기계 아키텍처에 독립적이다
    • 좋은 예시로 자바의 중간 코드는 JVM에 의해 생성된 바이트 코드이다
  • 문법적인 오류가 아닌 의미적인 오류를 검사
  • 중간 코드 생성 단계에 사용되는 언어는 중간 언어라 한다
    • 중간 언어는 특정 기계어나 아키텍처에 종속 되지 않는다

최적화 단계

  • 중간 코드에서 불필요한 코드를 제거 및 효율적인 코드로 개선
  • 중간 코드의 크기를 줄이고 실행 속도를 빠르게 한다

코드 생성 단계

  • 최적화 된 중간 코드로부터 해당 컴퓨터가 인식 할 수 있는 목적 프로그램 생성
  • 컴파일 된 .C 소스 코드를 분석하고 최적한 결과를 기반으로 기계어 코드를 생성해 오브젝트 파일에 저장하는 단계
    • 윈도우 : Obj
    • 리눅스/유닉스 : .o

링킹 : 코드 생성 다음 단계는 뭘까?

링킹 단계는 컴파일 과정이 끝난 후에 이루어지며, 링커(linker)라는 별도의 프로그램이 사용됩니다. 링킹 단계에서는 다음과 같은 작업이 이루어집니다:

  1. 오브젝트 파일 결합: 컴파일러가 생성한 여러 오브젝트 파일(.obj 또는 .o 파일)을 결합합니다. 이 과정에서 코드와 데이터가 하나의 실행 가능한 파일에 병합됩니다.
  2. 라이브러리 연결: 필요한 라이브러리와 오브젝트 파일을 연결합니다. 이를 통해 사용자가 작성한 코드와 이미 존재하는 라이브러리 코드가 하나의 실행 가능한 파일에 포함됩니다.
  3. 심볼 해석: 링커는 프로그램에서 사용되는 함수나 변수의 주소를 결정합니다. 이 과정에서 프로그램의 심볼(예: 함수 이름)이 메모리 주소로 대체됩니다.
  4. 재배치: 링커는 메모리 주소를 기반으로 프로그램의 코드와 데이터를 재배치합니다. 이 과정을 통해 모든 참조가 올바른 주소를 가리키게 됩니다.
  5. 실행 가능한 파일 생성: 오브젝트 파일과 라이브러리를 결합한 후, 실행 가능한 파일(예: .exe 또는 ELF 파일)이 생성됩니다.

링킹 단계를 거쳐 최종적으로 실행 가능한 파일이 생성되며, 이 파일은 사용자가 작성한 코드와 필요한 라이브러리가 포함되어 있는 상태입니다.

'Computer Science > 프로그래밍 언어론' 카테고리의 다른 글

명령형 언어  (0) 2023.03.26
하이브리드 기법이란?  (0) 2023.03.26
해석 기법이란?  (0) 2023.03.26
참조 투명(referential transparency)  (0) 2023.03.14
꼬리 재귀(tail recursion)  (0) 2023.03.14