【发布时间】:2014-04-02 12:21:23
【问题描述】:
我有一个使用 flex/bison 的简单项目。我正在尝试解析一个文本文件,但它并没有退出解析(显然是文件末尾的循环)。
我的弹性代码:
%{
#include "y.tab.h"
%}
%%
[0-9] { printf("digit: %s\n",yytext); return DIGIT; }
[a-zA-ZáéíóúÁÉÍÓÚçÇãõÃÕ]+ { printf("word: %s\n",yytext); return WORD; }
[\.]
[ ]
[\n]
. { printf("other: %s\n",yytext); return OTHER; }
<<EOF>> { yyterminate(); return 0; }
%%
我的野牛代码:
%{
#include <stdio.h>
#include <stdlib.h>
%}
%token DIGIT WORD OTHER SPACE
%%
start :
text
;
text :
| WORD text
;
%%
extern FILE *yyin;
main()
{
printf("Translating...\n");
printf("\n");
if ((yyin = fopen("/home/nilo/text","r")) == NULL)
{
fprintf(stderr,"File not found or not readable.\n");
exit(1);
}
// Start the parser
yyparse();
fprintf(stderr,"Parser ended...\n");
}
yyerror(s)
char *s;
{
printf("yacc error: %s\n", s);
}
yywrap()
{
return(0);
}
我已经尝试过不放<<EOF>>规则和其他一些与此相关的东西,比如调用yyterminate(),调用return 0,两者都这样,但没有成功。
谁能告诉我我错过了什么?
TIA。
【问题讨论】:
标签: bison flex-lexer