Lexikai elemzés

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2022. április 2-án felülvizsgált verziótól ; az ellenőrzésekhez 10 szerkesztés szükséges .

A számítástechnikában a lexikális elemzés („tokenization”, az angol  tokenizálásból ) az a folyamat , amelynek során analitikusan elemezzük a bemeneti karaktersorozatot felismert csoportokba  – lexémákba – annak érdekében, hogy a kimeneten azonosított szekvenciákat kapjunk, úgynevezett „ tokeneket ” (hasonlóan a csoportosításhoz ). betűk a szavakban ).

Jelentése

Egyszerű esetekben a "lexéma" és a "token" fogalma megegyezik, de az összetettebb tokenizátorok emellett különböző típusokba sorolják a tokeneket ("azonosító", "operátor", "beszédrész" stb.). A lexikális elemzést fordítóprogramokban és programozási nyelvek forráskód - értelmezőiben , valamint különféle természetes nyelvi szóelemzőkben használják .

A lexikális elemzést általában egy bizonyos formális nyelv vagy nyelvkészlet alapján végzik. A nyelv, pontosabban a nyelvtana , meghatároz egy bizonyos lexémakészletet, amelyek a folyamat bemenetén találkozhatnak.

A lexikális elemzés folyamatát hagyományosan úgy szervezik meg, hogy a bemeneti karaktersorozatot karakterfolyamnak tekintik. Ezzel a szervezettel a folyamat önállóan kezeli az egyes karakterek kiválasztását a bemeneti adatfolyamból.

A nyelvtan kontextusában a lexémák felismerése általában úgy történik, hogy azonosítjuk (vagy osztályozzuk) a nyelv nyelvtana által meghatározott tokenek azonosítói (vagy osztályai) szerint. Ebben az esetben a bemeneti adatfolyamban (token) minden olyan karaktersorozat, amely a nyelvtan szerint nem azonosítható nyelvi tokenként, általában speciális hibajelzőnek minősül.

Minden token ábrázolható struktúraként, amely tartalmaz egy token azonosítót (vagy egy token osztály azonosítót), és ha szükséges, a bemeneti adatfolyamból kinyert token karaktersorozatát (karakterlánc, szám stb.).

Az ilyen átalakítás célja általában egy másik program, például egy nyelvtani elemző beviteli sorozatának előkészítése, és megkímélni azt attól, hogy egy kontextusmentes nyelvtanban lexikális részleteket definiáljon (ami bonyolultabbá tenné a nyelvtant).

Példa

Például a következő programsor forráskódja

nettó_érték_jövő = ( eszközök - kötelezettségek );

konvertálható a következő token folyammá:

NAME "nettó_érték_jövő" FELADAT OPENING_BRACKET NAME "eszközök" MÍNUSZ NAME "kötelezettségek" CLOSING_BRACKET PONTOSVESSZŐ

Lexikai elemző

A lexikális elemző ( angol. lexical  analizátor , lexer ; vagy "tokenizer" a tokenizátorból ) egy olyan program vagy programrész, amely lexikális elemzést végez. A lexikális elemző általában két szakaszban működik: szkennelés és kiértékelés .

Az első szakaszban, a letapogatásban, a lexikális elemzőt általában állapotgépként valósítják meg, reguláris kifejezésekkel definiálva . Információkat kódol a tokenekben előforduló lehetséges karaktersorozatokról. Például egy „egész” token bármilyen decimális számjegysorozatot tartalmazhat. Sok esetben az első nem szóköz karakter használható a következő token típusának meghatározására, ami után a bemeneti karakterek egyenként kerülnek feldolgozásra, amíg olyan karaktert nem találunk, amely nem szerepel az adott token érvényes karakterkészletében. Egyes nyelveken a tokenek elemzésére vonatkozó szabályok valamivel összetettebbek, és visszalépést igényelnek olvasható sorrendben.

Az így kapott token tartalmazza a nyers forrásszöveget (karakterláncot). A típusnak megfelelő értékű token (például egész vagy tört szám) beszerzéséhez ezt a karakterláncot kiértékeli - áthalad a karaktereken és kiszámítja az értéket.

Egy típussal és ennek megfelelően előkészített értékkel rendelkező token kerül átadásra az elemző bemenetére .

Lexikai elemző generátorok

  • lex  - Unix szabványos generátor
  • A Flex a klasszikus lex segédprogram  alternatívája
  • re2c - optimalizált, nem táblázatos lexereket generál, amelyek a C, C ++, Go, Rust használatára összpontosítanak
  • JLex  - generátor Java nyelven
  • ANTLR
  • lexertl

Lásd még

Irodalom

  • Alfred W. Aho , Monica S. Lam , Ravi Seti , Jeffrey D. Ullman . Fordítók: alapelvek, technikák és eszközök = Compilers: Principles, Techniques and Tools. - 2. kiadás - M .: Williams , 2008. - ISBN 978-5-8459-1349-4 .
  • Robin Hunter . Alapvető fordítói fogalmak = A fordítók lényege. - M . : "Williams" , 2002. - S. 256. - ISBN 5-8459-0360-2 .

Linkek