【发布时间】:2015-10-11 13:32:01
【问题描述】:
我正在做这个程序来理解词法分析器的正常功能。但是当我编译这个程序时,它会显示一条错误消息::
“b.l:25:在动作中遇到 EOF”。
我不明白为什么,因为我在谷歌上搜索了一些原因,它说在动作部分可能有一些额外的右括号,但事实并非如此。
%option noyywrap
%{
%}
%%
#include<.*> {fprintf(yyout,"\nPREPROCESSOR: %s",yytext);}
main {fprintf(yyout, "\nMAIN:%s",yytext);}
"void"|"int"|"for"|"if"|"return" {fprintf(yyout, "\n KEYWORD:%s",yytext);}
"{"|"}"|"("|")"|";"|"," {fprintf(yyout,"\n SPECIAL SYMBOLS:%s",yytext);}
"<"|">"|"=="|"<="|">=" {fprintf(yyout,"\nCONDITIONAL OPERATORS:%s",yytext);}
"==" {fprinf(yyout,"\nASSIGNMENT OPERATORS:%s",yytext);}
"++"|"--" {fprintf(yyout,"\nINC-DECR OPERATORS:%s",yytext);}
"printf".*|"scanf".* {fprintf(yyout,"\nINBUILT FUNCTIONS:"%s",yytext);}
[0-9]* {fprintf(yyout,"\nNUMBERS:%s",yytext);}
[a-zA-Z] [a-zA-Z0-9_]* {fprintf(yyout,"\nIDENTIFIERS:%s",yytext);}
%%
int main(int argc,char*argv[])
{
yyin = fopen(argv[1],"r");
yyout = fopen(argv[2],"w");
yylex();
fclose(yyin);
fclose(yyout);
return 0;
}
【问题讨论】:
标签: c flex-lexer lex