컴파일러의 이해

컴파일러의 이해 개요

Ms_Tony 2023. 6. 3. 13:46

이 글은 한빛미디어에서 발행된 '컴파일러의 이해' 책을 읽으면서 정리한 내용입니다.

책 링크

Chapter 1. 개요

컴파일러의 필요성

 인간이 사용하는 고급 언어를 컴퓨터가 이해할 수 있도록 기계어로 번역해주는 역할.

 번역기는 하나의 프로그래밍 언어로 작성된 프로그램을 그와 동등한 의미를 가진 다른 프로그래밍 언어로 된 프로그램으로변환하는프로그램입니다.

  • 소스 프로그램 : 입력되는 프로그램
  • 목적 프로그램 : 출력되는 프로그램

 

번역기의 종류

  1. 어셈블러
    • 어셈블리어로 작성된 소스 프로그램을 그에 대응하는 기계어로 번역된 목적 프로그램으로 변환해주는 번역기
    • 어셈블리어는 기계어를 사람이 좀 더 이해하기 쉽도록 기호화 한 것.
    • 2 Pass Assembler
      • 1Pass : 메모리를 표시하는 모든 식별자를 찾아내고 그 식별자들을 기호표에 저장
        • 1 Word = 4Byte
      • 2Pass : 각 연산 코드를 기계어에서 수행될 수 있는 비트로 표현.
        • 명령어
          명령어RegisterTagValue재배치 비트
          0001 01 00 00000000 *
          0011 01 10 00000010  
        1. LOAD R1 OrdinaryAddressMode Value
        2. ADD R1 ImmediateAddressMode Value
        • 재배치 비트 : 각각의 피연산자가 재배치 가능 기계어임을 나타내는 비트
  2. 컴파일러
    • 소스 프로그램을 어셈블리어나 기계어로 번역된 목적 프로그램으로 변환해주는 번역기
    • 전체적으로 한번 디코딩하면 그 다음부터는 실행만 하면 되므로, 실행 시간 측면에서 효율적
    • 소스가 기계어로 번역되면서 큰 메모리를 필요로 할 수 있음.
    • Cross Compiler
      • 컴파일러가 실행되고 있는 컴퓨터의 기계어로 번역하는 것이 아니라, 다른 컴퓨터의 기계어로 번역하는 컴파일러
  3. 프리프로세서(전처리기)
    • 컴파일 전에 특정 기능을 수행하여 언어를 확장하는 역할
    • 일반적으로 3가지 기능을 가지고 있음.
      1. 헤더 파일에 Include한 파일을 실제 내용으로 대체하는 기능
      2. 매크로 처리 기능
        1. 매크로로 정의된 부분에 대해 컴파일 하기 전에 매크로의 내용으로 미리 확장
      3. 조건부 컴파일 (Conditional Compile)
        1. 조건에 따라 소스의 일부분을 선택적으로 삽입하거나 삭제하는 기능
  4. 인터프리터
    • 문장 단위로 언어를 번역과 동시에 실행한 구 그 결과를 출력하는 번역기
    • ‘Simulation 기법’ 이라고도 함.
    • 대화용 언어를 구현할 때 사용
    • 컴파일러와 실행 속도, 메모리 사용 공간에 대해서는 상반 관계를 가짐.
  •  

언어 처리 시스템

 문제가 주어지고 그 문제에 대한 알고리즘을 작성해서 소스 프로그램으로부터 실행 가능한 목적 프로그램을 생성하는 것

  • 링커 Linker
    • 재배치 가능한 기계 코드를 다른 재배치 가능한 목적 파일 및 라이브러리 파일과 결합하여 기계에서 실제적으로 실행할 수 있는 코드로 변환해주는 것
  • 로더 Loader
    • 실행 가능한 모든 목적 파일을 통합하여 실행을 위해 레지스터를 할당하고 메모리에 적재