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 ).
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é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Ő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 .