ошибка во время ссылки compilation_undefined - PullRequest
0 голосов
/ 31 января 2012

my file 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 Ответ

2 голосов
/ 31 января 2012

у вас отсутствует флаг компоновщика -lfl, чтобы связать ваш анализатор с библиотекой flex, в которой определен yylex.Кроме того, вам нужно создать вывод flex.Этот c-файл, вероятно, называется: myComp.lex.c

compile with:

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