lex och yacc är två grundläggande verktyg som används i UNIX-operativsystemet för att skapa textbearbetningsprogram, såsom kompilatorer och tolkar.
LEX (Lexical Analyzer Generator) är ett program som genererar lexikalanalysatorer, som är ansvariga för att bryta upp en ström av tecken till individuella "tokens". Till exempel kan en lexikalanalysator känna igen ord, siffror, skiljetecken eller andra logiska enheter i en textfil. Den utför det första steget av kompileringen genom att konvertera teckenströmmar till en sekvens av tokens.
YACC (Yet Another Compiler Compiler) är en parsergenerator som skapar parsers, som är program som kan analysera den grammatiska strukturen hos en sträng av tokens. Parsers verifierar syntaxen för indata och konstruerar ett abstrakt syntaxträd (AST) som representerar programmets struktur. Denna abstrakta representation används sedan för ytterligare sammanställning eller tolkning.
Lex och Yacc används vanligtvis tillsammans för att bygga språkprocessorer. Lex-programmet genererar en lexikalanalysator som tokeniserar inmatningstexten, och yacc-programmet genererar en parser som kontrollerar syntaxen för den tokeniserade inmatningen och bygger AST:n. Tillsammans bildar de en kraftfull verktygsuppsättning för att skapa olika språkbehandlingsapplikationer, inklusive kompilatorer, tolkar, textredigerare och mer.