lex 예제를 실행중인데 뭐가 문제일까요?

글쓴이: 익명 사용자 / 작성시간: 월, 2017/04/03 - 9:08오후
flex와 bison을 구해서 기본 path를 설정해서 둘 모두 윈도우의 cmd에서 사용할 수 있게 만들었습니다(Dev-Cpp의 gcc도 cmd에서 사용할 수 있게 설정했습니다)
%{ #include <stdio.h> #include <stdlib.h> enum tnumber {TEOF, TIDEN, TNUM, TASSIGN, TADD, TSEMI, TDOT, TBEGIN, TEND, TERROR}; %} letter [a-zA-Z] digit [0-9] %% begin return(TBEGIN); end return(TEND); {letter}({letter}|{digit})* return(TIDEN); ":=" return(TASSIGN); "+" return(TADD); {digit}+ return(TNUM); ";" return(TSEMI); \. return(TDOT); [\t\n] ; . return(TERROR); %% void main() { enum tnumber tn; printf(" Start of Lex\n"); while((tn == yylex()) != TEOF) { switch(tn) { case TBEGIN : printf("Begin\n"); break; case TEND : printf("End\n"); break; case TIDEN : printf("Identifier\n"); break; case TASSIGN : printf("Assignment\n"); break; case TADD : printf("Add_op\n"); break; case TNUM : printf("Number: %d\n", atoi(yytext)); break; case TSEMI : printf("\n"); break; case TDOT : printf("\n"); break; case TERROR : printf("\n"); break; } } } int yywrap() { printf(" End of Lex\n"); return 1; }
해당 소스를 test.l로 저장한 후 flex test.l 명령어를 통해서 lex.yy.c를 만들었고
gcc lex.yy.c -o test 명령어로 test를 만들고
begin; num := 0; num := num + 526; end.
이 코드를 test.dat으로 저장한 후 test < test.dat 명령어를 넣었습니다
교재에서는 Start of Lex부터 시작해서 쭉 나와야 하는데 제가 해보니 Start of Lex\n만 출력되고 종료됩니다
교재의 예시처럼 Start of Lex\n Begin\n ...으로 출력될까요?
교재에서는 gcc가 아니라 cc lex.yy.c -o test -ll이라는 명령어를 사용했는데 이거때문인가요?
렉스 라이브러리를 윈도우 상에서 사용하려면 어떻게 해야 할까요?
Forums:
음 ..
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
댓글 달기