Što je leksička analiza?
LEKSIČKA ANALIZA prva je faza u dizajniranju kompajlera. Lexer uzima izmijenjeni izvorni kod koji je napisan u obliku rečenica. Drugim riječima, pomaže vam pretvoriti slijed znakova u slijed tokena. Leksički analizator razbija ovu sintaksu u niz tokena. Uklanja svaki dodatni prostor ili komentar napisan u izvornom kodu.
Programi koji izvode leksičku analizu nazivaju se leksički analizatori ili lekseri. Lexer sadrži tokenizer ili skener. Ako leksički analizator otkrije da je token nevaljan, generira pogrešku. Čita tokove znakova iz izvornog koda, provjerava ima li legalnih tokena i prosljeđuje podatke analizatoru sintakse kad to zatraži.
Primjer
How Pleasant Is The Weather?
Pogledajte ovaj primjer; Ovdje možemo lako prepoznati da postoji pet riječi How Pleasant, The, Weather, Is. To je za nas vrlo prirodno jer možemo prepoznati separatore, praznine i interpunkcijski simbol.
HowPl easantIs Th ewe ather?
Sada, pogledajte ovaj primjer, možemo i ovo pročitati. Međutim, trebat će neko vrijeme jer se separatori stavljaju na Neparna mjesta. To nije nešto što vam dođe odmah.
U ovom ćete tutorijalu naučiti
- Osnovne terminologije:
- Arhitektura leksičkog analizatora: Kako se prepoznaju tokeni
- Uloge leksičkog analizatora
- Leksičke pogreške
- Oporavak pogreške u leksičkom analizatoru
- Leksički analizator protiv raščlanjivača
- Zašto razdvajati Lexical i Parser?
- Prednosti leksičke analize
- Nedostatak leksičke analize
Osnovne terminologije
Što je leksem?
Leksema je niz znakova koji su uključeni u izvorni program prema obrascu podudaranja tokena. To nije ništa drugo nego primjer žetona.
Što je token?
Token je niz znakova koji predstavlja jedinicu informacija u izvornom programu.
Što je obrazac?
Uzorak je opis koji koristi žeton. U slučaju ključne riječi koja se koristi kao token, uzorak je niz znakova.
Arhitektura leksičkog analizatora: Kako se prepoznaju tokeni
Glavni zadatak leksičke analize je čitanje ulaznih znakova u kodu i stvaranje žetona.
Leksički analizator skenira cijeli izvorni kod programa. Identificira svaki žeton jedan po jedan. Skeneri se obično implementiraju za proizvodnju tokena samo na zahtjev parsera. Evo kako ovo funkcionira-
- "Get next token" naredba je koja se iz parsera šalje u leksički analizator.
- Po primanju ove naredbe, leksički analizator skenira ulaz dok ne pronađe sljedeći token.
- Vraća token Parseru.
Lexical Analyzer preskače razmake i komentare tijekom stvaranja ovih tokena. Ako postoji bilo kakva pogreška, tada će Leksički analizator povezati tu pogrešku s izvornom datotekom i brojem retka.
Uloge leksičkog analizatora
Leksički analizator obavlja dolje zadate zadatke:
- Pomaže u identificiranju tokena u tablici simbola
- Uklanja razmake i komentare iz izvornog programa
- Povezuje poruke o pogreškama s izvornim programom
- Pomaže vam u proširivanju makronaredbi ako su pronađene u izvornom programu
- Pročitajte ulazne znakove iz izvornog programa
Primjer leksičke analize, tokeni, ne-tokeni
Razmotrite sljedeći kod koji se ubacuje u Lexical Analyzer
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Primjeri stvorenih žetona
Leksema | Znak |
int | Ključna riječ |
maksimum | Identifikator |
( | Operater |
int | Ključna riječ |
x | Identifikator |
, | Operater |
int | Ključna riječ |
Y | Identifikator |
) | Operater |
{ | Operater |
Ako | Ključna riječ |
Primjeri Nontokensa
Tip | Primjeri |
Komentar | // Ovo će usporediti 2 broja |
Direktiva o pretprocesoru | #include |
Direktiva o pretprocesoru | #define NUMS 8,9 |
Makro | BROJEVI |
Bijeli prostor | / n / b / t |
Leksičke pogreške
Slijed znakova koji nije moguće skenirati u bilo koji valjani token leksička je pogreška. Važne činjenice o leksičkoj pogrešci:
- Leksičke pogreške nisu vrlo česte, ali njima bi trebao upravljati skener
- Pogrešno pravopis identifikatora, operatora, ključne riječi smatra se leksičkom pogreškom
- Općenito, leksičku pogrešku uzrokuje pojava nekog ilegalnog lika, uglavnom na početku tokena.
Oporavak pogreške u leksičkom analizatoru
Evo nekoliko najčešćih tehnika oporavka pogrešaka:
- Uklanja jedan znak iz preostalog unosa
- U načinu panike, uzastopni se znakovi uvijek ignoriraju dok ne dođemo do dobro oblikovanog tokena
- Umetanjem znaka koji nedostaje u preostali ulaz
- Zamijenite lik drugim znakom
- Transponirajte dva serijska znaka
Leksički analizator protiv raščlanjivača
Leksički analizator | Raščlanjivač |
Program za unos skeniranja | Izvršite analizu sintakse |
Identificirajte žetone | Stvorite apstraktni prikaz koda |
Umetnite tokene u tablicu simbola | Ažuriranje unosa u tablici simbola |
Generira leksičke pogreške | Generira stablo raščlanjivanja izvornog koda |
Zašto razdvajati Lexical i Parser?
- Jednostavnost dizajna: olakšava proces leksičke analize i sintakse uklanjanjem neželjenih tokena
- Da biste poboljšali učinkovitost kompajlera: pomaže vam da poboljšate učinkovitost kompajlera
- Specijalizacija: specijalizirane tehnike mogu se primijeniti za poboljšanje procesa leksičke analize
- Prijenosnost: samo skener zahtijeva komunikaciju s vanjskim svijetom
- Veća prenosivost: posebnosti specifične za ulazni uređaj ograničene na lexer
Prednosti leksičke analize
- Metodu leksičkog analizatora koriste programi poput kompajlera koji mogu koristiti raščlanjene podatke iz programskog koda za stvaranje kompiliranog binarnog izvršnog koda
- Internet preglednici koriste ga za formatiranje i prikaz web stranice uz pomoć raščlanjenih podataka iz Javscripta, HTML-a, CSS-a
- Zasebni leksički analizator pomaže vam u izradi specijaliziranog i potencijalno učinkovitijeg procesora za taj zadatak
Nedostatak leksičke analize
- Trebate potrošiti značajno vrijeme čitajući izvorni program i razdijelivši ga u obliku tokena
- Neke je regularne izraze prilično teško razumjeti u usporedbi s pravilima PEG-a ili EBNF-a
- Potrebno je više napora za razvoj i otklanjanje pogrešaka u lexeru i opisima njegovih tokena
- Dodatni režijski troškovi potrebni su za generiranje lexer tablica i konstruiranje tokena
Sažetak
- Leksička analiza prva je faza u dizajniranju kompajlera
- Leksema je niz znakova koji su uključeni u izvorni program prema obrascu podudaranja tokena
- Leksički analizator implementiran je za skeniranje cjelokupnog izvornog koda programa
- Leksički analizator pomaže identificirati žeton u tablici simbola
- Slijed znakova koji nije moguće skenirati u bilo koji valjani token leksička je pogreška
- Uklanja jedan znak iz preostalog unosa korisno je Način oporavka od pogreške
- Lexical Analyzer skenira ulazni program dok parser vrši sintaksnu analizu
- Olakšava proces leksičke analize i analize sintakse uklanjanjem neželjenih tokena
- Leksički analizator koriste web preglednici za formatiranje i prikaz web stranice uz pomoć raščlanjenih podataka iz Javscripta, HTML-a, CSS-a
- Najveći nedostatak upotrebe leksičkog analizatora je taj što mu trebaju dodatni režijski troškovi za generiranje lexer tablica i konstruiranje tokena