How To Install Flex And Bison On Windows
This post is for all those guys and babes out there who could’nt figure out how to compile their lex and yacc programs in windows. Students in my college install a whole Linux operating system to do their compiler lab practices. Why do it the geeky Linux way if it can be done under Windows? Also, why waste your hard disk space and time(for loading the Linux OS) to do such a simple task.
To begin with, you must download the files below first(around 400KB in total). All the files should be in the same directory(flex.exe is standalone but bison.exe is not).
If not, flex and bison both use the standard GNU build process, so to install them. For Windows users, both bison and flex are included in the Cygwin Linux. Lex and Yacc(Bison) in Windows. Tags: bison, flex, windows. Their lex and yacc programs in windows. Students in my college install a whole Linux.
http://www.monmouth.com/~wstreett/lex-yacc/bison.hairy (Sorry for the trouble guys!!! The link is now corrected)
Another requirement is that you must have a c/c++ compiler(like Turbo C++ ) installed in your system. I believe everyone who has reached compiler level programming will have a c/c++ compiler installed in their system(duh!).
Now you can start your work.
1. Create a lex program and save it(like ‘x.l’ or ‘x.txt’)
2. Reach your directory through command prompt.
3. Call flex by “flex <filename>” (eg: “flex x.l”)
4. If your lex input file doesnt have any errors, a file name “lex.yy.c” will be generated.
5. I suggest you rename “lex.yy.c” to some other more sensible name like “lex.c”, because double extensions is not a good idea in windows environment. Move the file to the folder of your compiler.
6 . Call the compiler and input lex.c to it (eg: “tcc lex.c”, where tcc is the Turbo C compiler; use any C/C++ compiler you have). If what you have is a more sophisticated environment like visual studio, you have to do the normal procedure to get a program to compile. If you use Turbo C, an object file “lex.obj’ and the executable “lex.exe” will be generated if there are no compilation problems
7. Thats it. Now just run lex.exe. Its your lexical analyser.
It is very similar to the way you do it in linux.
All the seven steps look like a complicated procedure. I created a batch file(.bat files similar to shell scrpits in linux) , to do the whole job from calling flex to get the lex.exe up and running. My batch file(rflex.bat) looks like below.
flex input.txt
ren lex.yy.c lex.c
copy lex.c f:tcbin
f:
cd tc
cd bin
tcc lex.c
lex
i:
cd “Compiler lab”
del lex.yy.c
del lex.c
And i called this batch file from “i:Compiler lab” command prompt, the place where my flex .exe is stored. The path of my compiler is “f:tcbintcc.exe “. The batch file will get much smaller, if your compiler’s path is included in system paths or environmental paths or variables. By the way, your lexical analyser will stop after you press ctrl+z(^z character) and press enter(similar to ctrl+d in linux).
So you will have to modify the above batch file if want to use it in your environment. After successfully making the batch file all you have to do is make your input file and call the batch file from your flex and bison folder.
To do yacc or bison, you have to do a similar procedure. I leave that part to you. If you can’t figure it out, just post a comment requesting how to do it. I have successfully created a batch for that too. For more information, click the link below.
Leave a Reply
Hi
I have just begun working with FLex and find that although my lex.yy.c file has been generated, upon renaming(nam.c )and compiling using Turbo C++ 3.0 I am confronted with the following linker error
Undefined symbol _yywrap in module nam.c
Is there a way out of this?
Hi
I have just started working with Flex and find that although lex.yy.c is being generated ,Renaming (nam.c) and compiling it with Turbo C 3.0 I am confronted with the following linker error
Undefined symbol _yywrap in module nam.c
Is there a way out of this?
After the generation of the lex.yy.c and after renaming to lex.c and compiling it with c compiler got the error of undefined reference to yywrap
I have downloaded files you said. I made the lex files to produce an .exe but in yacc files i get always errors. I procude the .c file by typing bison blabla.y but then i get errors the i dont declare yyerror and that kind of things. Could you please provide the commands i need to type in order to create an .exe ?
Thank you
Hi, my name is Joe Garvey, a mature student in Cork University College, Ireland. I must consider using flex and bison in a college project. I’ve downloaded the flex.exe and bison.exe and the bison.simple- but when I try to download (save target as) bison.hairy it saves automatically as bison.simple Any idea as to what if any suffix I should force on the bison.hairy to get it usefully downloaded. This system here is an intel duo core Dell with Windows Vista Business onboard. Do you know of any issues with the Vista consideration? I believe I have a DJGPP compiler onboard here, working, and before I travel headlong into setting this lot up, it would be nice to know of any Vista issues (there have been so many!). Kind regards, and many thanks for your clear and useful webpage etc. Joe.
Hello,
So I have the file lex.yy.c and it works fine. But I have absolutely no idea how to proceed with Bison. Could you possibly describe the procedure for Bison like you’ve done with Flex?
Awesome man. This will give me yet another reason to delay installing Linux on my PC:)
Hi,
>>
I am confronted with the following linker error: Undefined symbol _yywrap in module nam.c
Is there a way out of this?
<<
Yes, there’s simple way out of this.
Write your yywrap() function
OR
Just put
%option noyywrap
in your flex source file.
-Damodar
I would be hesitent downloading .exe files. Moreover this version of bison and lex is quite old, and does not support c++ interface. Does anyone know how to build bison under windows e.g. VS and not under cygwin?
hi,
i follow your instruction but when i compile it some link error occur.what can i do for it?
I tried every link and none of them are working!!!
It seems may of you meets the following linker error:
lex.yy.obj : error LNK2019: unresolved external symbol _yywrap referenced in fun
ction _yylex
this is why the .l file doesn´t supply a version of yywrap()
try to type:
%option noyywrap
at the beginning of the .l file (in the definitios part)
hi,
i have a question.how do run bison.exe? is that the same way of running flex.exe. if so then how do we parse the input. do we need to run the exe file generated by flex and bison together or first do we need to run exe file generated by flex or bison. how does it works. can anyone give me detailed steps to run this exe as parser. expecting your reply at the earliest. thanks.
Raj,
it seems you have mixed up the way flex and bison work. actually they DO NOT return any exe file, but c source files, to be after compiled and linked together with the rest of your code.
here comes general steps to follow:
1)you have written two files:
lexer.l containing your lexical rules
parser.y containing gramar rules
2)run flex.exe by typing
flex.exe lexer.l
you´ll get a file called lex.yy.c
3)after you run bison
bison -d -o y.tab.c parser.y
and you will get the file y.tab.c and the corresponding header file y.tab.h
please note that i used the “-o” option to call the output y.tab.c
4)you compile and link your main.c and the files you got. with msvc you tipe:
cl lex.yy.c y.tab.c main.c /Femain.exe /DMSDOS
/Fe is an option to call the output main.exe
/DMSDOS is an option to define the macro MSDOS which is essential to don´t have error
have funn!
Pier
Hey I can do LEX prog with this but I’ve prob with Yacc(Bison).
From cmd I executed “yacc -d calc.txt” & “lex cal.txt” & 3 files name “calc.txt_tab.c” also header file & lex.yy.c are created.
But How to run them in XP with TurboC & cmd.
Like in Linux the command is gcc calc.tab.c lex.yy.c -ly -ll
& then ./a.out.
How to do with XP?…plz rpl.
hey can you send me a sample lex program that i can use to test? if the compiler and flex perfectly works. because the compiler gives me an “declaration syntax error” while compiling for the program starts with %{. so kindly help 🙂
I get this error… Undefine symbol _main in module c0.ASM… Pls tell me how to correct it…
I got an error message while running the program through compiler unresolved external symbol _yylex
download bison.zip from here it works.
will dev-c++ work for this??i mean im not able to install turbo-c++ so im using dev…
and do u ve ab solution for this??windows 7 64-bit m/c ,not able to find an appropriate turbo-c.
thanks a lot
Even i thought y shud i install a whole new OS for just 2-3 assignments
Hi.
I’ve lost my old compiler flex. I’ve download it from this page. My Error is :
flex.exe : input rules are too complicated. I had before a file named flex254a.exe. I dont find this. May you Help me. Thanks
Hi,
I have done what procedure you have told , but when I compile lex.yy.c in turbo C ,it gives me error “UNABLE TO OPEN INCLUDE FILE blablah.h”
With Flex in windows i get the folowing error flex : input rules are too complicated = 32000 NFA: Can You Help Me?
Thanks.
I am getting the following error:
Error 1 error LNK2001: unresolved external symbol _yylval G:PROJlex.yy.obj
Sir, I Have “Borland Turbo C++ 4.5” installed on my system, then how to execute the lex file through command prompt?please do answer!
Install py2exe python 2.7. hi,
i have downloaded all those file which u have been posted,after then i kept in seperate folder named “lex” in C Directory.
i went cmd prompt in that i entered like below c:lex>”flex x.l”
and i kept sample program namely X.l in that same folder.but i did’t get any thing.simply it tells command is not recognised. i’m using windows7
very good help file but my program said cant opne the file , what i have to do ? i run it windows 7
Also try the Tiny C Compiler together with Bison/flex.
Great tips! Nice blog.
am getting a error as “flex cant open file”…any solution.
‘tcc’ is not recognized as an internal or external command,
operable program or batch file.
i’m gettin this error help me out