0

字句解析プログラムを作成するために .l ファイルをコンパイルしようとしています。コードは次のとおりです。

%{
#include "ifanw.tab.h"
extern int yylval;
%}
%%
"="      { return EQ; }
"!="     { return NE; }
"<"      { return LT; }
"<="     { return LE; }
">"      { return GT; }
">="     { return GE; }
"+"      { return PLUS; }
"-"      { return MINUS; }
"*"      { return MULT; }
"/"      { return DIVIDE; }
")"      { return RPAREN; }
"("      { return LPAREN; }
":="     { return ASSIGN; }
";"      { return SEMICOLON; }
"IF"     { return IF; }
"THEN"   { return THEN; }
"ELSE"   { return ELSE; }
"FI"     { return FI; }
"WHILE"  { return WHILE; }
"DO"     { return DO; }
"OD"     { return OD; }
"PRINT"  { return PRINT; }
[0-9]+   { yylval = atoi(yytext); return NUMBER; }
[a-z]    { yylval = yytext[0] - 'a'; return NAME; }   
\        { ; }
\n       { nextline(); }
\t       { ; }
"//".*\n { nextline(); }
.        { yyerror("illegal token"); }
%%

私が入力したコマンドは次のとおりです。

flex filename.l 

gcc -c lex.yy.c -o out

出力は

filename.l:2:23: fatal error: ifanw.tab.h: no such file or directory.

問題は gcc ライブラリにありますか? その場合、更新/修正済みのライブラリはどこからダウンロードできますか? そうでなければ、何が問題なのですか?

4

2 に答える 2

0

flex ライブラリを gcc コマンドに追加します。

gcc -c lex.yy.c -lfl -o out

また、ファイルを含める場合tab.h、bison ファイルはありますか? もしそうなら、bisonコマンドでコンパイルしていますか?

bison で生成されたヘッダーの名前で.y、bison コマンドでコンパイルする必要がある拡張子を持つファイルが必要です。bison *.y

でコンパイルした後bison、コマンドを再度実行しますが、flex ライブラリ フラグ ( -lfl) を追加することを忘れないでください。

于 2013-02-03T14:40:09.483 に答える
0

gcc問題が何であるかを示しています。指定したインクルードファイルが見つかりません。

ライブラリの問題ではありません。

最初に .y ファイルからそのファイルを作成する必要があります

bison --debug --verbose -d ifanw.y

この小さなチュートリアルが役に立つかもしれません。

.y ファイルがない場合は、不完全なパッケージをコンパイルしようとしていて、うまくいきません。すでに持っているファイルを入手した場所から、不足しているファイルを何らかの形で入手する必要があります。

于 2013-02-03T14:57:20.063 に答える