Lex – standardowy program w systemach uniksowych służący do tworzenia tzw. lekserów, czyli programów przekształcających wejściowy strumień znaków na symbole (jednostki leksykalne). Program lex wyodrębnia symbole, dopasowując ciąg wejściowy do wzorców określonych przez wyrażenia regularne. Z każdym ze wzorców można powiązać odpowiedni fragment programu napisany w języku C odpowiedzialny za wykonanie konkretnej akcji w przypadku odnalezienia symbolu.

Obok oryginalnego programu lex napisanego przez Erica Schmidta i Mike'a Leska popularnością cieszy się wersja o nazwie flex.

Struktura pliku lex

edytuj

Program analizujący generowany jest na podstawie pliku zawierającego wzorce (wyrażenia regularne zgodne ze standardem IEEE Std 1003.1-2001) oraz fragmenty kodu w języku C. Zazwyczaj plik ten ma rozszerzenie .l (małe L) i składa się z trzech części oddzielonych od siebie znakami %%:

sekcja definicji
%%
sekcja reguł
%%
sekcja z kodem w języku C

Wynik działania programu

edytuj

Wynikiem działania programu lex, jeżeli nie użyto opcji -t, jest plik tekstowy o nazwie lex.yy.c zawierający kod źródłowy (w języku C) wygenerowanego leksera. Po skompilowaniu tego pliku i połączeniu z biblioteką lex powstaje właściwy program analizujący.

Lex i Yacc

edytuj

Bardzo często wynik działania programu lex jest przekazywany do analizatorów składniowych (Analizator składniowy), czyli programów sprawdzających zgodność strumienia wejściowego z określonymi regułami gramatycznymi. Najpopularniejszy taki tandem to programy lex i yacc szeroko stosowane w systemach uniksowych.

Zobacz też

edytuj

Linki zewnętrzne

edytuj