머리말
이 프로젝트는 책 '컴파일러 만들기, 컴퓨터 프로그램의 구조와 원리 ' 를 읽고 참고하여 만들었습니다. 해당 책에서는 C++ 언어를 사용해 저자가 만든 YuLang(유랭) 이라는 프로그래밍 언어를 컴파일하는 컴파일러와 인터프리터를 만듭니다.
하지만 그대로 따라 만들면 공부가 안되기에, 저는 약간 변형해 저만의 프로그래밍 언어를 정의하고 그를 컴파일해서 실행까지 시키는 인터프리터와 컴파일러, 그리고 컴파일된 코드를 실행시키는 가상머신까지 만들어 보겠습니다.
아래는 책 구매 링크입니다.
https://www.yes24.com/Product/Goods/103153057
컴파일러란 무엇인가?
컴파일러란 소스코드를 실행가능한 파일로 만들어주는 프로그램을 말합니다. 좁은 의미로는 소스코드를 중간코드로 바꿔주는 프로그램입니다. 대충 소스코드를 실행파일로 만드는 과정을 통틀어 컴파일러라고 말하기도 하는 듯 합니다.
컴파일 과정
컴파일 과정은 언어마다, 환경마다 조금 차이가 있을 수 있습니다.
이 책에서 만드는 컴파일러의 컴파일 과정은 제가 학교에서 배운 C 프로그램의 컴파일 과정보다 매우 간단합니다.
제가 아는 C 프로그램의 컴파일은 컴파일 과정 중 어셈블리어 파일도 생겨나고, 이를 오브젝트 파일로 바꾸고, 다른 라이브러리 등과 링킹하는 과정도 필요하고, 각종 최적화도 해주고 등등 훨씬 더 복잡합니다. 이 복잡한 과정을 모두 구현해보면서 공부하면 더 좋겠지만, 책에서는 실제 컴파일러의 자세한 동작, 최적화 기법같은 세세한 것들은 제쳐두고, 기본적인 컴파일러의 동작 원리를 깨우치는 정도로 학습할 수 있을 것 같습니다.
책에서 소개하는 컴파일 과정은 대강 아래와 같습니다. 어셈블리어 대신 자신만의 가상머신을 만들고 그 가상머신이 알아들을 수 있는 중간코드를 생성합니다.
- 소스코드 존재 : 먼저 작성된 소스코드가 있어야 합니다.
- 소스코드 컴파일 : 소스코드를 컴파일하여 중간코드를 만듭니다.
- 어휘 분석 : 소스코드의 모든 글자들을 분석해 토큰 리스트로 만듭니다.
- 구문 분석 : 토큰 리스트를 가공해 구문 트리로 만듭니다.
- 코드 생성 : 구문 트리를 가공해 중간 코드로 만듭니다.
- 가상머신 실행 : 가상머신으로 중간코드를 실행가능한 실행파일로 만듭니다.
사실 책에서는 컴파일러보다 인터프리터를 먼저 구현해봅니다. 인터프리터란 위의 컴파일 과정에서 3번 과정이 없고, 구문 분석 후 생겨난 구문 트리를 바로 실행하는 프로그램입니다. 과정도 더 적고 구현도 컴파일러보다는 만들기 쉽습니다. 저도 인터프리터를 먼저 만들어볼 것입니다.
다음 글에서는 제가 만들고싶은 언어의 문법을 정리해보겠습니다.
'프로젝트 > 컴파일러 만들기' 카테고리의 다른 글
Scanner (0) | 2024.04.13 |
---|---|
프로그래밍 언어 문법 (0) | 2024.03.29 |