compilation_undefined引用期间出错

时间:2012-01-31 08:26:14

标签: gcc compilation bison

我的文件myComp.l

  %{                                                                                                    
 #include <stdlib.h>
        #include <stdio.h>
         #include "y.tab.h"
           int yyerror(char *);
        %}

 %%
         [a-z]       {
                  yylval = *yytext - 'a';
                return VAR;
            }
         [0-9]+      {
                yylval = atoi(yytext);
                return INT;
            }
         [-+()=/*\n] { return *yytext; } [ \t]       ;

         .           { yyerror("Input non valido"); }

         %% int yywrap(void){
         return 1; }

这是myComp.y

文件
         %{ /* Prologo */
         #define YYSTYPE int
         #include <math.h>
         #include <stdio.h>

        int yyerror(char *);
        int yylex(void) ;
        int sym[26];
        %}

       /* Definizioni */
       %token INT VAR
       %left '+' '-'
       %left '*' '/'

       %%  


       program:
       program statement '\n'
       |
       ;

       statement:
       expr               { printf("%d\n", $1); }
       | VAR '=' expr     { sym[$1] = $3; }
       ;

       expr:
       INT
       | VAR               { $$ = sym[$1]; }
       | expr '+' expr     { $$ = $1 + $3; }
       | expr '-' expr     { $$ = $1 - $3; }
       | expr '*' expr     { $$ = $1 * $3; }
       | expr '/' expr     { $$ = $1 / $3; }
       | '(' expr ')'      { $$ = $2; }
       ;

       %%


       int yyerror(char *s) {
       fprintf(stderr, "%s\n", s);
       return 1;
       }

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

我用这个命令编译

       flex myComp.l
       bison -y myComp.y
       gcc -o myComp y.tab.c

但我有这个错误:

       /tmp/ccaHRWZu.o: In function `yyparse':
       y.tab.c:(.text+0x24a): undefined reference to `yylex'
       collect2: ld returned 1 exit status

我安装的所有程序都在上一个版本中更新。我无法解决问题在哪里?我可以做些什么来解决这个错误。请帮助我修复它。谢谢所有            这是所有

1 个答案:

答案 0 :(得分:2)

您缺少链接器标志-lfl以将解析器链接到定义了yylex的flex库。此外,您还需要构建flex的输出。该c文件可能称为:myComp.lex.c

编译:

gcc -o myComp y.tab.c myComp.lex.c -lfl