Lexikální analýza

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 2. dubna 2022; kontroly vyžadují 10 úprav .

V informatice je lexikální analýza („tokenizace“, z anglického  tokenizing ) proces analytické analýzy vstupní sekvence znaků do rozpoznaných skupin  – lexémů – za účelem získání identifikovaných sekvencí na výstupu, nazývaných „ tokeny “ (podobně jako seskupování ). písmena ve slovech ).

Význam

V jednoduchých případech jsou pojmy „lexém“ a „token“ totožné, ale složitější tokenizéry navíc klasifikují tokeny do různých typů („identifikátor“, „operátor“, „součást řeči“ atd.). Lexikální analýza se používá v kompilátorech a interpretech zdrojového kódu pro programovací jazyky a v různých analyzátorech slov v přirozeném jazyce .

Lexikální analýza se zpravidla provádí z hlediska určitého formálního jazyka nebo množiny jazyků. Jazyk, respektive jeho gramatika , definuje určitý soubor lexémů, se kterými se lze setkat na vstupu procesu.

Je tradiční organizovat proces lexikální analýzy tak, že vstupní sekvenci znaků považujeme za proud znaků. S touto organizací proces samostatně řídí výběr jednotlivých postav ze vstupního proudu.

Rozpoznávání lexémů v kontextu gramatiky se obvykle provádí jejich identifikací (nebo klasifikací) podle identifikátorů (nebo tříd) tokenů definovaných gramatikou jazyka. V tomto případě se za speciální chybový token obvykle považuje jakákoli posloupnost znaků ve vstupním proudu (tokenu), kterou podle gramatiky nelze identifikovat jako jazykový token.

Každý token může být reprezentován jako struktura obsahující identifikátor tokenu (nebo identifikátor třídy tokenu) a v případě potřeby sekvenci znaků tokenu extrahovaných ze vstupního toku (řetězec, číslo atd.).

Účelem takové konverze je obvykle připravit vstupní sekvenci pro jiný program, jako je analyzátor gramatiky , a ušetřit ji od definování lexikálních detailů v bezkontextové gramatice (což by gramatiku zkomplikovalo).

Příklad

Například zdrojový kód následujícího programového řádku

čistá_budoucnost_jmění = ( aktiva - pasiva );

lze převést na následující proud tokenů:

NAME „net_worth_future“ ÚKOL OPENING_BRACKET NAME „aktiva“ MÍNUS NAME „závazky“ ZAVÍRACÍ_BRACKET STŘEDNÍK

Lexikální analyzátor

Lexikální analyzátor ( anglicky  lexical analyzer , lexer ; nebo "tokenizer" od tokenizer ) je program nebo část programu, který provádí lexikální analýzu. Lexikální analyzátor obvykle pracuje ve dvou fázích: skenování a vyhodnocování .

V první fázi, skenování, je lexikální analyzátor obvykle implementován jako stavový automat definovaný regulárními výrazy . Kóduje informace o možných sekvencích znaků, které se mohou v tokenech vyskytovat. Například token "celé číslo" může obsahovat libovolnou sekvenci desetinných číslic. V mnoha případech lze první znak bez mezery použít k určení typu dalšího tokenu, poté jsou vstupní znaky zpracovávány jeden po druhém, dokud nenarazí na znak, který není v sadě platných znaků pro tento token. V některých jazycích jsou pravidla pro analýzu tokenů poněkud složitější a vyžadují zpětné sledování v čitelném pořadí.

Takto získaný token obsahuje nezpracovaný zdrojový text (řetězec). Aby bylo možné získat token s hodnotou odpovídající typu (například celé číslo nebo zlomkové číslo), je tento řetězec vyhodnocen - prochází znaky a vypočítává se hodnota.

Na vstup analyzátoru je předán token s typem a odpovídajícím způsobem připravenou hodnotou .

Generátory lexikálních analyzátorů

  • lex  - Unixový standardní generátor
  • Flex  je alternativou klasického nástroje lex
  • re2c - generuje optimalizované netabulkové lexery, zaměřené na práci s C, C ++, Go, Rust
  • JLex  - Generátor v Javě
  • ANTLR
  • lexertl

Viz také

Literatura

  • Alfred W. Aho , Monica S. Lam , Ravi Seti , Jeffrey D. Ullman . Kompilátory: Principy, techniky a nástroje = Kompilátory: Principy, techniky a nástroje. - 2. vyd. - M .: Williams , 2008. - ISBN 978-5-8459-1349-4 .
  • Robin Hunter . Základní koncepty kompilátorů = The Essence of Compilers. - M .: "Williams" , 2002. - S. 256. - ISBN 5-8459-0360-2 .

Odkazy