天天看點

[ZZ]bison flex for windows 使用說明

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:
    [ZZ]bison flex for windows 使用說明
    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

[ZZ]bison flex for windows 使用說明

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

Hello World

):

Hello.l

  %{

  #include <stdlib.h>
  #include "y.tab.h"

  %}

  %%

  ("hi"|"oi")"\n"       { return HI;  }
  ("tchau"|"bye")"\n"   { return BYE; }
  .                     { yyerror();  }

  %%

  int main(void)
  {
     yyparse();
     return 0;
  }

  int yywrap(void)
  {
     return 0;
  }

  int yyerror(void)
  {
      printf("Error\n");
      exit(1);
  }

           

Hello.y

%token HI BYE

%%

program: 
         hi bye
        ;

hi:     
        HI     { printf("Hello World\n");   }
        ;
bye:    
        BYE    { printf("Bye World\n"); exit(0); }
         ;
           

繼續閱讀