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