Пытаюсь скомпилить пример из man-a (тот, что simple Pascal-like scaner):
%{ /* need this for the call to atof() below */ #include <math.h> /* need this for printf(), fopen() and stdin below */ #include <stdio.h> %}
DIGIT [0-9] ID [a-z][a-z0-9]* %%
{DIGIT}+ { printf("An integer: %s (%d)\n", yytext, atoi(yytext)); }
{DIGIT}+"."{DIGIT}* { printf("A float: %s (%g)\n", yytext, atof(yytext)); }
if|then|begin|end|procedure|function { printf("A keyword: %s\n", yytext); }
{ID} printf("An identifier: %s\n", yytext);
"+"|"-"|"*"|"/" printf("An operator: %s\n", yytext);
"{"[^}\n]*"}" /* eat up one-line comments */
[ \t\n]+ /* eat up white space */
. printf("Unrecognized character: %s\n", yytext);
%%
int main(int argc, char *argv[]) { ++argv, --argc; /* skip over program name */ if (argc > 0) yyin = fopen(argv[0], "r"); else yyin = stdin;
yylex(); }
далее: $lex pasc.c $gcc -lfl -o pasc lex.yy.c ld: fatal: symbol `main' is multiply-defined: (file /usr/local/lib/libfl.a(libmain.o) and file /tmp/ccjSIq7w.o); ld: fatal: File processing errors. No output written to rec collect2: ld returned 1 exit status
В чем дело?