CS 기초

[CS기초] 컴파일러, 인터프리터

태현123 2021. 9. 14. 21:19
728x90
반응형
SMALL

오늘 알아볼 내용은 컴파일과 인터프리터이다.

 

컴파일러는 뭐하는놈인가??

컴파일러(compiler, 순화 용어: 해석기, 번역기)는 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램을 말한다. 컴파일러 high-level programming language를 실행 프로그램을 만들기 위한 lower level language(예, 어셈블리 언어, object 코드, machine code)로 바꾸는 데 사용된다. 원래의 문서를 소스 코드 혹은 원시 코드라고 부르고, 출력된 문서를 목적 코드라고 부른다. 목적 코드는 주로 다른 프로그램이나 하드웨어가 처리하기에 용이한 형태로 출력되지만 사람이 읽을 수 있는 문서 파일이나 그림 파일 등으로 옮기는 경우도 있다. 원시 코드에서 목적 코드로 옮기는 과정을 컴파일(compile, 순화 용어: 옮김, 번역, 문화어: 콤파일)이라고 한다.

https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC

 

컴파일러 - 위키백과, 우리 모두의 백과사전

컴파일은 여기로 연결됩니다. 일본의 기업에 대해서는 컴파일 (기업) 문서를 참고하십시오. 일반적인 다중 언어, 다중 대상 컴파일러의 동작 모습. 컴파일러(compiler, 순화 용어: 해석기, 번역기)

ko.wikipedia.org

 

컴파일의 과정은 대략 이렇게 된다.

 

전처리기 -> 컴파일러 -> 어셈블러 -> 링커 -> 로더 -> 실행

 

각각의 단계에 대해서 공부해보자.

 

전처리기

- 보통 #으로 시작하는 구문을 처리하는 것이 전처리기이다.

ex) #define, #include, #ifdef ... 등등

즉, #define A 10 이런식으로 했으면, 코드 안에 있는 A를 10으로 바꿔주는 것이 전처리기의 역할이다. 

 

컴파일러

- 고수준의 언어를 저수준의 언어로 나타내는 역할을 하는 것이 컴파일러이다. 즉, 우리가 짜놓은 C/C++/C#코드를 로우레벨인 어셈블리어로 바꿔주는 역할을 한다고 보면 된다.

 

어셈블러

- 컴파일러에서 넘어온 어셈블리어를 완전한 기계어로 바꾸어 주는 역할을 한다. 이제 이 단계를 거친 언어를 우린 알아볼 수가 없다. 

 

링커

- 여러개의 오브젝트 파일을 하나로 합치거나, 라이브러리를 합칠 때 사용된다. 즉, 링커를 거치면 우리가 사용하는 exe파일이 완성된다고 보면 된다.

로더

- 로드 모듈을 통해 링커에서 만든 프로그램을 올려서 주기억장치에 적재하는 역할을 한다.

 

지금까지의 과정을 모두 거치는게 이제 C, C++, C#과 같은 언어들이고, 밑에서 얘기하는 애는 좀 특이한 녀석이다.

 

 

인터프리터

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

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

https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0

 

인터프리터 - 위키백과, 우리 모두의 백과사전

인터프리터(interpreter, 문화어: 해석기)는 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. 원시 코드를 기계어로 번역하는 컴파일러와 대비된다. 인터프리터

ko.wikipedia.org

- 인터프리터는 컴파일러와 달리, 전체적인 코드를 번역하지 않고, 문장단위로 번역한다. 그래서 한줄 한줄 실행해나가는 것을 볼 수 있고, 이 인터프리터의 대표적인 예가 Python, Ruby와 같은 스크립트언어이다.

반응형
LIST

'CS 기초' 카테고리의 다른 글

[운영체제] 메모리의 구조  (0) 2021.11.01
[Design Pattern] MVC Pattern  (0) 2021.09.28
[운영체제] 프로세스와 쓰레드  (0) 2021.09.13
[운영체제] CPU 스케줄러  (0) 2021.09.13