2017-10-16 31 views
0

こんにちは私はバイソンとフレックスの初心者ですが、コンパイルしようとするとエラーが発生しているようですが、簡単な電卓を作成しようとしています。'yylex' bisonのエラーへの未定義の参照

次は(アルという名前の)私のフレックス.Lファイルです:

%{ 
#include "a.tab.h" 
%} 
number [0-9]+ 

%% 

"+"  {return ADD;} 
"-"  {return SUB;} 
"*"  {return MUL;} 
"/"  {return DIV;} 
"|"  {return ABS;} 
{number}  { return NUMBER;} 
\n  {return EOF;} 
[ \t] { } 
. {printf("Mystery Character %s\n", yytext); } 

%% 

と、次は.Yファイル(命名AY)私のバイソンです:これは私が書いたものである

%{ 
#include <stdio.h> 
int yyparse(void); 
%} 

%token NUMBER ADD SUB MUL DIV ABS EOL 

%% 

calclist: /*nothing*/ | calclist exp EOL { printf("=%d\n, $1") }; 

exp: factor 
    | exp ADD factor { $$ = $1 + $3; } 
    | exp SUB factor { $$ = $1 - $3; } 
    ; 

factor: term | 
     | factor MUL term { $$ = $1 * $3; } 
     | factor DIV term { $$ = $1/$3; } 

term: NUMBER 
    | ABS term { $$ = $2 >= 0? $2 : - $2; } 
    ; 

%% 

int main(void) 
{ 
    return(yyparse()); 
} 

void yyerror(char *s) 
{ 
    fprintf(stderr, "Error : Exiting %s\n", s); 
} 

コンソールで:

flex a.l 
bison a.y 
gcc a.tab.c -lfl -o a.exe 

私が手にエラーがある:

a.tab.c:(.text+0x1f2): undefined reference to `yylex' 
collect2.exe: error: ld returned 1 exit status 

私はまた、次の警告を得る:

a.tab.c: In function 'yyparse': 
a.tab.c:595:16: warning: implicit declaration of function 'yylex' [-Wimplicit-function-declaration] 
# define YYLEX yylex() 
      ^
a.tab.c:1240:16: note: in expansion of macro 'YYLEX' 
     yychar = YYLEX; 
       ^~~~~ 
a.tab.c:1396:7: warning: implicit declaration of function 'yyerror' [-Wimplicit-function-declaration] 
     yyerror (YY_("syntax error")); 
     ^~~~~~~ 
a.y: At top level: 
a.y:32:6: warning: conflicting types for 'yyerror' 
void yyerror(char *s) 
     ^~~~~~~ 
a.tab.c:1396:7: note: previous implicit declaration of 'yyerror' was here 
     yyerror (YY_("syntax error")); 
     ^~~~~~~ 

を誰が、なぜこれらのエラー/警告かもしれない私に説明することができるだろう起こっている?

答えて

1

生成されるCファイルは2つあり、1つはflexと1つはbisonで生成されます。 flexで作成されたファイルは "lex.yy.c"と呼ばれ、そのファイルもコンパイルする必要があります。

+0

こんにちは、私は、これらのコマンドを試してみましたし、私はまだ-lex.exe lex.yy.cを-lfl バイソンのAY のgcc a.tab.cのlex.yy.cを-oエラーに – user8786494

+0

フレックスアル のgccを取得しています-lfl -o a.exe – user8786494

+0

両方のcファイルを一緒にコンパイルする必要があります。 'gcc -o a -Wall a.tab.c lex.yy.c -lfl' – rici

関連する問題