안녕하세요? 홍환민입니다.

요즘 컴파일러 혹은 간단한 파서라도 만들어 볼 만한 실력을 키우기 위해서
항상 말로만 듣던 렉스(lex) & 야크(yacc)를 공부하기 시작했습니다.

그런데 이외로 자료가 너무 없더군요.
흔한 개발환경 설정법도 없더라고요... 내용도 각기 다르고...
리눅스를 기본으로 해서 설명하기도 하고... (물론 리눅스용 프로그램이기 때문에 당연하기도 하겠지만...)

그래서 윈도우즈에서 렉스 & 야크를 설정하는 법을 설명하기로 하겠습니다.
정확히 말하자면 flex & bison을 설정하는 방법에 대한 내용입니다.

flex는 lex의 리눅스 GNU 버전의 프로그램입니다.
bison은 yacc의 리눅스 GNU 버전의 프로그램입니다.
단순한 GNU 버전인 것만은 아니고, 많은 부분이 개선된 프로그램이라고 합니다.
(상용에 비견할 만하다고도 하더군요. 대다수가 사용하는 것이 flex & bison일 겁니다.)

둘다 윈도우즈용으로도 나와 있습니다.

자, 차례차례 캡처화면을 첨부해서 설명해 가도록 하겠습니다.
(제가 까먹지 않기 위해서 정리하는 의미도 있습니다 ^^)


1. MinGW 설치 (윈도우즈에 리눅스 개발환경 설정하기)

리눅스에서 사용하는 컴파일러인 gcc 등을 사용하기 위한 환경을 설정하려면,
MinGW를 설치하셔야 합니다.
(참고로 MinGW는 "Minimalist GNU for Windows"의 약자입니다.)

MinGW 홈페이지에 접속합니다.
http://www.mingw.org/

1.jpg


왼쪽 메뉴에서 "Download"를 선택합니다.


2.jpg

Contents 라고 표시되어 있는 부분에서 "Downloads"를 선택합니다.

그러면, 화면이 이동하는데, "Sourceforge File Release"를 선택합니다.
그러면 소스포지로 이동합니다.


3.jpg

위와 같은 화면에서, "Automated MinGW Installer" 부분의 "Download"를 선택합니다.
("Automated MinGW Installer"는 자동으로 설치본들을 다운로드 받고, 인스톨할 수 있게 하는 프로그램입니다.)

이동된 화면에서 "MinGW-5.1.3.exe"을 선택하여 다운로드 받으시면 됩니다.

다운로드받은 "MinGW-5.1.3.exe"을 실행하여, 설치를 시작합니다.


4.jpg

5.jpg

위 화면에서, "Download and install"을 선택합니다.
MinGW를 구성하는 각각의 프로그램의 압축파일들을 다운로드 받아서, 자동으로 설치해 주기 위함입니다.


6.jpg

"I Agree"를 클릭하여 라이센스에 동의합니다.


7.jpg

어떤 버전의 MinGW 패키지를 설치할 것인지를 물어봅니다.
"Current"를 선택하여, 현재 버전을 설치합니다.


8.jpg

설치할 패키지들을 선택하는 화면입니다.
기본적으로 "MinGW base tools"가 선택되어 있습니다.

원하시는대로 선택하시면 되겠습니다.
기본적으로 flex & bison만 사용하실 거면, "MinGW base tools"만 설치하셔도 무방합니다.

저는 만약을 위해서 "g++ compiler"와 "MinGW Make"도 선택하였습니다.


9.jpg

설치할 경로를 선택합니다.
저는 기본 경로인 "C:\MinGW"를 선택하겠습니다.


10.jpg

시작 메뉴 폴더를 지정합니다.

11.jpg

그러면, 위의 화면과 같이, MinGW를 구성하는 각 패키지들을 다운로드하기 시작합니다.
다운로드가 완료되면, 각각의 패키지를 설치하는 작업이 진행됩니다.

