Lex (formaali kieli)

Wikipediasta
Siirry navigaatioon Siirry hakuun

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.[1]

Lexistä on myös avoimen lähdekoodin toteutus flex (fast lexical analyser generator), 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.[2]

Toiminta[muokkaa | muokkaa wikitekstiä]

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.[3] Teoreettisesti Lexin tuottama ohjelma on deterministinen äärellinen automaatti (DFA).[4]

Esimerkki:[5]

%{
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."[6]

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. https://www.epaperpress.com/lexandyacc/download/lex.pdf
  2. flex § FAQ § When was flex born?
  3. flex § 3 Introduction
  4. https://www.epaperpress.com/lexandyacc/download/lex.pdf
  5. flex § 4 Some Simple Examples
  6. https://9p.io/magic/man2html/1/lex

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]