Inom datavetenskap är lexikal analys ("tokenization", från engelska tokenizing ) processen att analytiskt analysera en indatasekvens av tecken till igenkända grupper - lexem - för att erhålla identifierade sekvenser vid utgången, kallade " tokens " (liknande gruppering bokstäver i ord ).
I enkla fall är begreppen "lexeme" och "token" identiska, men mer komplexa tokenizers klassificerar dessutom tokens i olika typer ("identifierare", "operator", "led of speech", etc.). Lexikal analys används i kompilatorer och källkodstolkar för programmeringsspråk och i olika naturliga ordtolkare .
Som regel utförs lexikal analys i termer av ett visst formellt språk eller uppsättning språk. Språket, eller snarare dess grammatik , definierar en viss uppsättning lexem som kan påträffas vid ingången av processen.
Det är traditionellt att organisera processen för lexikal analys genom att betrakta inmatningssekvensen av tecken som en ström av tecken. Med denna organisation hanterar processen självständigt urvalet av individuella karaktärer från inmatningsströmmen.
Igenkänning av lexem i samband med en grammatik görs vanligtvis genom att identifiera (eller klassificera) dem enligt identifierarna (eller klasserna) av tokens som definieras av språkets grammatik. I det här fallet betraktas vanligtvis vilken sekvens av tecken som helst i inmatningsströmmen (token), som enligt grammatiken inte kan identifieras som en språktoken, som en speciell feltoken.
Varje token kan representeras som en struktur som innehåller en token-identifierare (eller en token-klassidentifierare) och, om nödvändigt, en sekvens av tecken från token som extraheras från inmatningsströmmen (sträng, nummer, etc.).
Syftet med en sådan omvandling är vanligtvis att förbereda en inmatningssekvens för ett annat program, till exempel en grammatikparser , och skona den från att definiera lexikaliska detaljer i en kontextfri grammatik (vilket skulle göra grammatiken mer komplicerad).
Till exempel källkoden för följande programrad
net_worth_future = ( tillgångar - skulder );kan konverteras till följande tokenström:
NAMN "net_worth_future" UPPDRAG OPENING_BRACKET NAME "tillgångar" MINUS NAME "skulder" CLOSING_BRACKET SEMIKOLONEn lexikalanalysator ( eng. lexical analyzer , lexer ; eller "tokenizer" av tokenizer ) är ett program eller del av ett program som utför lexikalanalys. En lexikalanalysator fungerar vanligtvis i två steg: skanning och utvärdering .
I det första steget, skanning, implementeras den lexikaliska analysatorn vanligtvis som en tillståndsmaskin , definierad av reguljära uttryck . Den kodar information om möjliga teckensekvenser som kan förekomma i tokens. Till exempel kan en "heltals"-token innehålla vilken sekvens av decimalsiffror som helst. I många fall kan det första tecknet utan blanksteg användas för att bestämma typen av nästa token, varefter inmatningstecknen bearbetas ett efter ett tills ett tecken påträffas som inte finns i uppsättningen av giltiga tecken för den token. På vissa språk är reglerna för att analysera tokens något mer komplexa och kräver backtracking i läsbar sekvens.
Den sålunda erhållna token innehåller den råa källtexten (strängen). För att få en token med ett värde som motsvarar typen (till exempel ett heltal eller bråktal) utvärderas denna sträng - passerar genom tecknen och beräknar värdet.
En token med en typ och ett motsvarande förberett värde skickas till ingången för parsern .