본문 바로가기

IT Tech/Programming

[Lex&Yacc] Yacc 명령 그리고 Debugging!!

반응형





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;)


[Lex Scanner를 위한 토큰 정의시 주의사항]
다음과 같이 토큰을 정의 했다고 가정하자
%%
NUMBER		[-+0-9\.]+
STRING		[a-zA-Z0-9]+
%%
이러한 조건에서 STRING인 패턴에 "1234" 를 input으로 준다면 스캐너는 NUMBER로 인식하고 Syntax Error를 Return한다.



반응형