Я собираюсь запустить простую программу, созданную с помощью Flex and Bison.
Вот мои коды.
Файл Flex (calc.l)
%{
#include <stdio.h>
#include <stdlib.h>
#include "tt.tab.h"
%}
/* %option noyywrap */
%%
[0-9]+(\.[0-9]+)?([eE][0-9]+)? {yylval.f = atof(yytext); return NUM;}
[-+()*/] {return yytext[0];}
[\t\f\v\n] {;}
%%
int yywrap() {return -1}
Файл зубров (tt.y)
%{
#include <stdio.h>
#include <stdlib.h>
extern int yylex();
void yyerror(char *msg);
%}
%{
#include <stdio.h>
#include <stdlib.h>
extern int yylex();
%}
%union {
float f;
}
%token <f> NUM
%type <f> E T F
%%
S : E {printf("f\n", $1);}
;
E : E '+' T {$$ = $1 + $3}
| T {$$ = $1;}
;
T : T '*' F {$$ = $1 * $3}
| F {$$ = $1;}
;
F : '(' E ')' {$$ = $2;}
| '-' F {$$ = -$2;}
| NUM {$$ = $1;}
%%
void yyerror(char *msg) {
fprintf(stderr, "%s\n", msg);
exit(1);
}
Для компиляции я следую приведенным ниже командам в cmd.
Bison -d tt.y
Flex calc.l
gcc lex.yy.c tt.tab.c -o calc
, когда я запускаю последний gcc comman, появляется ошибка, подобная этой.
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../libmingw32.a(main.o):(.text.startup+0xb0): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
В чем проблема в моих кодах или любых.Спасибо за внимание :)