instalar - ¿Cómo compilar archivos LEX/YACC en Windows?
instalar bison en windows (8)
Tengo archivos Lex
y YACC
para analizar mis archivos (archivo .l
y .y
).
¿Cómo compilar esos archivos y cómo crear un archivo .c
equivalente para ellos en la plataforma de Windows?
En cuanto a hoy (2011-04-05, actualizado 2017-11-29) necesitará las últimas versiones de:
Después de eso, realice una instalación completa en un directorio de su preferencia sin espacios en el nombre . Sugiero
C:/GnuWin32
. No lo instale en el valor predeterminado (C: / Archivos de programa (x86) / GnuWin32) porque bison tiene problemas con los espacios en los nombres de directorio, por no decir paréntesis.También, considere instalar Dev-CPP en el directorio predeterminado (
C:/Dev-Cpp
)Después de eso, establezca la variable PATH para incluir los directorios bin de
gcc
(enC:/Dev-Cpp/bin
) yflex/bison
(enC:/GnuWin32/bin
). Para hacerlo, copie esto;C:/Dev-Cpp/bin;C:/GnuWin32/bin
y;C:/Dev-Cpp/bin;C:/GnuWin32/bin
al final de la variablePATH
, definida en el lugar que se muestra en esta figura:
Si la figura no tiene una buena resolución, puede ver un paso a paso aquí .Abra un indicador, cd al directorio donde están su ".l" y ".y", y compílelos con:
-
flex hello.l
-
bison -dy hello.y
-
gcc lex.yy.c y.tab.c -o hello.exe
-
Podrás ejecutar el programa. Hice las fuentes para una prueba simple (el infame Hello World
):
Hola.l
%{
#include "y.tab.h"
int yyerror(char *errormsg);
%}
%%
("hi"|"oi")"/n" { return HI; }
("tchau"|"bye")"/n" { return BYE; }
. { yyerror("Unknown char"); }
%%
int main(void)
{
yyparse();
return 0;
}
int yywrap(void)
{
return 0;
}
int yyerror(char *errormsg)
{
fprintf(stderr, "%s/n", errormsg);
exit(1);
}
Hola.y
%{
#include <stdio.h>
#include <stdlib.h>
int yylex(void);
int yyerror(const char *s);
%}
%token HI BYE
%%
program:
hi bye
;
hi:
HI { printf("Hello World/n"); }
;
bye:
BYE { printf("Bye World/n"); exit(0); }
;
Editado: evitando "advertencia: definición implícita de yyerror y yylex".
Descargo de responsabilidad: recuerde, esta respuesta es muy antigua (¡desde 2011!) Y si tiene problemas debido a que las versiones y funciones cambian, es posible que necesite más investigación, ya que no puedo actualizar esta respuesta para reflejar los nuevos puntos. Gracias y espero que este sea un buen punto de entrada para usted como lo fue para muchos.
Actualizaciones: si es necesario hacer algo (cambios realmente pequeños), consulte el repositorio oficial en github: https://github.com/drbeco/hellex
Feliz piratería.
Hay puertos de flex y bison para windows aquí: http://gnuwin32.sourceforge.net/
flex-2.5.4a-1.exe es la implementación gratuita de lex. bison-2.4.1-setup.exe es la implementación gratuita de yacc.
Lo que usted (probablemente querrá) es Flex 2.5.4 (algunas personas ahora lo "mantienen" y producen versiones más nuevas , pero IMO han hecho más para arruinarlo que corregir cualquier deficiencia real) y byacc 1.9 (igualmente). (Edite el 2017-11-17: Flex 2.5.4 ya no está disponible en Sourceforge, y el repositorio de github de Flex solo se remonta a 2.5.5. Pero aparentemente aún puede obtenerlo de un servidor ftp Gnu en ftp://ftp.gnu.org/old-gnu/gnu-0.2/src/flex-2.5.4.tar.gz .)
Como inevitablemente será recomendado, advertiré contra el uso de Bison. Bison fue escrito originalmente por Robert Corbett, el mismo tipo que más tarde escribió Byacc, y afirma abiertamente que en ese momento realmente no sabía ni entendía lo que estaba haciendo. Desafortunadamente, siendo joven e insensato, lo lanzó bajo la GPL y ahora los fanáticos de la GPL lo empujan como la respuesta a los males de la vida a pesar de que su propio autor básicamente dice que debería considerarse como un producto de prueba beta, pero por la complicada razonamiento de los fanáticos de la GPL, la licencia de byacc no tiene restricciones suficientes para calificar como "gratis"!
Puede encontrar la última versión de Windows de flex & bison aquí: http://sourceforge.net/projects/winflexbison/
Siempre hay Cygwin .
También vale la pena señalar que WinFlexBison se ha packaged para el administrador de paquetes de Chocolatey . Instala eso y luego ve:
choco install winflexbison
... que en el momento de escribir este artículo contiene Bison 2.7 y Flex 2.6.3.
También hay winflexbison3
que (en el momento de escribir este artículo) tiene Bison 3.0.4 y Flex 2.6.3.
Vaya a la instalación completa de Git para Windows (con la herramienta Unix) , y bison
y flex
vendrían con él en la carpeta bin
.
el método más sencillo es descargar e instalar cygwin y descargar los paquetes gcc y flex durante la instalación. Luego, para ejecutar un archivo lex para por ejemplo. abc.l
nosotros escribimos
flex abc.l
gcc lex.yy.c -o abc.exe
./abc.exe