Ficheiro .y

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 .lex

/* 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

Criar Executável

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

Ficheiro .exe

Por fim podemos correr o analisador sintáctico:

c:\flex> exemplo

Voltar