Lex é um programa projetado para gerar scanners, também conhecidos como tokenizers, que reconhecem padrões léxicos em texto. Lex é uma sigla que significa "lexical analyzer generator" (gerador de analisadores léxicos). Ele é destinado principalmente para sistemas baseados em Unix. O código para Lex foi originalmente desenvolvido por Eric Schmidt e Mike Lesk.
Lex pode realizar transformações simples por si só, mas seu principal objetivo é facilitar a análise léxica, o processamento de seqüências de caracteres como código fonte para produzir seqüências de símbolos chamadas tokens para uso como entrada para outros programas como parsers. O Lex pode ser usado com um gerador de parsers para realizar análise léxica. É fácil, por exemplo, fazer interface entre Lex e Yacc, um programa de código aberto que gera código para o analisador na linguagem de programação C.
Lex é proprietário, mas versões baseadas no código original estão disponíveis como código aberto. Estas incluem uma versão simplificada chamada Flex, um acrônimo para "fast lexical analyzer generator", assim como componentes do OpenSolaris e do Plan 9.