2011-11-22 23 views
12

Tôi có đoạn code sau đây và nó mang lại cho một lỗi " "hello.l", dòng 31: EOF non" khi tôi chạy lệnh sau flex hello.llỗi eof non trong file flex

%{ 

    #include <stdlib.h> 
    #include "y.tab.h" 

    %} 

%% 

("hi"|"oi")"\n"  {return HI; } 
("tchau"|"bye")"\n" {return BYE;} 
.     {yyerror(); } 

%% 

int main(void) 
{ 
    yyparse(); 
    return 0; 
} 

int yywrap(void) 
{ 
    return 0; 
} 

int yyerror(void) 
{ 
    printf("Error\n"); 
    exit(1); 
} 

Trả lời

19

Vấn đề là với %} - flex là rất nhạy cảm về khoảng trắng. Hủy bỏ không gian trước khi nó, và tất cả nên được tốt.

Ngoài ra, nếu bạn không muốn có chức năng yywrap, bạn có thể dán %option noyywrap vào tệp flex của mình.

+0

Bạn có thể cho tôi biết làm thế nào để chạy biên dịch cả lex.yy. Các tệp c và y.tab.c trong dev-C++? – Waseem

5

Thay đổi này:

%{ 

    #include <stdlib.h> 
    #include "y.tab.h" 

    %} 

Để này:

%{ 

    #include <stdlib.h> 
    #include "y.tab.h" 

%} 

Nó hoạt động với flex 2.5.35 (mingw)