O ficheiro deve conter na terceira parte a função main, exemplo:
/* ficheiro exemplo.y */ %{ #include<malloc.h> %} %token INT %% inicio: inicio '+' final {$$=$1+$3;} | inicio '-' final {$$=$1+$3;} | final {$$=$1;} ; final: INT {$$=$1;} ; %% int main() { yyparse(); } int yyerror(char *s) { printf("erro sintatico: %s\n",s); }Para ciar o programa em C e o header file, deve utilizar o seguinte comando, que gera os ficheiros exemplo_tab.c e exemplo_tab.h (no unix/linux o '_' é substituido por um '.')
c:\flex> bison -d exemplo.y
/* ficheiro exemplo.lex */ %{ #include"exemplo_tab.h" /* ficheiro onde estão definidos os tokens e a variavel yylval (int) */ %} %% [0-9]+ yylval=atoi(yytext);return INT; '+'|'-' return(yytext[0]); /* devolve o caracter */ <<EOF>> | \n return 0; /* bison considera 0, fim de dados */ [ \t] ; . printf("Error lexico: %s\n", yytext); %% int yywrap() { return(1); /* opcional */ }
Para ciar o programa em C, deve utilizar um dos seguintes comandos:
para gerar o ficheiro exemplo.c
c:\flex> flex -oexemplo.c exemplo.lex
Depois de criado o ficheiro inteiro.c, este deve ser compilado.
No directório do Visual C ("C:\Program Files\Microsoft Visual Studio\VC98\Bin" no caso da versão 6.0) existe o ficheiro vcvars32.bat, que define todas as variáveis de ambiente para poder ser corrido o compilador de C na linha de comandos.
O ficheiro batch vcvars32.bat deve ser corrido uma só vez na linha de comando onde vamos compilar o programa.
Deve de seguida ser executado o comando de compilação:
c:\flex> cl /Feexemplo exemplo.c exemplo_tab.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. exemplo.c exemplo_tab.c Generating Code... exemplo.y(30) : warning C4716: 'yyerror' : must return a value Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /out:exemplo.exe exemplo.obj exemplo_tab.obj
Por fim podemos correr o analisador sintáctico:
c:\flex> exemplo