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")); ^~~~~~~
を誰が、なぜこれらのエラー/警告かもしれない私に説明することができるだろう起こっている?
こんにちは、私は、これらのコマンドを試してみましたし、私はまだ-lex.exe lex.yy.cを-lfl バイソンのAY のgcc a.tab.cのlex.yy.cを-oエラーに – user8786494
フレックスアル のgccを取得しています-lfl -o a.exe – user8786494
両方のcファイルを一緒にコンパイルする必要があります。 'gcc -o a -Wall a.tab.c lex.yy.c -lfl' – rici