Lex (software)
Lex je v informatice program sloužící pro generování lexikálních analyzátorů.[1][2] Často se využívá společně s generátorem syntaktických analyzátorů, programem yacc. Lex vytvořil Eric Schmidt a Mike Lesk. Je běžnou součástí mnoha unixových systémů a stal se součástí standardu POSIX. Přestože je Lex tradičně proprietární nástroj, existují verze založené na původním kódu od AT&T jako open source v rámci systémů OpenSolaris a Plan 9 from Bell Labs. Velmi populární open source variantou je program flex. Na vstupu čte Lex specifikaci lexikálního analyzátoru a na výstupu k němu poskytuje zdrojový kód v programovacím jazyce C. Struktura lex souboruStruktura vstupu je záměrně velice podobná výstupu programu yacc. Soubor je rozdělen do tří částí (sekcí), které jsou vzájemně odděleny dvěma znaky procenta („%%“), jak ukazuje následující příklad. Sekce definic %% Sekce pravidel %% Sekce kódu v jazyce C
Příklad souboru pro lexNásledující kód je ukázkou vstupního souboru pro Flex, která je jednou z verzí lexu. Dokáže rozpoznat řetězce čísel na vstupu a poté je zobrazit na výstupu. /*** Oblast definice ***/ %{ /* Kód v jazyce C, který je bezezmněny zkopírován do výstupního souboru */ #include <stdio.h> %} /* Toto nastavení říká flexu, aby četl pouze jeden soubor na vstupu */ %option noyywrap %% /*** Oblast pravidel ***/ /* [0-9]+ pravidlo pro řetězec obsahující minimálně jedno číslo */ [0-9]+ { /* yytext je řetězec obsahující text vyhovující pravidlu. */ printf("Saw an integer: %s\n", yytext); } . { /* Ignoruj všechny ostatní znaky. */ } %% /*** Oblast kódu v jazyce C ***/ int main(void) { /* Zavolá lexikální analýzu a ukončí se. */ yylex(); return 0; } Po zpracování vstupu Flexem výstupem zdrojový kód v jazyce C ( abc123z.!&*2ghj6 program vypíše: Saw an integer: 123 Saw an integer: 2 Saw an integer: 6 Využití Lexu s jinými nástroji pro programováníVyužití Lexu společně se syntaktickým analyzátoremLex a syntaktické analyzátory, jako je například yacc nebo Bison, se často využívají společně. Analyzátor využívá formální gramatiku pro analýzu vstupu. Tato operace není snadno proveditelná pomocí Lexu, který využívá regulární výrazy (Lex je pouze jednoduchý konečný automat). Nicméně syntaktický analyzátor není schopen číst z prostého vstupu, vyžaduje sérii tokenů. Lex je často používán jako poskytovatel těchto tokenů. Lex a makeProgram Reference
Související článkyExterní odkazy
V tomto článku byl použit překlad textu z článku Lex_(software) na anglické Wikipedii. |
Portal di Ensiklopedia Dunia