1

Makefile があるので、入力すると make 次のコマンドが実行されます。

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];
%%
4

1 に答える 1

3

「calclexer.l」に余分な「%%」があるように見えます。

%%

%%

それらの1つ(および空白行)を削除します。

レクサーファイルの形式は次のとおりです(フレックスマンページから取得)。

definitions
%%
rules
%%
user code

ユーザーコードはそのまま出力ファイルにコピーされます。追加の「%%」を使用すると、ルールはユーザーコードとして解釈されます。

于 2009-11-16T02:46:23.310 に答える