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 』
댓글 달기