[C con Clase] librerias yacc

Jose Cabrera josmaca en gmail.com
Vie Mayo 14 15:00:04 CEST 2010


Si es en linux, al parecer yacc no puede actuar sin lex, al instalar lex me
he quitado el problema de las librerías pero como es costumbre los errores
suelen ir a mas, por lo que he estado investigando el protocolo para yacc es
algo rebuscado,

No se si estas familiarizado con este programa, pero al parecer hay que
crear un archivo .txt, en el cual tienes que incluir y.tab.h, donde defines
los símbolos terminales para el autómata, que al pasárselo a lex genera
lex.yy.c, este lo incluyes en el .txt que le pasas a yacc con el lenguaje,
con la opción de -d te genera ademas de y.tab.c, y.tab.h que si lo incluyes
en el primer .txt y lo pasas nuevamente por lex, te da el definitivo
lex.yy.c, y en principio ya puedes compilar con gcc o g++ y la opción -lfl.

Alguno de estos pasos del rompecabezas tengo que estar haciendo mal ya que
ahora la salida es la siguiente:

 g++ lex.yy.c -o ejecutable -lfl -ll -lm
lex.yy.c:520: error: expected ‘,’ or ‘...’ before numeric constant
lexico.txt: In function ‘int yylex()’:
lexico.txt:5: error: ‘cero’ was not declared in this scope
lexico.txt:6: error: ‘uno’ was not declared in this scope
lexico.txt:7: error: ‘central’ was not declared in this scope
lex.yy.c: In function ‘int yy_get_next_buffer()’:
lex.yy.c:951: error: expected unqualified-id before numeric constant
lex.yy.c:954: error: base operand of ‘->’ is not a pointer
lex.yy.c:956: error: base operand of ‘->’ is not a pointer
lex.yy.c:958: error: base operand of ‘->’ is not a pointer
lex.yy.c:961: error: base operand of ‘->’ is not a pointer
lex.yy.c:961: error: base operand of ‘->’ is not a pointer
lex.yy.c:963: error: base operand of ‘->’ is not a pointer
lex.yy.c:965: error: base operand of ‘->’ is not a pointer
lex.yy.c:967: error: base operand of ‘->’ is not a pointer
lex.yy.c:967: error: base operand of ‘->’ is not a pointer
lex.yy.c:971: error: base operand of ‘->’ is not a pointer
lex.yy.c:973: error: base operand of ‘->’ is not a pointer
lex.yy.c:977: error: base operand of ‘->’ is not a pointer
lex.yy.c:988: error: expected unqualified-id before numeric constant
lex.yy.c:988: error: lvalue required as left operand of assignment
lex.yy.c: At global scope:
lex.yy.c:1087: error: expected ‘,’ or ‘...’ before numeric constant
lex.yy.c: In function ‘void yyunput(int)’:
lex.yy.c:1109: error: ‘yy_bp’ was not declared in this scope
lex.yy.c:1119: error: ‘yy_bp’ was not declared in this scope
lex.yy.c: In function ‘int yyinput()’:

Bueno y muchos mas que no es cuestión de poner en este mensaje.

El 14 de mayo de 2010 09:55, Manuel L. <notret en gmx.es> escribió:

>
> Hola, Josmeagol:
>
> Yacc está disponible para distintas plataformas, y las librerías que
> utilice pueden variar. También dependerá del código que ud. haya añadido a
> mayores. Suele ser común en un sistema basado en Linux, usar las librerías l
> y m, lo que significa que tendría que añadir las opciones -lm y -ll. Primero
> pruebe a compilar sin nada, y luego vaya pobando si el código generado
> necesita alguna.
>
> Por cierto que he hablado de Linux porque deduzco, a partir de los mensajes
> de errores, que usó el compilador gcc instalado en un sistema Linux. Espero
> no haberme equivocado.
>
> Saludos.
>
> j> Lista de correo Cconclase Cconclase en listas.conclase.net
> j>
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> j> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100514/1608b303/attachment.html>


Más información sobre la lista de distribución Cconclase