컴파일러_Compiler

[Compiler] 컴파일러 시작

vhxpffltm 2019. 6. 3. 23:23
반응형

컴파일러란 어떤 특정 목적에 의해서 만든 코드를 컴퓨터가 인식할 수 있도록 컴퓨터 언어로 번역해 주는 것이다.

 

컴파일러 : 고급언어로 작성된 원시프로그램을 기계어로된 목적 프로그램을 출력하기 위한 번역

좀 더 설명을 하자면 컴파일이란 의미가 고급 프로그래밍언어에 쓰여진 프로그램으로 소스코드에서의 오브젝트로 변환 되는것이라고 정의한다.

 

오브젝트코드는 컴파일러에 의해 생성된 코드를 의미한다. 

소스코드는 개발자가 사용하는 언어에 따른 명령어들의 조합 -> C/C++, Java 등

명령어 실행을 위해서 기계어로 저레벨 언어로 쓰여져여 하드웨어에서 제어가 가능하다.

 

고레벨언어란 개발자가 사용하는 C,C++ 등의 언어라고 생각하면 되고 저레벨 언어란 기계어 또는 어셈블리어를 의미한다. 

 

다음은 컴파일의 과정이다.

 

원시 프로그램 -> 전처리기 -> 컴파일러 -> (어셈블러) -> 링커/로더

 

Visual Studio 에서 C/C++ 언어를 작성한 후 컴파일 및 실행을 하면,

프로그래머가 코드를 작성한 원시 프로그램이 만들어진다. C/C++을 예로들어 이것을 컴파일하면

전처리단계에서 '#' 으로 시작되는 명령어들이 먼저 수행된다. 이후 컴파일단계를 거치면서 문법과 표준에 맞는지 확인한다. 이 과정을 거치면 '.obj'라는 파일이 생성된다.

이 후, 링크를 통해 '.obj'파일과 소스코드에서 사용되는 함수들이 들어있는 '.lib' 파일을 이용하여 실행 가능한 파일을 만들게 된다. 이 과정을 거쳐 '.exe' 라는 실행파일을 만들게 된다.

'.obj' 가 오브젝트 파일(목적 코드, 목적 파일)이며 컴파일러나 어셈블러가 소스코드 파일을 처리하는 도중 만들어내는 코드의 대표이다. 이 파일은 '이진 파일'이라는 코드를 포함한다. 그리고 링커가 목적 파일을 함께 묶어 실행파일이나 라이브러리를 만들어 낸다.

그리고 asm 파일은 어셈블리언어고 이것은 기계어의 2진 코드를 영문으로 알아보기 쉽게 고쳐놓은 것이다. 이것을 중간파일 이라고도 한다. 이는 인터프리터에서 확인 가능하다.

 

한번 visual studio 프로젝트 폴더에 들어가서 위의 확장자를 가진 파일들을 보며 이해할 수 있을것이다.

 

이와 함께, 컴파일과 인터프리터의 차이에 대해 많이 질문이 나올 수 있다. 여기서는 컴파일만을 알아본다.

 

이제 위의 컴파일과정에서 컴파일러가 어떠한 단계로 목적 프로그램을 만드는지 알아볼 것이다. 컴파일러의 단계는 아래와 같다.

 

*컴파일러 단계

어휘분석(스캐닝) -> 구문분석(파싱) -> 의미분석(타입검사) -> 중간코드생성기 -> 최적화 -> 코드생성 -> 종속코드 최적화
                       

반응형