Vad är Lexikalisk analys?
LEXIKALANALYS är den allra första fasen i kompilatordesignen. En Lexer tar den modifierade källkoden som är skriven i form av meningar. Med andra ord hjälper det dig att konvertera en sekvens av tecken till en sekvens av tokens. Den lexikala analysatorn delar upp denna syntax i en serie tokens. Det tar bort extra utrymme eller kommentarer skrivna i källkoden.
Program som utför lexikalanalys kallas lexical analyzers or lexers. En lexer innehåller tokenizer eller scanner. Om lexikalisk analysator upptäcker att token är ogiltig, genererar det ett fel. Det läser teckenströmmar från källkoden, söker efter legala tokens och skickar data till syntaxanalysatorn när det krävs.
Exempel
How Pleasant Is The Weather?
Se detta exempel; Här kan vi lätt känna igen att det finns fem ord How Pleasant, The, Weather, Is. Detta är väldigt naturligt för oss eftersom vi kan känna igen separatorerna, tomrummen och skiljetecken.
HowPl easantIs Th ewe ather?
Kolla nu detta exempel, vi kan också läsa detta. Det tar dock lite tid eftersom separatorer placeras i udda platser. Det är inte något som kommer direkt till dig.
I den här handledningen lär du dig
- Grundläggande terminologier:
- Lexical Analyzer Architecture: Hur tokens känns igen
- Roller för den Lexical analysatorn
- Lexikala fel
- Felåterställning i Lexical Analyzer
- Lexical Analyzer vs. Parser
- Varför separera Lexical och Parser?
- Fördelar med Lexikalisk analys
- Nackdelen med Lexikalisk analys
Grundläggande terminologier
Vad är ett lexeme?
Ett lexeme är en sekvens av tecken som ingår i källprogrammet enligt matchande mönster för en token. Det är inget annat än en instans av en token.
Vad är en symbol?
Token är en sekvens av tecken som representerar en informationsenhet i källprogrammet.
Vad är mönster?
Ett mönster är en beskrivning som används av symbolen. När det gäller ett nyckelord som används som token, är mönstret en sekvens av tecken.
Lexical Analyzer Architecture: Hur tokens känns igen
Huvuduppgiften för lexikalisk analys är att läsa inmatade tecken i koden och producera tokens.
Lexikalisk analysator skannar hela programmets källkod. Det identifierar varje token en efter en. Skannrar implementeras vanligtvis för att producera tokens endast på begäran av en parser. Så här fungerar det-
- "Get next token" är ett kommando som skickas från parsern till lexical analyzer.
- Vid mottagandet av detta kommando skannar den lexikala analysatorn ingången tills den hittar nästa token.
- Den returnerar token till Parser.
Lexical Analyzer hoppar över mellanslag och kommentarer när de skapar dessa tokens. Om det finns något fel kommer Lexical analysator att korrelera det felet med källfilen och radnumret.
Roller för den Lexical analysatorn
Lexical analyzer utför nedan angivna uppgifter:
- Hjälper till att identifiera token i symboltabellen
- Tar bort vita mellanslag och kommentarer från källprogrammet
- Korrelerar felmeddelanden med källprogrammet
- Hjälper dig att utvidga makron om det finns i källprogrammet
- Läs inmatade tecken från källprogrammet
Exempel på Lexikalisk analys, token, icke-token
Tänk på följande kod som matas till Lexical Analyzer
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Exempel på poletter skapade
Lexeme | Tecken |
int | Nyckelord |
maximal | Identifierare |
( | Operatör |
int | Nyckelord |
x | Identifierare |
, | Operatör |
int | Nyckelord |
Y | Identifierare |
) | Operatör |
{ | Operatör |
Om | Nyckelord |
Exempel på nontokens
Typ | Exempel |
Kommentar | // Detta kommer att jämföra två nummer |
Förprocessordirektiv | #include |
Förprocessordirektiv | #define NUMS 8,9 |
Makro | NUMS |
Mellanslag | / n / b / t |
Lexikala fel
En teckensekvens som inte är möjlig att skanna till något giltigt token är ett lexiskt fel. Viktiga fakta om lexikalfelet:
- Lexikala fel är inte så vanliga, men det bör hanteras av en skanner
- Felstavning av identifierare, operatörer, nyckelord betraktas som lexiska fel
- I allmänhet orsakas ett lexiskt fel av uppkomsten av någon olaglig karaktär, mestadels i början av en token.
Felåterställning i Lexical Analyzer
Här är några vanligaste felåterställningstekniker:
- Tar bort ett tecken från den återstående inmatningen
- I panikläget ignoreras alltid de successiva karaktärerna tills vi når en välformad token
- Genom att infoga det saknade tecknet i den återstående ingången
- Ersätt en karaktär med en annan karaktär
- Transponera två serietecken
Lexical Analyzer vs. Parser
Lexical Analyzer | Parser |
Skanna inmatningsprogram | Utför syntaxanalys |
Identifiera poletter | Skapa en abstrakt representation av koden |
Infoga tokens i symboltabellen | Uppdatera symboltabellposter |
Det genererar lexikala fel | Det genererar ett parse-träd av källkoden |
Varför separera Lexical och Parser?
- Enkelhet i design: Det underlättar processen för lexikalanalys och syntaxanalys genom att eliminera oönskade tokens
- För att förbättra kompilatoreffektiviteten: Hjälper dig att förbättra kompilatoreffektiviteten
- Specialisering: specialiserade tekniker kan användas för att förbättra den lexikala analysprocessen
- Bärbarhet: endast skannern behöver kommunicera med omvärlden
- Högre portabilitet: input-enhetsspecifika särdrag begränsade till lexer
Fördelar med Lexikalisk analys
- Lexikalisk analysatormetod används av program som kompilatorer som kan använda analyserad data från en programmerares kod för att skapa en kompilerad binär körbar kod
- Den används av webbläsare för att formatera och visa en webbsida med hjälp av analyserade data från JavsScript, HTML, CSS
- En separat lexikalisk analysator hjälper dig att konstruera en specialiserad och potentiellt effektivare processor för uppgiften
Nackdelen med Lexikalisk analys
- Du måste spendera mycket tid på att läsa källprogrammet och partitionera det i form av tokens
- Vissa reguljära uttryck är ganska svåra att förstå jämfört med PEG- eller EBNF-regler
- Mer ansträngning behövs för att utveckla och felsöka lexern och dess tokenbeskrivningar
- Ytterligare runtime-omkostnader krävs för att generera lexertabellerna och konstruera tokens
Sammanfattning
- Lexikalisk analys är den allra första fasen i kompileringsdesignen
- Ett lexeme är en sekvens av tecken som ingår i källprogrammet enligt matchande mönster för en token
- Lexikalisk analysator är implementerad för att skanna hela källkoden för programmet
- Lexikalisk analysator hjälper till att identifiera token i symboltabellen
- En teckensekvens som inte är möjlig att skanna till något giltigt token är ett lexiskt fel
- Tar bort ett tecken från återstående inmatning är användbart Felåterställningsmetod
- Lexical Analyzer skannar ingångsprogrammet medan parser utför syntaxanalys
- Det underlättar processen för lexikalanalys och syntaxanalysen genom att eliminera oönskade tokens
- Lexical analysator används av webbläsare för att formatera och visa en webbsida med hjälp av analyserad data från JavsScript, HTML, CSS
- Den största nackdelen med att använda Lexical analysator är att den behöver ytterligare runtime-omkostnader krävs för att generera lexer-tabellerna och konstruera tokens