Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

컴파일러

컴파일러(compiler)는 프로그래머가 작성한 컴퓨터 프로그램 "소스코드"를 Assembly(:12)나 기계어(:12)와 같은 다른 프로그램 언어로 변환시켜주는 일을 하는 프로그램이다. 변환결과로 생성되는 코드를 "Target language 혹은 Taget Code" 라고 하는데, binary 코드인 경우가 많다. 이 binary 코드를 "Object Code" 라고 한다.

일반적으로 컴파일러는 "고급 언어"로 된 코드를 Aseembly 와 같은 저급언어 혹은 기계어로 변환하는 것을 말한다. 이러한 번역과정을 compile 이라고 한다. 반대의 과정 즉, Assenbly 나 기계어를 고급언어로 변환하는 것은 decompile 이라고 한다.

컴파일 과정

http://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Compiler.svg/500px-Compiler.svg.png
  1. 소스코드작성
  2. 어휘 분석
  3. 구문, 분법 분석
  4. 중간코드 생성
  5. 중간코드 최적화
  6. Target Code 생성

C 언어 컴파일 과정

  1. 소스 코드 생성
인간이 이해할 수 있는 언어로 프로그램을 작성한다. 이것을 소스코드라고 하는데, 여기에는 컴퓨터에게 내릴 명령들이 포함되어 있다. 소스코드는 인간이 쉽게 이해할 수 있지만, 컴퓨터는 이해할 수 없기 때문에 컴퓨터가 이해할 수 있도록 번역하는 과정이 필요하다.
  1. Pre processor
컴파일러를 실행시키면 가장 먼저 pre compile를 수행한다. 프로그래머가 생성한 소스코드는 인간이 보다 쉽게 읽을 수 있도록 하기 위해서 include나 매크로등을 이용해서 코드가 축약되어 있다. pre compile는 축약된 내용을 컴파일러가 쉽게 해석할 수 있도록 풀어쓰는 과정이다.
  1. Assembly 코드의 생성
이제 풀어쓴 코드를 가장 원시적인 언어의 형태인 Assembly코드로 만들어준다. 어셈블리코드는 기계어와 1:1로 대응되기 때문에 일단 어셈블리코드로 성공적으로 만들어낸다면 쉽게 기계어형태로 변환할 수 있다.
  1. Object 파일의 생성
Assembly 코드가 만들어졌다면, 이제 이걸 기계어로 변환한다. 이렇게 해서 만들어진 파일을 object파일이라고 한다.
  1. linker
그러나 object파일이 생겼다고 바로 실행될 수 있는게 아니다. 프로그램으로써 실행하기 위해서는 운영체제가 제공하는 다른 여러가지 객체(기능)들과 연결(link)되어야 한다. link과정을 거치면 비로서 실행가능한 완전한 프로그램이 만들어지게 된다.

참고문서