[참고글]
http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/lex_yacc_howto
lex는 "어휘 분석과 scanner를 위한 c 코드를 생성한다." 고 되어있고
yacc는 "구문 분석과 파서를 위한 c 코드를 생성한다." 라고 되어있다.
lex - 입력된 문자에서 매칭되는 문자열의 패턴을 이용해서
문자열을 토큰으로 변환한다. (패턴매칭 규칙)
yacc - lex로부터 토큰을 받아들이고 문법룰에 넣고 돌려서
구문트리를 생성한후 코드를 생성한다. (문법규칙)
lex 파일 형태
///////////////////////////////////////
%{
C의 global 선언
%}
lex의 선언
%%
lex 규칙 (패턴매칭 규칭)
%%
c 루틴
///////////////////////////////////////
yacc 파일 형태
///////////////////////////////////////
%{
매크로 변수 혹은 헤더 파일 선언
%}
토큰 정의 (lex에서 반환되는 모든 token을 포함해야함)
%%
문법 규칙
%%
c 루틴
///////////////////////////////////////
yacc에서 lex가 생성한 token을 사용하게 되는데 방법은
lex 파일에서 패턴이 매칭되었을 때 이를 리턴 시키면된다.
{pattern} { return PATTERN_NAME; }
와 같이 규칙을 만들어 주고
yacc 파일에서
%token PATTERN_NAME
와 같이 토큰을 정의해주면 된다.
[또 다른 참고글]
http://www.ibm.com/developerworks/kr/library/l-lex.html
끝~
lex는 기본적으로 출력 파일명을 lex.yy.c로 만든고
yacc는 y.tab.c로 출력 파일을 만든다.
bison의 경우는 소스파일명.tab.c로 만든다.
flex에서 -t 옵션으로 출력을 stdout으로 지정 가능하다.
(리다이렉션을 통한 출력 파일명 변경)
yacc/bison 에서 -d 옵션을 주면 *.h 를 생성한다.
'프로그래밍 > 툴' 카테고리의 다른 글
Windows 7 에서 user32.dll, kernel32.dll, gdi32.dll 의 위치 (0) | 2013.05.21 |
---|---|
[wxWidgets] 설치 with mingw32-gcc (0) | 2011.12.17 |
lex 프로그램의 입력 문제 (0) | 2010.11.05 |
소스코드 html로 꾸미기 (0) | 2010.09.27 |
gdb 사용 tip (0) | 2009.06.24 |