Hva er Lexical Analysis?
LEXICAL ANALYSIS er den aller første fasen i kompileringsdesignet. En Lexer tar den modifiserte kildekoden som er skrevet i form av setninger. Med andre ord hjelper det deg å konvertere en sekvens av tegn til en sekvens av tokens. Den leksikale analysatoren deler denne syntaksen i en serie tokens. Det fjerner ekstra plass eller kommentar skrevet i kildekoden.
Programmer som utfører leksikalanalyse kalles leksikale analysatorer eller leksikere. En lexer inneholder tokenizer eller skanner. Hvis den leksikale analysatoren oppdager at token er ugyldig, genererer det en feil. Den leser tegnstrømmer fra kildekoden, sjekker for lovlige tokens, og overfører dataene til syntaksanalysatoren når den krever det.
Eksempel
How Pleasant Is The Weather?
Se dette eksemplet; Her kan vi lett gjenkjenne at det er fem ord How Pleasant, The, Weather, Is. Dette er veldig naturlig for oss, da vi kan gjenkjenne skilletegnene, blankene og tegnsettingstegnet.
HowPl easantIs Th ewe ather?
Nå, sjekk dette eksemplet, vi kan også lese dette. Det vil imidlertid ta litt tid fordi skillelinjer plasseres i Odd Places. Det er ikke noe som kommer til deg umiddelbart.
I denne veiledningen vil du lære
- Grunnleggende terminologier:
- Lexical Analyzer Architecture: Hvordan tokens blir gjenkjent
- Rollene til den Lexical analysatoren
- Lexikale feil
- Feilgjenoppretting i Lexical Analyzer
- Lexical Analyzer vs. Parser
- Hvorfor skille Lexical og Parser?
- Fordeler med leksikalanalyse
- Ulempen med leksikalanalyse
Grunnleggende terminologier
Hva er et lexeme?
Et lexeme er en sekvens av tegn som er inkludert i kildeprogrammet i henhold til det matchende mønsteret til et token. Det er ingenting annet enn en forekomst av et token.
Hva er et symbol?
Token er en sekvens av tegn som representerer en informasjonsenhet i kildeprogrammet.
Hva er mønster?
Et mønster er en beskrivelse som brukes av tokenet. Når det gjelder et nøkkelord som brukes som et token, er mønsteret en sekvens av tegn.
Lexical Analyzer Architecture: Hvordan tokens blir gjenkjent
Hovedoppgaven med leksikalanalyse er å lese inndata i koden og produsere tokens.
Lexical analysator skanner hele kildekoden til programmet. Det identifiserer hvert token en etter en. Skannere implementeres vanligvis for å produsere tokens bare når en parser ber om det. Slik fungerer dette -
- "Get next token" er en kommando som sendes fra parseren til den leksikale analysatoren.
- Ved mottak av denne kommandoen skanner den leksikale analysatoren inngangen til den finner neste token.
- Det returnerer token til Parser.
Lexical Analyzer hopper over mellomrom og kommentarer mens du lager disse tokens. Hvis det er noen feil, vil Lexical analysator korrelere den feilen med kildefilen og linjenummeret.
Rollene til den Lexical analysatoren
Lexical analyzer utfører nedenfor gitte oppgaver:
- Hjelper med å identifisere token i symboltabellen
- Fjerner hvite mellomrom og kommentarer fra kildeprogrammet
- Korrelerer feilmeldinger med kildeprogrammet
- Hjelper deg med å utvide makroene hvis den finnes i kildeprogrammet
- Les inndata fra kildeprogrammet
Eksempel på leksikalanalyse, poletter, ikke-poletter
Vurder følgende kode som blir matet til Lexical Analyzer
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Eksempler på poletter opprettet
Lexeme | Token |
int | Nøkkelord |
maksimum | Identifikator |
( | Operatør |
int | Nøkkelord |
x | Identifikator |
, | Operatør |
int | Nøkkelord |
Y | Identifikator |
) | Operatør |
{ | Operatør |
Hvis | Nøkkelord |
Eksempler på nontokens
Type | Eksempler |
Kommentar | // Dette vil sammenligne 2 tall |
Forprosessor-direktiv | # inkluderer |
Forprosessor-direktiv | #define NUMS 8,9 |
Makro | NUMS |
Mellomrom | / n / b / t |
Lexikale feil
En tegnsekvens som ikke er mulig å skanne inn i noe gyldig token, er en leksikal feil. Viktige fakta om den leksikale feilen:
- Lexikale feil er ikke veldig vanlige, men det skal administreres av en skanner
- Feilstaving av identifikatorer, operatører, nøkkelord regnes som leksikale feil
- Generelt er en leksikalfeil forårsaket av utseendet til en eller annen ulovlig karakter, hovedsakelig i begynnelsen av et token.
Feilgjenoppretting i Lexical Analyzer
Her er noen få vanligste feilgjenopprettingsteknikker:
- Fjerner ett tegn fra den gjenværende inngangen
- I panikkmodus blir de påfølgende tegnene alltid ignorert til vi når et velformet token
- Ved å sette inn det manglende tegnet i den gjenværende inngangen
- Bytt ut et tegn med et annet tegn
- Transponere to serietegn
Lexical Analyzer vs. Parser
Lexical Analyzer | Parser |
Skann inndataprogram | Utfør syntaksanalyse |
Identifiser tokens | Lag en abstrakt representasjon av koden |
Sett inn tokens i symboltabellen | Oppdater symboltabelloppføringer |
Det genererer leksikale feil | Det genererer et parse-tre av kildekoden |
Hvorfor skille Lexical og Parser?
- Enkelheten i design: Det letter prosessen med leksikalanalyse og syntaksanalyse ved å eliminere uønskede tokens
- For å forbedre kompilatoreffektiviteten: Hjelper deg med å forbedre kompilatoreffektiviteten
- Spesialisering: spesialiserte teknikker kan brukes for å forbedre den leksikale analyseprosessen
- Bærbarhet: bare skanneren krever å kommunisere med omverdenen
- Høyere bærbarhet: spesifikke spesifikasjoner for inngangsenheter begrenset til lexer
Fordeler med leksikalanalyse
- Lexical analysator metode brukes av programmer som kompilatorer som kan bruke de analyserte dataene fra programmererens kode for å lage en kompilert binær kjørbar kode
- Den brukes av nettlesere til å formatere og vise en webside ved hjelp av analyserte data fra JavsScript, HTML, CSS
- En separat leksikalanalysator hjelper deg med å konstruere en spesialisert og potensielt mer effektiv prosessor for oppgaven
Ulempen med leksikalanalyse
- Du må bruke betydelig tid på å lese kildeprogrammet og dele det i form av tokens
- Noen vanlige uttrykk er ganske vanskelige å forstå sammenlignet med PEG- eller EBNF-regler
- Det kreves mer innsats for å utvikle og feilsøke lexeren og dens tokenbeskrivelser
- Ytterligere runtime-overhead er nødvendig for å generere lexer-tabellene og konstruere tokens
Sammendrag
- Leksikalanalyse er den aller første fasen i kompileringsdesignet
- Et lexeme er en sekvens av tegn som er inkludert i kildeprogrammet i henhold til det matchende mønsteret til et token
- Lexical analyzer er implementert for å skanne hele kildekoden til programmet
- Lexical analysator hjelper deg med å identifisere token i symboltabellen
- En tegnsekvens som ikke er mulig å skanne inn i noe gyldig token, er en leksikal feil
- Fjerner ett tegn fra gjenværende inndata er nyttig Feilgjenopprettingsmetode
- Lexical Analyzer skanner inngangsprogrammet mens parser utfører syntaksanalyse
- Det letter prosessen med leksikalanalyse og syntaksanalyse ved å eliminere uønskede tokens
- Lexical analysator brukes av nettlesere til å formatere og vise en webside ved hjelp av analyserte data fra JavsScript, HTML, CSS
- Den største ulempen ved å bruke Lexical analysator er at det er behov for ytterligere kjøretidskostnader for å generere lexer-tabellene og konstruere tokens