번역기
번역기란 하나의 프로그래밍 언어로 작성된 프로그램을 입력으로 받아 동등한 의미를 갖는 다른 프로그래밍 언어로 된 프로그램을 출력하는 시스템 프로그램을 말한다.
여기서 입력되는 프로그램을 소스 프로그램이라 하고, 출력되는 프로그램을 목적 프로그램(목적 언어로 작성된)이라 한다.
번역기의 종류
번역기는 입력과 출력 프로그램에 따라 여러 종류로 나뉘게 된다.
Preprocessor
프리프로세서의 경우 #include같은 지시문이 있는 경우 이를 처리해 확장된 프로그램을 출력한다.
따라서 이 경우에는 소스와 목적 프로그램의 언어가 모두 고급 언어가 된다.
여기서 "확장"은 매크로 처리 기능, 조건부 컴파일 기능(Conditional Compile), 헤더파일이 포함된 파일 포함 기능(File include)을 말한다.
- 매크로 처리 기능 : 유사한 소스코드를 매크로로 지정, 필요할 때 마다 확장하여 사용한다.
- 조건부 컴파일 기능 : 조건에 따라 소스 프로그램의 일부분을 선택적으로 삽입/삭제할 수 있다.
- 파일 포함 기능 : 컴파일 시간에 필요한 파일(라이브러리..)을 포함시켜 하나의 프로그램으로 컴파일된다.
따라서
프리프로세서의 경우 다음처럼 사용된다
Assembler
어셈블러는 어셈블리어로 쓰인 프로그램을 입력으로 받아 기계어 프로그램으로 바꿔 출력한다.
Interpreter
파이썬 공부를 하면 첫장에 나오는 그 인터프리터가 맞다.
인터프리터는 특이하게도 소스 언어를 특수한 중간 언어로 변환한다. 이 변환된 언어를 입력으로 받아 목적언어의 프로그램으로 변환하지 않고 직접 실행하여 결과를 출력한다.
이때 한 줄 단위로 번역, 실행하기 때문에 매번 같은 메모리를 사용하게 되지만, 이 때문에 반복문에서 실행시간이 많이 늘어나게 된다.
Compiler
컴파일러는 고급언어로 쓰여진 프로그램을 어떤 특정한 컴퓨터에서 직접 실행 가능한 형태의 프로그램으로 번역해주는 컴퓨터 프로그램이다.
이때 주목할 부분이 "어떤 특정한 컴퓨터"라는 것이다. Source의 언어와, Machine에 의존하기 때문에 다른환경을 가진 곳에서는 실행이 불가능할 수 있다.
+ Cross Compiler
소스 프로그램을 컴파일러가 실행되고 있는 기계에 대한 기계어로 번역하는것이 아니라, 다른 기종에 대한 기계어로 번역하는 컴파일러를 말한다.
+ Bytecode Compiler
JAVA의 경우에 바이트코드 컴파일러를 사용한다.
자바 소스 프로그램을 바이트 코드로 불리는 중간 코드로 컴파일한다. 이 바이트 코드는 자바 가상 머신(JVM)에서 인터프리터 되어 실행된다.
전체의 관점에서 번역기를 통해 언어가 어떻게 처리되는지 살펴보면 다음과 같다.
'Computer Science > Compiler' 카테고리의 다른 글
[Compiler] 12. Symbol Table (1) (0) | 2024.03.26 |
---|---|
[Compiler] 02. 형식 언어 (1) - 언어 (0) | 2024.03.12 |
[Compiler] 01. 컴파일러 개론 (3) - 컴파일러 자동화 도구 (0) | 2024.03.06 |
[Compiler] 01. 컴파일러 개론 (2) - 일반 컴파일러 구조 (0) | 2024.03.06 |