I datalogi er leksikalsk analyse ("tokenization", fra engelsk tokenizing ) processen med analytisk at analysere en inputsekvens af tegn i genkendte grupper - lexemes - for at opnå identificerede sekvenser ved output, kaldet " tokens " (svarende til gruppering bogstaver i ord ).
I simple tilfælde er begreberne "lexeme" og "token" identiske, men mere komplekse tokenizere klassificerer desuden tokens i forskellige typer ("identifikator", "operatør", "ordedel" osv.). Leksikalsk analyse bruges i compilere og kildekodefortolkere til programmeringssprog og i forskellige naturligt sproglige ordparsere .
Som regel udføres leksikalsk analyse i form af et bestemt formelt sprog eller sæt af sprog. Sproget, eller rettere dets grammatik , definerer et bestemt sæt af leksemer, der kan stødes på ved input af processen.
Det er traditionelt at organisere processen med leksikalsk analyse ved at betragte inputsekvensen af tegn som en strøm af tegn. Med denne organisation styrer processen selvstændigt udvælgelsen af individuelle karakterer fra inputstrømmen.
Genkendelse af leksemer i sammenhæng med en grammatik sker normalt ved at identificere (eller klassificere) dem i henhold til identifikatorerne (eller klasserne) af tokens defineret af sprogets grammatik. I dette tilfælde betragtes en hvilken som helst sekvens af tegn i inputstrømmen (token), som ifølge grammatikken ikke kan identificeres som et sprogtoken, normalt som et særligt fejltoken.
Hvert token kan repræsenteres som en struktur, der indeholder en token-identifikator (eller en token-klasseidentifikator) og, om nødvendigt, en sekvens af tegn fra tokenet , der er udtrukket fra inputstrømmen (streng, tal osv.).
Formålet med en sådan konvertering er normalt at forberede en inputsekvens til et andet program, såsom en grammatikparser , og skåne den for at definere leksikalske detaljer i en kontekstfri grammatik (hvilket ville gøre grammatikken mere kompliceret).
For eksempel kildekoden for den følgende programlinje
net_worth_future = ( aktiver - passiver );kan konverteres til følgende token-stream:
NAVN "net_worth_future" OPGAVE OPENING_BRACKET NAVN "aktiver" MINUS NAVN "forpligtelser" CLOSING_BRACKET SEMIKOLONEn leksikalsk analysator ( eng. lexical analyzer , lexer ; eller "tokenizer" af tokenizer ) er et program eller en del af et program, der udfører leksikalsk analyse. En leksikalsk analysator fungerer normalt i to faser: scanning og evaluering .
I den første fase, scanning, implementeres den leksikalske analysator normalt som en tilstandsmaskine , defineret af regulære udtryk . Den koder information om mulige sekvenser af tegn, der kan forekomme i tokens. For eksempel kan et "heltal"-token indeholde en hvilken som helst sekvens af decimalcifre. I mange tilfælde kan det første ikke-mellemrumstegn bruges til at bestemme typen af det næste token, hvorefter inputtegnene behandles én efter én, indtil der stødes på et tegn, der ikke er i sættet af gyldige tegn for det pågældende token. På nogle sprog er reglerne for parsing af tokens noget mere komplekse og kræver backtracking i læsbar rækkefølge.
Det således opnåede token indeholder den rå kildetekst (streng). For at få et token med en værdi, der svarer til typen (for eksempel et heltal eller et brøktal), evalueres denne streng - passerer gennem tegnene og beregner værdien.
Et token med en type og en tilsvarende forberedt værdi sendes til parserens input .