좀 시간이 걸리니 느긋하게 기다려 주십시요. ^^


12.jpg

위와 같이 설치가 완료되었습니다.
"Next"를 클릭합니다.


13.jpg

설치가 완료되었습니다. 축하드립니다. ^^


14.jpg

그러면 위와 같이 "C:\MinGW"에 MinGW가 설치됩니다.


2. UnxUtils (GNU utilities for Win32) 설치하기

"UnxUtils (GNU utilities for Win32)" 홈페이지에 접속합니다.
http://unxutils.sourceforge.net/

15.jpg

위와 같이 홈페이지에 접속되면, "Source code:" 부분의 "http://unxutils.sourceforge.net" 부분을 클릭합니다.
역시나 소스포지로 이동하는데, "UnxUtils.zip" 파일을 다운로드합니다.

UnxUtils.zip 파일의 압축을 풉니다. 다음과 같은 파일들이 나옵니다.

16.jpg

"\usr\local\wbin" 폴더에 보시면 다양한 리눅스용 프로그램의 exe 파일들이 들어 있습니다.
리눅스용 dir 프로그램인 "ls.exe" 등도 보입니다.

결정적으로! "flex.exe"와 "bison.exe" 파일도 들어있습니다.
flex와 bison을 사용하기 위해서 이 파일들이 필요한 것입니다.

"\usr\local\wbin" 폴더의 모든 파일을 MinGW의 "bin" 폴더로 복사해 줍니다. (C:\MinGW\bin)

또한, 컴파일 시에 사용할 flex용 라이브러리 파일을 복사해야 합니다.

20.jpg

위의 그림과 같이 "\usr\local\lib" 폴더 내의 파일들을 MinGW의 "lib" 폴더에 복사합니다. (C:\MinGW\lib)

이제 파일들은 다 갖추어졌고, 편한 사용을 위해서 "C:\MinGW\bin" 폴더를 패스로 잡아주겠습니다.


3. "C:\MinGW\bin" 폴더의 패스를 잡아주기

"시작메뉴 - 제어판 - 시스템" 창을 띄웁니다.
"고급" 탭의 "환경 변수"를 클릭합니다.

17.jpg

18.jpg

19.jpg

위의 그림과 같이 PATH 환경 변수에 "C:\MinGW\bin" 폴더를 추가합니다.
이제는 패스가 잡혔으므로, 도스창의 아무 폴더에서나 C:\MinGW\bin 폴더내의 실행파일들을 실행할 수 있습니다.


4. 잘 되나 확인해 보기

다음과 같이 간단한 테스트용 lex 소스를 작성하고, "test.l" 파일로 저장합니다.

21.jpg


자, 일단 lex 프로그램을 이용하여, c 소스 파일로 변환해 보도록 하겠습니다.

다음과 같은 명령으로 가능합니다.

flex test.l

22.jpg


그러면 다음과 같이 "lex.yy.c" 라는 c 소스 파일이 생성됩니다.

23.jpg


이제 gcc를 이용하여 해당 소스를 컴파일 해주시면 됩니다.

다음과 같은 명령으로 가능합니다.

gcc lex.yy.c -o test -lfl

-lfl 옵션을 이용하여 fl 이라는 flex용 라이브러리를 링크해 주었습니다.
(이거 알아내는데 힘들었습니다. ^^)

24.jpg


이제 "test.exe" 파일이 생성되었습니다! 짜잔~!

아래는 테스트해본 화면입니다.

25.jpg

동작원리는 다음과 같습니다.

inc나 INC가 입력되면 "counter is increased -> %d\n" 식으로 출력이 되고,
dec나 DEC가 입력되면 "counter is decreased -> %d\n" 식으로 출력됩니다.

나머지 다른 문자들이 입력되면, 그대로 출력해줍니다.  (ECHO)

자.... 휴........... 긴 설명이 끝났습니다.
평안하시기 바라겠습니다.

행복한 하루 되십시오.