Projects/Crafting a Compiler

[컴파일러 만들기] 1. 시작 | 프로그래밍 언어와 컴파일러

brong 2023. 8. 29. 00:02
728x90

'컴파일러 만들기' 책을 참고하여 진행하는 프로젝트. 

 

 

1. 프로그래밍 언어


고급 언어 

: 사람을 위한 언어로 이해하기 쉽다. (C, C++ 등)

저급 언어 

: 컴퓨터를 위한 언어로 컴퓨터가 이해하고 실행할 수 있는 언어이다.  (어셈블리 코드, object 코드, 기계어)

 

-> 고급 언어로 작성한 코드를 컴퓨터에서 실행시키기 위해서는 저급 언어로 바꾸는 과정이 필요하다. 

 

고급 언어를 저급 언어로 변환하는 방식에 따라 컴파일 방식과 인터프리트 방식으로 나뉜다. 

또 프로그래밍 언어는 변환 방식에 따라 컴파일 언어인터프리터 언어로 나뉜다. 

 

컴파일 언어

컴파일 언어로 작성된 소스 코드 전체가 저급 언어로 변환(컴파일) 되어 실행되는고급 언어이다. 

 

 

인터프리터 언어

인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어이다.

 

but, 요즘에는 점차 컴파일러와 인터프리터 사이의 구분은 사라져가는 추세이다! 

 

+ 이 책에서 사용하는 언어는 저자분이 만든 유랭이라는 언어다. 학습용으로 간단하고 필수 기능만 가지고 있다.

 

2. 컴파일러


컴파일

: 컴파일 언어로 작성된 소스 코드 전체가 저급 언어로 변환되는 과정.

 

이 과정을 수행하는 프로그램을 컴파일러라 한다. 

 

컴파일러는 특정 언어로 쓰인 코드를 입력받아 다른 언어로 번역한 코드를 출력하는 컴퓨터 프로그램이다. (언어 번역기다.) 

컴파일러는 (고급 언어로 작성된) 소스 코드를 입력 받아 (저급 언어로 작성된) 목적 코드를 출력한다. 

 

 

 

컴파일러는 문법적 오류, 실행 가능 여부, 불필요한 코드의 존재 등을 따지며 소스 코드 전체를 저급 언어로 컴파일 한다. 만약 오류가 하나라도 있으면 컴파일에 실패한다. 

 

 

 

컴파일의 단계

1. 어휘 분석

2. 구문 분석

3. 코드 생성

-> 목적 코드 출력 

 

컴파일의 단계는 이와 같고, 앞으로 차례대로 학습해서 컴파일러를 만들 예정이다. 

 

 


인터프리터

소스 코드를 한 줄씩 저급 언어로 변환하여 실행 결과를 출력하는 프로그램이다. 

(컴파일러는 목적 코드를 출력하지만, 인터프리터는 실행 결과를 출력한다!)

 

 

인터프리터의 단계

1. 어휘 분석

2. 구문 분석

3. 인터프리터

-> 실행 결과 출력

 

컴파일의 단계와 거의 유사하다. 그러나 출력하는 내용은 다르다! 

 

 

 

이 프로젝트에서는 유랭이라는 언어를 컴파일도 하고 인터프리트도 해볼 것이다.


또한 컴파일러가 출력한 목적 코드를 실행하는 가상 머신이 필요하다. 이것도 뒤에서 만든다.