yylineno run how examples and c gcc lex

c - run - lex and bison



error: nombre de tipo desconocido ''bool'' (4)

Descargué el código fuente y quería compilar el archivo del escáner. Produce este error:

[meepo@localhost cs143-pp1]$ gcc -o lex.yy.o lex.yy.c -ll In file included from scanner.l:15:0: scanner.h:59:5: error: unknown type name ‘bool’ In file included from scanner.l:16:0: utility.h:64:38: error: unknown type name ‘bool’ utility.h:74:1: error: unknown type name ‘bool’ In file included from scanner.l:17:0: errors.h:16:18: fatal error: string: No such file or directory compilation terminated.

Intenté usar un compilador diferente para compilarlo, pero aparecieron diferentes errores.

[meepo@localhost cs143-pp1]$ g++ -o scan lex.yy.c -ll /usr/bin/ld: cannot find -ll collect2: ld returned 1 exit status

Mi sistema operativo es 3.0-ARCH, no sé por qué sucedió esto. ¿Cómo arreglo el error?


C90 no admite el tipo de datos booleanos.

C99 sí lo incluye con esto incluye:

#include <stdbool.h>


C99 sí, si tienes

#include <stdbool.h>

Si el compilador no es compatible con C99, puede definirlo usted mismo:

// file : myboolean.h #ifndef MYBOOLEAN_H #define MYBOOLEAN_H #define false 0 #define true 1 typedef int bool; // or #define bool int #endif

(pero tenga en cuenta que esta definición cambia ABI para tipo bool por lo que vincularlo con bibliotecas externas que se compilaron con bool definido correctamente puede ocasionar errores de tiempo de ejecución difíciles de diagnosticar).


En algún lugar de su código hay una línea #include <string> . Esto por sí solo le dice que el programa está escrito en C ++. Entonces, usar g++ es mejor que gcc .

Para la biblioteca que falta: debe buscar en el sistema de archivos si puede encontrar un archivo llamado libl.so Use el comando locate , pruebe /usr/lib , /usr/local/lib , /opt/flex/lib , o use la fuerza bruta find / | grep /libl find / | grep /libl .

Una vez que haya encontrado el archivo, debe agregar el directorio a la línea de comando del compilador, por ejemplo:

g++ -o scan lex.yy.c -L/opt/flex/lib -ll


Solo agregue lo siguiente:

#define __USE_C99_MATH #include <stdbool.h>