flex & bison with C++ (win32).
http://research.engineering.wustl.edu/~beardj/FlexBisonC++.html ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
2013.06.02์ผ ๊ธฐ์ค์ผ๋ก,
win32 ํ๊ฒฝ์์ ์ธ ์ ์๋ flex๋ gnuwin32์ 2.5.4 (๋ฌด๋ ค 2004๋
๋ฆด๋ฆฌ์ฆ์
๋๋ค)
http://gnuwin32.sourceforge.net/packages/flex.htm
bison๋ gnuwin32์ 2.4.1 (2009๋ ๋ฆด๋ฆฌ์ฆ) http://gnuwin32.sourceforge.net/packages/bison.htm
flex์ bison์ ๊ธฐ๋ณธ์ ์ผ๋ก๋ C์ธ์ด๋ก ๋ ํ์ผ์ ์์ฑํด๋
๋๋ค.
์ต์
์ ์ํด C++๋ก ๋ฉํ๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ป์ ์ ์์ง๋ง, ๋ค์ ๋ณต์กํฉ๋๋ค.
flex 2.5.4์์ ๋ง๋ค์ด๋ด๋ C++ ๊ท๊ฒฉ์ <iostream.h>๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
<iostream>๊ณผ ๋ฏธ๋ฌํ๊ฒ ๋ค๋ฅผ ๋ฟ๋๋ฌ, ์ด ํค๋ ์์ฆ ์ปดํ์ผ๋ฌ์๋ ์ ๋ค์ด์์ต๋๋ค.
bison์ ๊ฒฝ์ฐ๋ ๋ณ ๋ฌธ์ ์์ด C++๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ง๋ง, flex 2.5.4์ ์๋ yylex์ ๊ท๊ฒฉ์ด ์ ๋ง์ต๋๋ค.
์ฌ๊ธฐ์ ๋ค๋ฅธ ์์ธ ๊ตฌํ์ฌํญ๋ค์ C++๋ก ๋ง๋ค์ด์ ์น๊ณ ์ถ๋ค๋ฉด
๊ฐ์ฅ ๋จผ์ ์๊ฐํ ์ ์๋๊ฒ์ extern "C"๋ฅผ ๋ช
์ํด์ฃผ๊ณ C ํจ์๋ค์ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ ๊ฒ์
๋๋ค.
๋ฌธ์ ๋ C ์ชฝ์์ C++๋ก ์์ฑ๋ ํจ์๋ ํด๋์ค๋ฅผ ์ ๊ทผํ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ ์
๋๋ค.
๊ฒฐ๊ตญ ๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ์ด๋ฅผ ํด๊ฒฐ ํ ์ ์๋ ๋ฐฉ๋ฒ์, ๊ทธ๋ฅ ํ์ผ ์ด๋ฆ์ ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์
๋๋ค.
flex์ lํ์ผ์๋ "%option outfile=ํ์ผ๋ช
.yy.cpp"๊ณผ ๊ฐ์ ์ต์
์ผ๋ก ํ์ผ ํ์ฅ์๋ฅผ cpp๋ก ๊ณ ์ ํฉ๋๋ค.
bison์๋ "bison ํ์ผ๋ช
.y -d -o ํ์ผ๋ช
.tab.cpp"์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํธ์ถํ์ฌ ํ์ฅ์๋ฅผ cpp๋ก ๊ณ ์ ํฉ๋๋ค.
- ํค๋ํ์ผ์ ์๋์ผ๋ก hppํ์ฅ์๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค
๊ฐ๋จํ batch ํ์ผ์ ๋ง๋ค์ด ๋น๋ ์ ์ด๋ฒคํธ๋ก ์ฌ๋ ค๋๋๋ค๋ฉด ๋ ํธ๋ฆฌํ๊ฒ ์ง์.
flex -L ํ์ผ๋ช
.l
bison ํ์ผ๋ช
.y -d -o ํ์ผ๋ช
.tab.cpp