error durante la referencia compilation_undefined

mi archivo 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; }

y este es el archivo 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;
       }

Usé estos comandos para compilar

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

pero tengo este error:

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

Todos los programas que instalé están actualizados en la última versión. No puedo entender dónde está el problema? ¿Qué puedo hacer para solucionar este error? Por favor, ayúdame a solucionarlo. Gracias a todos.

preguntado el 31 de enero de 12 a las 08:01

1 Respuestas

te falta la bandera del enlazador -lfl para vincular su analizador con la biblioteca flex donde se define yylex. Además, también necesita generar la salida de flex. Ese archivo c probablemente se llame: myComp.lex.c

compilar con:

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

Respondido el 31 de enero de 12 a las 16:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.