这个lex文件出了什么问题?

时间:2009-11-16 02:17:18

标签: lexical-analysis

我有一个Makefile,这样当我键入时,运行以下命令:

yacc -d parser.y
gcc -c y.tab.c
flex calclexer.l
gcc -c lex.yy.c

但在此之后我收到以下错误消息:

calclexer.l:10: error: parse error before '[' token
calclexer.l:10: error: stray '\' in program
calclexer.l:15: error: stray '\' in program
calclexer.l:24: error: stray '\' in program
make: *** [lex.yy.o] Error 1

这就是里面的calclexer。如何解决?

%{
#include "y.tab.h"
#include "parser.h"
#include <math.h>
%}
%%

%%
([0-9]+|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?) {
yylval.dval = atof(yytext);
return NUMBER;
}

[ \t] ; /* ignore white space */

[A-Za-z][A-Za-z0-9]* { /* return symbol pointer */
yylval.symp = symlook(yytext);
return NAME;
}

"$" { return 0; /* end of input */ }

\n |. return yytext[0];
%%

1 个答案:

答案 0 :(得分:3)

你希望在“calclexer.l”中有一个额外的“%%”,你有:

%%

%%

删除其中一个(和空行)。

词法分析器文件的格式是(取自flex手册页):

definitions
%%
rules
%%
user code

用户代码逐字复制到输出文件。使用额外的“%%”,您的规则将被解释为用户代码。