lex와 yacc은 유닉스 시스템 프로그래밍을 할 때나 새로운 언어를 만들어볼 시험 도구로 적당한 툴들입니다. 이를 한 번이라도 사용해 본 프로그래머라면, 그 필요성을 동감하고 계실 겁니다. 오픈 소스 프로젝트로 lex와 yacc을 대신하는 flex와 bison이 있는데, 오픈 소스인 만큼 pdf로 된 공개된 다큐멘트도 웹에서 구할 수 있습니다. 약간의 문법이 다르긴 하지만, 개념적인 면이나 활용하는 면에서는 거의 마찬가지이므로, 이를 사용하는 것도 많은 도움이 될 것으로 생각됩니다. lex & yacc을 먼저 공부하고, flex & bison을 익혀나가는 것이 개인적으로 좋다고 생각합니다. 책 내용은 설명을 잘 해 놓은 편이지만, 예제나 설명 부분이 아쉬움으로 남습니다.
lex와 yacc란 단어를 처음으로 들어본 것이 언제인지 기억은 나지 않지만 유닉스에서 사용하는 신기하고도 어려운 물건(?) 쯤으로 생각했던 기억이 있다. 그런데 마침 렉스와 야크에 관한 책이... 그것도 한글로 나왔기에(^^;) 그 동안 쌓아왔던 궁금함을 한번 풀어보고 싶은 마음에 이 책을 보게되었다. 만약 필자와 비슷한 생각을 가지고 있었던 독자라면 처음 몇 장만 읽어보아도 렉스와 야크가 어떤 신기한 일(?)을 하는지 그 궁금함을 해결할 수 있을 것이다. 이 책 내용을 간단히 살펴보자면,
처음 1장에서 3장까지는 렉스와 야크에서 사용되는 용어들을 설명하면서 렉스와 야크의 간단한 사용법과 서로 어떻게 맞물려 돌아가는지 알아볼 수 있는 간단한 예제들을 가지고 설명하고 있다.
4, 5장을 통해 좀더 큰 예제인 메뉴 생성기와 SQL 파서를 처음부터 끝까지 차근차근 만들어보면서 렉스와 야크를 좀 더 유용하고 잘 사용할 수 있는 방법을 배울 수 있다.
6, 7장은 렉스 명세서의 형식과 야크 문법의 구조에 대해 논의하고, 각각에서 사용할 수 있는 특징과 옵션, 그리고 기능에 대해 살펴볼 수 있는 레퍼런스이다.
8, 9장은 야크 문법에 존재하는 충돌(에러)을 찾아 수정하는 방법을 살펴보고, 파서와 어휘 분석기가 에러를 검출하는 방법에 대해서 알아본다.
처음 몇 장을 읽어나가면서 중간에 나오는 예제에 모르는 부분이 간혹 있었는데, 혹시나 주위가 산만한 필자(-.-;)가 앞에서 못보고 지나친 내용이 있었나 열심히 앞부분을 찾아보았다. 하지만, 앞부분 어디에도 그런 내용이 없었고, 그 예제의 뒤에 나오는 내용에서 그 부분을 설명하고 있었다. 처음 몇 장에서 혹 예제에 모르는 부분이 나오더라도 너무 긴장하지 말고, 그 부분을 눈여겨 봐두고 앞으로 계속 전진하기 바란다. ^^a
필자는 리눅스 상에서 gcc를 직접 소스를 다운받아 컴파일(물론 gcc로)해서 사용해본 경험이 있는데 그 때, "닭이 먼저냐? 달걀이 먼저냐?"하는 식의 다음과 같은 의문이 들었다. "흠... 컴파일러가 컴파일러를 만들다니... 음... 그렇다면, 가장 맨 처음에는 컴파일러를 어떻게 만들었을까?"하는 해결할 수 없을 것(?)만 같은 생각이었다.(대부분 이런 비슷한 생각을 해 보았을 것이다.) 하지만, 이 책을 읽고 나서 완전하진 않지만 그 의문에 대한 해결의 실마리를 잡을 수가 있었다.
컴파일러에 대해서 좀 더 알고 싶다거나, 자신만의 컴파일러를 만들어 보고 싶은 독자들은 꼭 한 번 읽어봐도 괜찮을 책이라는 생각이 든다. 아마도, 컴파일러 공부를 시작하기 위한 좋은 출발점이 되어줄 것이다.