나는 왜 컴파일러를 배우게 됐는가

얼마 전 올렸던 회고록에서 KICEditor를 언급했다. 그 회고를 보고 한 스타트업 대표님이 연락을 주셨고, 얘기해보면서 이 프로젝트를 다시 되살려봐야겠다는 생각이 들었다.

기존에 프로그램을 작성했던 방식은 이미 존재하는 마크다운 문법에 scss 스타일을 얹어서 몇 가지 특별한 문법을 추가한 것처럼 보이게 했던 일종의 눈속임이였다.

제대로 만들어보려면 더이상 눈속임이 아닌 완전히 새로운 문법과 편집기를 구현해 봐야겠다는 생각이 들었고, 일단 다른 텍스트 편집기들을 레퍼런스 삼아 개발해보려고 quill.js를 찾아보게 됐다. (회사 옆자리 동료가 quill.js를 추천해줬다.)

quill.js는 자신들의 데이터를 수정 및 관리하기 위해 delta라는 자체 라이브러리를 사용하고 있었고, delta는 데이터를 AST로 분리하여 저장하고 있었다. AST (Abstract Syntax Tree)에 대해 어렴풋이 알고 있었지만 정확히 어떻게 구현하는 지는 전혀 모르고 있었기 때문에 알아보기로 했다.

AST를 배우기 위해서는 프로그래밍 언어에 대한 이해가 필요해 보였다. 그래서 관련 정보를 찾아보다가, 컴파일러를 구현하는 수업의 과정에 AST의 개념적 이해와 구현을 다루고 있음을 확인했다.

그렇게 찾은 강의가 Edx에 올라와 있는 stanford의 CS143: Compilers였고, 수강을 시작했다.

현재 3주차 강의까지 수강한 상태인데, 어휘 분석, 정규표현식, 유한 오토마타, Context Free Grammar, AST, 재귀적 하강 파싱 등 전에는 배운 적 없던 새로운 개념들을 파도가 밀려오듯 접하는 즐거움을 느끼고 있다.

무언가를 배우기에 가장 최고의 방법은 직접 응용해서 다른 프로젝트를 해보는 것이기에, 얼마전 올렸던 “제대로 된 계산기 만들기”에 지금 배우고 있는 컴파일러 이론들을 녹여내서 진행해보고자 한다.

오랜만에 새로운 것을 배우게 되어 즐거운 요즘이다.

Subscribe to jiwon.me

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe