How to compile LEX/YACC files on Windows?

前端 未结 9 1664
春和景丽
春和景丽 2020-11-28 19:53

I\'m having Lex and YACC files to parse my files (.l file and .y file).

How to compile those files and how to mak

相关标签:
9条回答
  • 2020-11-28 20:16

    As for today (2011-04-05, updated 2017-11-29) you will need the lastest versions of:

    1. flex-2.5.4a-1.exe

    2. bison-2.4.1-setup.exe

    3. After that, do a full install in a directory of your preference without spaces in the name. I suggest C:\GnuWin32. Do not install it in the default (C:\Program Files (x86)\GnuWin32) because bison has problems with spaces in directory names, not to say parenthesis.

    4. Also, consider installing Dev-CPP in the default directory (C:\Dev-Cpp)

    5. After that, set the PATH variable to include the bin directories of gcc (in C:\Dev-Cpp\bin) and flex\bison (in C:\GnuWin32\bin). To do that, copy this: ;C:\Dev-Cpp\bin;C:\GnuWin32\bin and append it to the end of the PATH variable, defined in the place show by this figure:
      step-by-step to set PATH variable under Win-7.
      If the figure is not in good resolution, you can see a step-by-step here.

    6. Open a prompt, cd to the directory where your ".l" and ".y" are, and compile them with:

      1. flex hello.l
      2. bison -dy hello.y
      3. gcc lex.yy.c y.tab.c -o hello.exe

    Commands to create lexical analyzer, parser and executable.

    You will be able to run the program. I made the sources for a simple test (the infamous Hello World):

    Hello.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);
    }
    

    Hello.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); }
             ;
    

    Edited: avoiding "warning: implicit definition of yyerror and yylex".

    Disclaimer: remember, this answer is very old (since 2011!) and if you run into problems due to versions and features changing, you might need more research, because I can't update this answer to reflect new itens. Thanks and I hope this will be a good entry point for you as it was for many.

    Updates: if something (really small changes) needs to be done, please check out the official repository at github: https://github.com/drbeco/hellex

    Happy hacking.

    0 讨论(0)
  • 2020-11-28 20:17

    Go for the full installation of Git for windows (with Unix tool), and bison and flex would come with it in the bin folder.

    0 讨论(0)
  • 2020-11-28 20:18

    I was having the same problem, it has a very simple solution.
    Steps for executing the 'Lex' program:

    1. Tools->'Lex File Compiler'
    2. Tools->'Lex Build'
    3. Tools->'Open CMD'
    4. Then in command prompt type 'name_of_file.exe' example->'1.exe'
    5. Then entering the whole input press Ctrl + Z and press Enter.

    Example

    0 讨论(0)
提交回复
热议问题