Lex on ohjelma, jolla generoidaan säännöistä leksikaalisia analysaattoreita, joita usein nimitetään "skannereiksi." Leksikaalinen analyysi tuottaa lähdekoodin sanoista tokeneita, jotka välitetään syntaksianalyysille. Lex ei ole varsinaisesti ohjelmointikieli, vaan koodigeneraattori, joka tuottaa ohjelmakoodia tiettyyn tarkoitukseen.

Lex on POSIX-standardissa määritelty Unix-käyttöjärjestelmien ohjelma, jonka kirjoittivat Mike Lesk ja Eric Schmidt. Ohjelman kuvaus julkaistiin 1975.

Lexistä on myös avoimen lähdekoodin toteutus Flex (Fast Lexical Analyzer), jonka kirjoitti alun perin Jef Poskanzer Ratforilla (Fortran) ja Vern Paxson otti ohjelman ylläpidettäväkseen 1982 ja käänsi sen C:lle 1987 tienoilla.flex § FAQ § When was flex born?

Toiminta

Lexin säännöt (rules) ovat säännöllisiä lausekkeita ja C-kielistä koodia, josta generoidaan C-kielinen lähdekoodi, oletuksena nimeltään lex.yy.c, joka määrittelee funktion yylex(). Tämä ohjelma käännettynä skannaa omaa syötettään ja tunnistaa lausekkeisiin sopivia tokeneita ja suorittaa niille määrätyn C-koodin.flex § 3 Introduction Teoreettisesti Lexin tuottama ohjelma on deterministinen äärellinen automaatti (DFA).

Esimerkki:flex § 4 Some Simple Examples %{ int num_lines = 0, num_chars = 0; %} %% \n ++num_lines; ++num_chars; . ++num_chars; %% int main() { yylex(); printf( "# of lines = %d, # of chars = %d\n", num_lines, num_chars ); } Tämän ajaminen lexin ja C-kääntäjän läpi luo ohjelman, joka lisää toista muuttujaa joka merkin kohdalla ja molempia rivinvaihtomerkin (\n) kohdalla.

Lexiä käytetään yleensä Yacc-parseri-generaattorin kanssa. Yaccin luomat parserit lukevat syötteensä yylex()-nimisellä funktiolla. make olettaa että lex-tiedostot käyttävät .l-päätettä.

Plan 9:n manuaalisivu toteaa lexistä että "tämän dinosauruksen tappava asteroidi on vielä kiertoradalla."https://9p.io/magic/man2html/1/lex

Lähteet

Kirjallisuutta

Luokka:Ohjelmointityökalut Luokka:Unix-ohjelmat Luokka:Vuoden 1975 ohjelmistot