Lex, համակարգչային ծրագիր է, որն օգտագործվում է լեքսիկական անալիզատորների կառուցման համար։ Հիմնականում օգտագործվում է շարահյուսական անալիզատորներ գեներացնող Yacc ծրագրի հետ։ Lex[1]-ի առաջին տարբերակը ստեղծել են Մայք Լեսկը (Mike Lesk) և Էրիկ Շմիդտը (Eric Schmidt)։ Այն UNIX համակարգերում լեքսիկական անալիզատորներ գեներացնող ստանդարտ ծրագիր է, ինչպես նաև ավելացված է POSIX ստանդարտին։
Lex-ը կարդում է կառուցվելիք լեքսիկական անալիզատորը նկարագրող մուտքային հոսքը և գեներացնում է լեքսիկական անալիզատորի կոդը՝ գրված C լեզվով։
Լեքսիկական անալիզատորը նկարագրող ֆայլը, որ ծառայում է որպես Lex ծրագրի մուտքային հոսք, բաղկացած է երեք մասերից, որոնք իրարից անջատված են %% նշաններով։
Սահմանումների բլոկ %% Կանոնների բլոկ %% C լեզվով գրված կոդի բլոկ
/*** Սահմանումներ ***/ %{ #include <stdio.h> %} %% /*** Կանոնների բլոկ ***/ /* [0-9]+ արտահայտությունը ճանաչում է մեկից ավելի թվանշաններից կազմված տողերը */ [0-9]+ { /* yytext-ը ճանաչած տողը պարունակող փոփոխականն է */ printf("Saw an integer: %s\n", yytext); } . { /* Անտեսել բոլոր այլ սիմվոլները */ } %% /*** C կոդի բլոկ ***/ int main(void) { /* Գործարկել լեքսիկական անալիզատորը, ապա՝ ավարտել։ */ yylex(); return 0; }
Այս ֆայլը lex-ի կողմից թարգմանվելուց հետո կգեներացվի lex.yy.c աննունով C ֆայլ։ Այս ֆայլը կարելի է թարգմանել C կոմպիլյատորով և ստանալ մի կիրառություն, որը ճանաչում և արտածում է ամբողջ թվեր ներկայացնող տողերը։ Օրինակ, հետևյալ մուտքը ստանալիս.
abc123z.!&*2ghj6
Ծրագիրը կարտածի.
Saw an integer։ 123 Saw an integer։ 2 Saw an integer։ 6