lex, yacc on Windows
2008/11/20 02:35개인적으로, 학교 과제로 C/C++ 코드를 작성할 때에, MinGW + UnxUtils 조합을 선호한다. 간단한 C/C++ 코딩은 Windows에서 gVim, ctags, grep, g++ 환경으로 한다. 특히, UnxUtils어에 포함된 grep, ls, rm, cp, cat, wget, cmp, diff, head, tail, wc 등의 명령어는 콘솔 창에서 없으면 정말 불편하다. 윈도우즈에도 제발 저것들을 기본으로 넣어줬으면 좋겠다.
Cygwin 환경이 좀 더 Unix틱하긴 하지만, Cygwin에서 컴파일한 바이너리는 cygwin1.dll을 필요로해서 싫어한다. Unix 환경 에뮬레이션이면서 실행파일에 .exe가 붙어있는 것도 싫다. 그건 뭐, Unix도 아니고, Windows도 아니잖여?
서론이 길었다. 학교에서 Lex와 Yacc를 사용하는 과제가 나왔는데, MinGW 환경에서 컴파일을 해보니, 자꾸만 링크 에러가 나는게 아닌가? 옛날옛날 한 옛날에 다섯 아이가 우주멀리 아주멀리 사라지던 쯤에, 윈도우즈에서 UnxUtils 안에 들어있는 flex.exe, bison.exe를 사용하는 방법을 본듯 하야, 구글신께 여쭈어보아, 아래 링크를 발견했다.
윈도우즈에서 flex & bison 개발환경 설정하는 방법
-> http://www.wearethebest.co.kr/zbxe/10804
결론부터 때리자면, UnxUtils의 usr/local/lib 폴더 안에 libfl.a와 libfl.lib 파일을 MinGW의 lib 폴더에 복사해줘야 한다는 것이다. 그리고나서, 컴파일 할 때에, -l 옵션에 fl을 주면 된다. 즉,
C:\> gcc –o test.exe lex.yy.c -lfl
그리고, 까다로운 조건이 하나 있는데, bison을 실행하는 드라이브의 상위의 \usr\local\share\ 폴더에 bison.hairy와 bison.simple 파일이 있어야 한다. UnxUtils가 C드라이브에 깔려있는데, bison을 D드라이브에서 실행하면, 못 찾는다; D\usr\local\share\ 폴더에도 저 두개의 파일을 복사해줘야 한다. C드라이브에서 실행하면, C\usr\local\share\ 폴더에.
글 제목은 lex, yacc라고 해놓고, flex, bison 얘기밖에 안하느냐?라고 물으면 OTL이다. flex와 bison은 GNU에서 만든, lex, yacc와 같은 기능을 하는, 리눅스에서 가장 널리 쓰이는 프로그램이다. 참고로, flex는 Fast LEX의 약자이다.

