반응형
Lex는 Scanner를 그리고 Yacc는 Parser에 해당하는 부분을 담당한다. 위 그림은 Lex/Yacc를 이용한 Parser를 사용하는 방법을 이야기한다.
bas.y에 필요한 패턴(문법)을 기술하고 yacc를 이용해서 해당 패턴들에 대한 action을 구현한다. bas.y의 패턴에 해당하는 각각의 Token들은 bas.l에 정의를 하며 Regex의 Meta Chracter를 사용할 수 있다.
<Pattern Matching Primitives>
실제 컴파일 과정은 다음과 같다.
# create y.tab.h y.tab.c yacc -d bas.y # create lex.yy.c lex bas.l #compile & link gcc lex.yy.c y.tab.c -o bas
...
Continued!! ^^;;;
[Yacc의 yydebug 켜기]
1. yacc를 실행할때 -t flag를 주어서 debug관련 사항을 컴파일에 포함시킨다.
2. yyparse()를 호출하기 전에 적절한 곳에서 yydebug=1 로 설정해준다. (extern int yydebug;)
2. yyparse()를 호출하기 전에 적절한 곳에서 yydebug=1 로 설정해준다. (extern int yydebug;)
[Lex Scanner를 위한 토큰 정의시 주의사항]
다음과 같이 토큰을 정의 했다고 가정하자
%% NUMBER [-+0-9\.]+ STRING [a-zA-Z0-9]+ %%이러한 조건에서 STRING인 패턴에 "1234" 를 input으로 준다면 스캐너는 NUMBER로 인식하고 Syntax Error를 Return한다.
반응형
'IT Tech > Programming' 카테고리의 다른 글
[C언어] simple hash table - test code (0) | 2012.11.13 |
---|---|
[SVN] ## 유용한 SVN 부가 명령어들 ## (0) | 2012.09.05 |
[C언어] c/c++ gcc 디버깅을 위한 gdb 초간단 사용팁 (0) | 2012.03.10 |
[C언어] Fast Integer ID Pool 관리 - 할당/반환 함수 (0) | 2011.12.19 |
[C언어] uint2bin (0) | 2011.09.07 |
[C언어] IP 관련 매크로(Macro) (0) | 2011.04.14 |
[regex] 정규표현식 테스트 프로그램 - The Regex Coach (0) | 2011.04.13 |
[C언어] parse Mac Address (0) | 2011.04.08 |
[C언어] Endian 체크 (0) | 2011.03.28 |
[C언어] BIT READ/WRITE MACRO (0) | 2011.03.28 |