본문 바로가기
프로그래밍/툴

lex 와 yacc 간단 짤막 요약~

by 써드아이 2010. 10. 28.

 [참고글]
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