Trabalho Lex Bom
· objetivo genérico: ferramentas de auxílio na escrita de programas que promovem transformações sobre entradas estruturadas.
· objetivo específico: ferramentas desenvolvidas para programadores de compiladores e interpretadores.
· objetivos específicos secundários: ferramentas válidas também para outras aplicações, como detecção de padrões em arquivos de dados, linguagens de comandos, etc.
· vantagens sobre ferramentas alternativas: permitem um rápido desenvolvimento de protótipos e uma manutenção simples do software.
· tanto o Lex como o Yacc foram desenvolvidos nos Bell Laboratories.
· Yacc (Yet another compiler-compiler): Stephen C. Johnson (1975)
· Lex: Mike Lesk & Eric Schmidt ® desenvolvido posteriormente para trabalhar junto com o Yacc
· Free Software Foundation ® Projeto GNU ® flex & bison
· bison: Robert Corbett & Richard Stallman
· versão padronizada: POSIX 1003.2
· existem versões também para arquiteturas padrão IBM/PC
· gcc (GNU C compiler): foi desenvolvido com Lex & Yacc
· etapas:
1 - Análise léxica: dividir as entradas em unidades coerentes (tokens) 2 - Análise sintática: descobrir o relacionamento entre os tokens
· toda tarefa que envolve ambas ou uma das etapas acima é candidata a ser resolvida via Lex e/ou Yacc.
· papel do Lex: toma um conjunto de descrições de possíveis tokens e produz uma rotina em C que irá identificar estes tokens ® analisador léxico.
· descrições de possíveis tokens: expressões regulares (especificação léxica).
· papel do Yacc: toma uma descrição concisa de uma gramática e produz uma rotina em C que irá executar a análise sintática ou parsing.
· nota1: um analisador léxico desenvolvido usando Lex é quase sempre mais rápido do que um analisador léxico escrito diretamente em C.
· nota2: um analisador sintático desenvolvido utilizando Yacc é geralmente mais lento do que um analisador sintático escrito diretamente em C. Mas o ganho no desenvolvimento e manutenção do programa é enorme.
1.