본문 바로가기

전자공학

컴파일러(compiler)

728x90
반응형

요약

 

프로그래밍 언어들을 다른 하위 언어로 변환시키는 것










 정의상 가정

 어셈블리어(assembly language)

 내용상 가정

 

 공식

 언어들을 다른언어로 변환시키는 것

 단위

 

 응용

 


파란 박스의 글자를 클릭하시면 가정과 응용으로 넘어 가실 수 있습니다!!




기계에 복잡한 명령을 하고 싶어 bit를 만들어 0과 1의 조합으로 명령을 내릴수 있는 기계어를 만들었고

인간이 이해할수 있는 명령을 주고싶어 어셈블리어라는 언어를 만들었습니다.

어셈블리어는 기계어랑 1:1로 매치되어 변환이라고 보기도 미안한 변환을 하게됩니다.(이 변환하는 것을 어셈블러라 합니다.)


그러나 어셈블리어는 기계어랑 1:1로 매치가 되어야하므로 굉장히 기계적 사고방식으로 진행됩니다.

즉 기계가 진행되는 순서나 각 소자에 저장되는 정보를 따라가야 합니다.

1:1이라 한 줄에() 제한된 기능밖에 할 수 없어 다양한 기능은 여러 코드로 일일히 작성해야합니다.


따라서 더 직관적이고, 다양한 기능들 쉽게 명령하기 위해 새로운 언어들을 만들었습니다.

이것이 고수준 언어(high level language)라 부르고 우리가 익히 알고있는 C언어, java, python 등 모두 여기에 포함됩니다.


이러한 상위언어들도 결국엔 어셈블리어로 변환되고 기계어로 변환되어야 기계에 명령이 가능하겠죠??

따라서 상위언어들을 어셈블리어로 변환시키는 것이 

바로

컴파일러 라고합니다.(인터프리터는 응용에서 하겠습니다.)





사실 이것은 좁은의미의 컴파일러인데 좀더 넓은 의미는 "어떤 프로그래밍 언어"를 "다른 프로그램 언어"로 옮기는 것입니다.

이때 "어떤 프로그래밍 언어"를 원시 코드(소스코드)라 하고 "다른 프로그램 언어"를 목적 코드입니다.


따라서 어셈블리어의 과정까지 모두 컴파일러라는 개념으로 포함될 수 있습니다.



여기서 중요한 점이 있습니다. 

앞서 어셈블리어는 기계마다 약속이 다르다고했습니다.

이때 컴파일러가 어셈블리어의 개념까지 포함해 버렸으니

원래 기계마다 다른 어셈블리어를 써야하는것을

이제 기계마다 다른 컴파일러를 써야합니다.


C/C++언어와 같은 고급언어는 컴파일러로 직접 기계어로 변환됩니다.

따라서 기계별로 다른 컴파일러가 필요합니다.


자바 같은경우에는 컴파일러가 bit(바이트 코드)로 변환합니다.

따라서 기계별로 컴파일을 따로 할 필요가 없고

기계에서 바이트 코드를 다른 프로그램으로 해석해서 사용합니다.

따라서 C/C++보다 느립니다.


컴파일러의 작동원리 컴파일은 응용에서 다루겠습니다(추후추가)

반응형

'전자공학' 카테고리의 다른 글

구조제어구문(if문, while문, for문, if-else문, goto문)  (2) 2017.02.25
고급 언어 (high-level language)  (0) 2017.02.23
어셈블리어(assembly language)  (0) 2017.02.18
기계어(machine language)  (2) 2017.02.07
bit  (0) 2017.02.05