2009-11-16 49 views
1

我有一个Makefile文件,这样当我键入让下面的命令运行:这个lex文件有什么不对?

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]; 
%% 
+0

这个问题似乎可以通过查看lex的文档来解决。 – 2009-12-06 05:23:18

回答

3

你看看有一个额外的 “%%”,在 “calclexer.l”,那就是你有:

%% 

%% 

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

词法分析器文件的格式(从柔性手册页截取):

definitions 
%% 
rules 
%% 
user code 

用户代码被逐字拷贝到输出文件中。有了额外的“%%”,你的规则就被解释为用户代码。