Flex e Bison
Flex é uma ferramenta para a geração de scanners: programas que reconheceram padrões lexicais no texto(ou seja é um analisador léxico). Flex lê os arquivos de entrada indicadas ou sua entrada padrão, se nenhum nome de arquivo é dado, para uma descrição de um scanner para gerar. A descrição é na forma de pares de expressões regulares e código C, chamada regras. Flex gera como saída um arquivo de origem C, “lex.yy.c”, que define um” yylex rotina ()”. Este arquivo é compilado e ligado com a 'biblioteca -lfl `para produzir um executável. Quando o executável é executado, ele analisa sua entrada para as ocorrências das expressões regulares. Sempre que encontra um, ele executa o código C correspondente.
Exemplo de código simples
Primeiro alguns exemplos simples para obter o sabor de como um usa flex. A sequência de entrada de flexão especifica um scanner que sempre que encontra a string "nome de usuário" vontade substituí-lo com o nome de login do usuário:
%%
printf nome de usuário ("% s", getlogin ());
Por padrão, qualquer texto não correspondida por um scanner flex é copiados para a saída, de modo que o efeito líquido de este scanner é para copiar o seu arquivo de entrada para a sua saída com cada ocorrência de "username" expandido. Nesta entrada, há apenas um governar. "username" é o padrão e a "printf" é o ação. O "%%" marca o início das regras.
Aqui está outro exemplo simples: int num_lines = 0, num_chars = 0;
%%
\ n ++ num_lines; ++ num_chars;
. ++ num_chars;
%%
main ()
{
yylex (); printf ("# de linhas =% d, # de caracteres =% d \ n", num_lines, núm_car);
} (http://dinosaur.compilertools.net/flex/flex_23.html#SEC23 VER NESTE LINK OS BUGS PARA FAZER A PARTE 3 DO TRABALHO)
BISON
Bison é um gerador de parser no estilo de yacc. Ele deve também ser compatíveis com arquivos de entrada projetado para yacc. Arquivos de entrada deve seguir a convenção yacc de terminar em “.y”. Ao contrário yacc, os arquivos gerados não fixaram