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