IT Tech/Programming
[Lex&Yacc] Yacc 명령 그리고 Debugging!!
MindEater™
2011. 4. 19. 22:26
반응형
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한다.
반응형