flex/bison未终止于<&书信电报;EOF>&燃气轮机;
我有一个使用flex/bison的简单项目。我试图解析一个文本文件,但它并没有停止解析(显然是文件末尾的一个循环) 我的flex代码:flex/bison未终止于<&书信电报;EOF>&燃气轮机;,bison,flex-lexer,Bison,Flex Lexer,我有一个使用flex/bison的简单项目。我试图解析一个文本文件,但它并没有停止解析(显然是文件末尾的一个循环) 我的flex代码: %{ #include "y.tab.h" %} %% [0-9] { printf("digit: %s\n",yytext); return DIGIT; } [a-zA-ZáéíóúÁÉÍÓÚçÇãõÃÕ]+ { printf("word: %s\n",yytext); return WORD
%{
#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; }
%%
%{
#包括“y.tab.h”
%}
%%
[0-9]{printf(“数字:%s\n”,yytext);返回数字;}
[a-zA-ZáāíóÉ×ÚāõÃÕ]+{printf(“单词:%s\n”,yytext);返回单词;}
[\.]
[ ]
[\n]
. {printf(“其他:%s\n”,yytext);返回其他;}
{yyterminate();返回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);
}
%{
#包括
#包括
%}
%令牌数字字其他空间
%%
开始:
文本
;
正文:
|文字
;
%%
外部文件*yyin;
main()
{
printf(“翻译…\n”);
printf(“\n”);
if((yyin=fopen(“/home/nilo/text”,“r”))==NULL)
{
fprintf(stderr,“文件找不到或不可读。\n”);
出口(1);
}
//启动解析器
yyparse();
fprintf(stderr,“解析器结束…\n”);
}
YY错误
char*s;
{
printf(“yacc错误:%s\n”,s);
}
yywrap()
{
返回(0);
}
我已经尝试过不使用
规则和其他一些与此相关的东西,比如调用yyterminate()、调用return0,这两种方法都没有成功
有人能告诉我我错过了什么吗
TIA.好的,开始工作了
当我开始使用这段代码时,我使用了著名的“ctrl-c/ctrl-v”特性……:)
当“yywrap()”返回0时,这表示已达到EOF,但解析必须继续。在交互式解析器上尤其如此
从文件中获取输入,由于目前的情况,我们有3种方法可以在文件结束时退出解析: