2009-11-16 47 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 

用戶代碼被逐字拷貝到輸出文件中。有了額外的「%%」,你的規則就被解釋爲用戶代碼。