본문 바로가기

04번. IT 힌트얻기/▶ 이론

[Basic-1] 3. 인터프리터와 컴파일러


■ 인터프리터 (Interpreter)

프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다.
원시 코드를 기계어로 번역하는 컴파일러와 대비된다.
인터프리터는 다음의 과정 가운데 적어도 한 가지 기능을 가진 프로그램이다.

1. 소스 코드를 직접 실행한다.
2. 소스 코드를 효율적인 다른 중간 코드로 변환하고, 변환한 것을 바로 실행한다.
3. 인터프리터 시스템의 일부인 컴파일러가 만든, 미리 컴파일된 저장 코드의 실행을 호출한다.

인터프리터는 고급언어로 작성된 원시코드 명령어들을 한 번에 한 줄씩 읽어들여서 실행하는 프로그램이다.
고급언어로 작성된 프로그램들을 실행하는 데에는 두 가지 방법이 있다.
가장 일반적인 방법은 프로그램을 컴파일하는 것이고, 다른 하나는 프로그램을 인터프리터에 통과시키는 방법이다.
인터프리터는 고급 명령어들을 중간 형태로 번역한 다음, 그것을 실행한다.
이와는 대조적으로, 컴파일러는 고급 명령어들을 직접 기계어로 번역한다.

컴파일된 프로그램들은 일반적으로 인터프리터를 이용해 실행시키는 것보다 더 빠르게 실행된다. 그러나 인터프리터의 장점은계어 명령어들이 만들어지는 컴파일 단계를 거칠 필요가 없다는데 있다. 컴파일 과정은 만약 원시 프로그램이 크기가 크다면 상당한 시간이 걸릴 수 있다. 이와는 달리 인터프리터는 고급 프로그램을 즉시 실행시킬 수 있다. 이런 이유때문에, 인터프리터는 종종 프로그램의 개발 단계에서 사용되는데, 그것은 프로그래머가 한 번에 적은 량의 내용을 추가하고 그것을 빠르게 테스트 해보길 원하기 때문이다. 이외에도 인터프리터를 이용하면 프로그래밍을 대화식으로 할 수 있기 때문에, 학생들의 교육용으로 사용되는 경우도 많다. 

인터프리터와 컴파일러는 둘다, 대부분의 고급언어에 적용이 가능하지만, BASIC, LISP 과 같은 일부 언어들은 특별히 인터프리터에 의해서만 실행되도록 설계되었다. 그 외에도, 포스트스크립과 같은 페이지 기술 언어들도 인터프리터를 사용한다. 모든스트 스크립트 프린터는 포스트스크립 명령문을 실행할 수 있도록 인터프리터가 내장되어 있다. 

----------------------------------------------------------------------------------------------------------------

■ 컴파일러 (Compiler)


특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 프로그램을 말한다.
원래의 문서를 소스 코드 혹은 원시 코드라고 부르고, 출력된 문서를 목적 코드라고 부른다.
목적 코드는 주로 다른 프로그램이나 하드웨어가 처리하기에 용이한 형태로 출력되지만 사람이 읽을 수 있는 문서 파일이나 그림 파일 등으로 옮기는 경우도 있다.
원시 코드에서 목적 코드로 옮기는 과정을 컴파일 이라고 한다. 컴파일러는 소스 프로그램을 읽어서 즉시 결과를 출력하는 인터프리터와는 구분된다.

소스 코드를 컴파일하는 이유는 대부분 사람에게 이해하기 쉬운 형태의 고수준 언어로부터 실행가능한 기계어 프로그램을 만들기 위해서이다. 좁은 의미의 컴파일러는 주로 고수준 언어로 쓰여진 소스 코드를 저수준 언어(어셈블리어, 기계어 등)로 번역하는 프로그램을 가리킨다.

(1) 컴파일러의 원리

컴파일러에서 꼭 지켜야 할 두 가지 조건이 있다. 첫째로, 컴파일러는 옮김의 과정에서 프로그램의 뜻을 보존하여야 한다.
입력 받은 프로그램의 의미를 충실히 따라야 한다. 이런 조건이 없다면 컴파일러를 사용하는 사용자가 컴파일러를 믿고 프로그램을 작성할 수도 없고, 잘못된 옮김을 인정한다면 컴파일러를 올바르게 하기 위한 노력을 들일 필요가 없을 것이다.

두번째로, 실용적인 면에서, 컴파일러는 입력으로 들어론 프로그램을 어떤 면에서든지 개선해야 한다. 예를 들어, 소스 코드를 기계어로 옮긴다면 기계가 이해할 수 없었던 언어를 기계가 이해할 수 있게 개선한 것이 된다. 같은 언어로 옮긴 경우에는 성능이 개선되는 등의 장점이 있어야 한다. 그렇지 않다면 컴파일러는 수행할 이유가 없어진다.

(2) 목적코드가 실행되는 방법

컴파일러가 실행되는 컴퓨터나 운영체제가 컴파일러의 목적코드가 실행될 컴퓨터나 운영체제와 같은 경우 네이티브 컴파일러(native compiler)라고 한다. 반면에 크로스 컴파일러(cross compiler)는 다른 컴퓨터나 운영체제에서 실행되도록 제작된다. 
임베디드 시스템 등 소프트웨어 개발에 충분한 환경을 갖추지 못한 환경에서 동작할 프로그램을 만들기 위해 사용된다.

또한 가상 머신에서 동작할 프로그램을 만드는 컴파일러도 있다. 이 경우 일반적으로 출력물이 가상 머신을 위해 제작된 바이트코드 형태의 기계어가 되므로 바이트코드 컴파일러라고 부른다.











 

'04번. IT 힌트얻기 > ▶ 이론' 카테고리의 다른 글

레지스터와 메모리의 차이  (0) 2011.09.05
WAS와 WS  (0) 2011.08.19
[Basic 1] 1. 프로그래밍의 역사 (2)  (0) 2011.08.10
[Basic-1] 2. 어셈블리어  (0) 2011.08.10
[Basic-1] 1.프로그래밍의 역사 (1)  (0) 2011.08.09