Tengo un "lenguaje" simple que estoy usando Flex (Lexical Analyzer), es así:
/* Just like UNIX wc */
%{
int chars = 0;
int words = 0;
int lines = 0;
%}
%%
[a-zA-Z]+ { words++; chars += strlen(yytext); }
\n { chars++; lines++; }
. { chars++; }
%%
int main()
{
yylex();
printf("%8d%8d%8d\n", lines, words, chars);
}
Ejecuté a flex count.l
, todo va bien sin errores ni advertencias, luego, cuando intento hacer una cc lex.yy.c
, obtuve estos errores:
ubuntu @ eeepc: ~ / Desktop $ cc lex.yy.c
/tmp/ccwwkhvq.o: En funciónyylex': lex.yy.c:(.text+0x402): undefined reference to
yywrap '
/tmp/ccwwkhvq.o: En funcióninput': lex.yy.c:(.text+0xe25): undefined reference to
yywrap'
collect2: ld devolvió 1 estado de salida
¿Qué está mal?
fuente
.l
archivo y lolex
acepté! No estoy seguro de si ese es el mejor lugar. Quizás no importa.Prefiero definir mi propio yywrap (). Estoy compilando con C ++, pero el punto debería ser obvio. Si alguien llama al compilador con varios archivos fuente, los almaceno en una lista o matriz, y luego se llama a yywrap () al final de cada archivo para darle la oportunidad de continuar con un nuevo archivo.
fuente
flex no siempre se instala con sus bibliotecas de desarrollo (lo cual es extraño, ya que es una herramienta de desarrollo). Instale las bibliotecas y la vida será mejor.
En los sistemas base de Redhat:
En sistemas basados en Debian
fuente
Como nota para los seguidores, flex 2.6.3 tiene un error en el que libfl.a "normalmente" definiría yywrap, pero luego no lo hace en ciertos casos, así que compruebe si esa es su versión de flex, podría estar relacionada con su problema:
https://github.com/westes/flex/issues/154
fuente
use este código al final del programa.
fuente