lex e yacc são duas ferramentas fundamentais utilizadas no sistema operacional UNIX para a criação de programas de processamento de texto, como compiladores e interpretadores.
LEX (Gerador de Analisador Lexical) é um programa que gera analisadores léxicos, responsáveis por dividir um fluxo de caracteres em "tokens" individuais. Por exemplo, um analisador léxico pode reconhecer palavras, números, sinais de pontuação ou outras unidades lógicas em um arquivo de texto. Ele executa o primeiro estágio de compilação convertendo fluxos de caracteres em uma sequência de tokens.
YACC (mais um compilador compilador) é um gerador de analisador que cria analisadores, que são programas que podem analisar a estrutura gramatical de uma sequência de tokens. Os analisadores verificam a sintaxe da entrada e constroem uma árvore de sintaxe abstrata (AST) representando a estrutura do programa. Esta representação abstrata é então usada para posterior compilação ou interpretação.
Lex e Yacc são normalmente usados juntos para construir processadores de linguagem. O programa lex gera um analisador léxico que tokeniza o texto de entrada, e o programa yacc gera um analisador que verifica a sintaxe da entrada tokenizada e constrói o AST. Juntos, eles formam um poderoso conjunto de ferramentas para a criação de vários aplicativos de processamento de linguagem, incluindo compiladores, interpretadores, editores de texto e muito mais.