野牛重新定位被截断以适应:R_X86_64_PC32与未定义的符号“fprint”

野牛重新定位被截断以适应:R_X86_64_PC32与未定义的符号“fprint”,c,bison,C,Bison,flex1.l文件: 我编译了.l文件: 我跑: gcc bison1.tab.c lex.yy.c -lfl 我得到以下信息: /tmp/ccPPnaPa.o:bison1.tab.c:.text+0x93f:对的未定义引用 'fprint'/tmp/ccPPnaPa.o:bison1.tab.c:.text+0x93f:重新定位 根据未定义的符号“fprint”截断以适合:R_X86_64_PC32 集合2: 错误:ld返回了1个退出状态 在fprintstderr处,%s\n,msg;:

flex1.l文件:

我编译了.l文件:

我跑:

gcc bison1.tab.c lex.yy.c -lfl
我得到以下信息:

/tmp/ccPPnaPa.o:bison1.tab.c:.text+0x93f:对的未定义引用 'fprint'/tmp/ccPPnaPa.o:bison1.tab.c:.text+0x93f:重新定位 根据未定义的符号“fprint”截断以适合:R_X86_64_PC32 集合2: 错误:ld返回了1个退出状态


在fprintstderr处,%s\n,msg;:fprintf而不是fprintf将flag-Wall添加到gcc命令中。@rici谢谢!成功了!!
%{
 #include <stdlib.h>
 #include <stdio.h>
 #include <math.h>
 #include "bison1.tab.h"

 void yyerror(char const *);

 extern FILE *yyin;
 extern FILE *input;
 extern FILE *output;

 extern int yylval;
 extern int yyparse(void);
 extern int n;
 int errNum = 0;
 int forNum = 0;
%}

%left '+' '-'
%left '*' '/' '%'
%nonassoc ISOTITA DIAFORA LESSTHAN GREATERTHAN LESSISO GREATERISO

%token SEMICOLON ASSIGN THAUMASTIKO AND1 KOMMA
%token PLUS MINUS 
%token PARENTHESI1 PARENTHESI2 AGGILI1 AGGILI2
%token POLLAPL DIAIRESI MOD 
%token ISOTITA DIAFORA LESSTHAN GREATERTHAN LESSISO GREATERISO 
%token AND2 OR   
%token TRUE FALSE   
%token INTEGER BOOLEAN STRING VOID EXTERN
%token BEGIN1 END1 IF1 ELSE1 WHILE1 FOR1 RETURN1
%token ID1 DIGIT STRING1
%token NEWLINE

%start program

%%
program : externaldecl kefalidaprog tmimaorismon tmimaentolon
        ;
externaldecl : externaldecl externalprototype
              |
              ;
externalprototype : EXTERN prototypefun
                   ;
kefalidaprog : VOID ID1 PARENTHESI1 PARENTHESI2
              ;
tmimaorismon : tmimaorismon orismos
              | 
              ;
orismos : orismosvar
        | orismosfun
        | prototypefun
        ;
orismosvar : typedata listvar SEMICOLON
            ;
typedata : INTEGER
          | BOOLEAN
          | STRING
          ;
listvar : extralist ID1
         | 
         ;
extralist : KOMMA listvar
           |
           ;
orismosfun : kefalidafun tmimaorismon tmimaentolon
            ;
prototypefun : kefalidafun SEMICOLON
              ;
kefalidafun : typefun ID1 PARENTHESI1 listtyppar PARENTHESI2
             | typefun ID1 PARENTHESI1              PARENTHESI2
             ;
typefun : INTEGER
         | BOOLEAN
         | STRING
         ;
listtyppar : otherlistpar typpar
             | 
             ;
otherlistpar : listtyppar KOMMA
               |
               ;
typpar : typedata AND1 ID1
        | typedata       ID1
        ;
tmimaentolon : BEGIN1 entoles END1
          ;
entoles : entoles entoli
        |
        ;
entoli : simpleentoli SEMICOLON
       | domimenientoli
       | sinthetientoli
       ;
sinthetientoli : AGGILI1 entoles AGGILI2
                ;
domimenientoli : entoliif 
                | entoliwhile 
                | entolifor 
                ;
simpleentoli : anathesi
              | klisifun
              | entolireturn
              | entolinull
              ;
entoliif : IF1 PARENTHESI1 genikiekfrasi PARENTHESI2 entoli elseclause
          | IF1 PARENTHESI1 genikiekfrasi PARENTHESI2 entoli 
          ;
elseclause : ELSE1 entoli
            ;
entoliwhile : WHILE1 PARENTHESI1 genikiekfrasi PARENTHESI2 sinthetientoli
             ;
entolifor : FOR1 PARENTHESI1 conditions PARENTHESI2 sinthetientoli
           ;
conditions : condition SEMICOLON condition SEMICOLON condition SEMICOLON
           ;
condition : genikiekfrasi
          |
          ;
anathesi : ID1 ASSIGN genikiekfrasi 
         ;
klisifun : ID1 PARENTHESI1 listrealpar PARENTHESI2 
          | ID1 PARENTHESI2               PARENTHESI2 
          ;
listrealpar : realpar otherlistreal
              ;
otherlistreal : KOMMA realpar otherlistreal
                |
                ;
realpar : genikiekfrasi
         ;
entolireturn : RETURN1 genikiekfrasi 
              ;
entolinull : 
            ;
genikiekfrasi : genikaterms genikosoros
               ;
genikaterms : genikiekfrasi OR
          |
          ;
genikosoros : genikosparags genikosparag
             ;
genikosparags : genikosoros AND2
               |
               ;
genikosparag : THAUMASTIKO genikosprotparag
              |             genikosprotparag
              ;
genikosprotparag : simpleekfrasi tmimasigrisis
                   | simpleekfrasi
                   ;
tmimasigrisis : sigritikostelestis simpleekfrasi
               ;
sigritikostelestis : ISOTITA
                    | DIAFORA
                    | LESSTHAN
                    | GREATERTHAN
                    | LESSISO
                    | GREATERISO
                    ;
simpleekfrasi : simpleoros ekfrasi
               ;
ekfrasi : PLUS simpleekfrasi
        | MINUS simpleekfrasi
        |
        ;
simpleoros : muloroi simpleparag
            ;
muloroi : simpleoros POLLAPL
         | simpleoros DIAIRESI
         | simpleoros MOD
         | 
         ;
simpleparag : PLUS simpleprotoros
             | MINUS simpleprotoros
             |     simpleprotoros
             ;
simpleprotoros : ID1
                 | stathera
                 | klisifun
                 | PARENTHESI1 genikiekfrasi PARENTHESI2
                 ;
stathera : DIGIT
         | STRING1
         | TRUE
         | FALSE
         ;

%%

void yyerror(char const *msg) 
{
fprint(stderr, "%s\n", msg);
}


int main(int argc, char **argv) 
{
FILE *input;
FILE *output;

++argv;
--argc;
if(argc>0)
{input = fopen(argv[0], "r");}
else
{output = fopen("output.exe","w");}

int a = yyparse();
if(a==0)
{printf("Done parsing\n");}
else
{printf("Yparxei lathos sti grammi: %d\n", n);}

printf("Estimated number of errors: %d\n", errNum);

return 0;
}
bison -d bison1.y
flex flex1.l
gcc bison1.tab.c lex.yy.c -lfl