Leksikalsk analyse

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 2. april 2022; checks kræver 10 redigeringer .

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

Betydning

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

Eksempel

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 SEMIKOLON

Leksikalsk analysator

En 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 .

Leksikalske analysatorgeneratorer

  • lex  - Unix standard generator
  • Flex  er et alternativ til det klassiske lex -værktøj
  • re2c - genererer optimerede ikke-table lexers, fokuseret på at arbejde med C, C ++, Go, Rust
  • JLex  - Generator i Java
  • ANTLR
  • lexertl

Se også

Litteratur

  • Alfred W. Aho , Monica S. Lam , Ravi Seti , Jeffrey D. Ullman . Compilers: Principles, Techniques and Tools = Compilers: Principles, Techniques and Tools. - 2. udg. - M .: Williams , 2008. - ISBN 978-5-8459-1349-4 .
  • Robin Hunter . Grundlæggende compilerkoncepter = Essensen af ​​compilere. - M . : "Williams" , 2002. - S. 256. - ISBN 5-8459-0360-2 .

Links