Kaj je leksikalna analiza?
LEKSIČNA ANALIZA je prva faza oblikovanja prevajalnika. Lexer vzame spremenjeno izvorno kodo, ki je napisana v obliki stavkov. Z drugimi besedami, pomaga vam pretvoriti zaporedje znakov v zaporedje žetonov. Leksični analizator to sintakso razdeli na vrsto žetonov. Odstrani odvečen prostor ali komentar, zapisan v izvorni kodi.
Programi, ki izvajajo leksikalno analizo, se imenujejo leksikalni analizatorji ali lexers. Lexer vsebuje tokenizer ali optični bralnik. Če leksikalni analizator zazna, da žeton ni veljaven, ustvari napako. Prebere tokove znakov iz izvorne kode, preveri, ali obstajajo zakoniti žetoni, in podatke posreduje analizatorju skladnje, ko to zahteva.
Primer
How Pleasant Is The Weather?
Glej ta primer; Tu lahko zlahka prepoznamo, da obstaja pet besed Kako prijetno je, vreme je. To je za nas zelo naravno, saj lahko prepoznamo ločila, praznine in ločila.
HowPl easantIs Th ewe ather?
Zdaj, preverite ta primer, lahko tudi to preberemo. Vendar bo trajalo nekaj časa, ker so ločila postavljena na Neparna mesta. To ni nekaj, kar pride k vam takoj.
V tej vadnici boste izvedeli
- Osnovne terminologije:
- Arhitektura leksikalnega analizatorja: prepoznavanje žetonov
- Vloge leksikalnega analizatorja
- Leksikalne napake
- Obnavljanje napak v leksikalnem analizatorju
- Leksikalni analizator proti Parserju
- Zakaj ločiti Lexical in Parser?
- Prednosti leksikalne analize
- Pomanjkljivost leksikalne analize
Osnovne terminologije
Kaj je leksem?
Leksem je zaporedje znakov, ki so vključeni v izvorni program v skladu z vzorcem ujemanja žetona. To ni nič drugega kot primerek žetona.
Kaj je žeton?
Žeton je zaporedje znakov, ki predstavlja enoto informacij v izvornem programu.
Kaj je vzorec?
Vzorec je opis, ki ga uporablja žeton. V primeru ključne besede, ki se uporablja kot žeton, je vzorec zaporedje znakov.
Arhitektura leksikalnega analizatorja: prepoznavanje žetonov
Glavna naloga leksikalne analize je branje vhodnih znakov v kodi in izdelava žetonov.
Leksikalni analizator skenira celotno izvorno kodo programa. Vsak žeton identificira enega za drugim. Optični bralniki so običajno nameščeni za izdelavo žetonov samo na zahtevo razčlenjevalnika. Tukaj je, kako to deluje -
- "Get next token" je ukaz, ki ga parser pošlje leksikalnemu analizatorju.
- Po prejemu tega ukaza leksikalni analizator pregleda vhod, dokler ne najde naslednjega žetona.
- Vrne žeton Parserju.
Lexical Analyzer med ustvarjanjem teh žetonov preskoči presledke in komentarje. Če je prisotna kakšna napaka, bo Lexical Analyzer to napako povezal z izvorno datoteko in številko vrstice.
Vloge leksikalnega analizatorja
Leksikalni analizator izvaja naslednje naloge:
- Pomaga pri prepoznavanju žetona v tabeli simbolov
- Odstrani presledke in komentarje iz izvornega programa
- Poveže sporočila o napakah z izvornim programom
- Pomaga vam pri razširitvi makrov, če jih najdete v izvornem programu
- Preberite vhodne znake iz izvornega programa
Primer leksikalne analize, žetoni, ne-žetoni
Upoštevajte naslednjo kodo, ki se dovaja v Lexical Analyzer
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Primeri ustvarjenih žetonov
Leksema | Žeton |
int | Ključna beseda |
največ | Identifikator |
( | Operater |
int | Ključna beseda |
x | Identifikator |
, | Operater |
int | Ključna beseda |
Y. | Identifikator |
) | Operater |
{ | Operater |
Če | Ključna beseda |
Primeri Nontokenov
Tip | Primeri |
Komentiraj | // To bo primerjalo dve številki |
Direktiva predprocesorja | #include |
Direktiva predprocesorja | #define NUMS 8,9 |
Makro | ŠTEVIL |
Presledek | / n / b / t |
Leksikalne napake
Zaporedje znakov, ki ga ni mogoče pregledati v noben veljaven žeton, je leksikalna napaka. Pomembna dejstva o besedni napaki:
- Leksikalne napake niso zelo pogoste, vendar bi jih moral upravljati skener
- Napačno črkovanje identifikatorjev, operatorjev, ključne besede se šteje za besedne napake
- Običajno leksikalno napako povzroči videz nekega nezakonitega znaka, večinoma na začetku žetona.
Obnavljanje napak v leksikalnem analizatorju
Tu je nekaj najpogostejših tehnik obnavljanja napak:
- Odstrani en znak iz preostalega vnosa
- V načinu panike se zaporedni znaki vedno prezrejo, dokler ne pridemo do dobro oblikovanega žetona
- Z vstavitvijo manjkajočega znaka v preostali vnos
- Znak zamenjajte z drugim
- Prenesite dva zaporedna znaka
Leksikalni analizator proti Parserju
Leksikalni analizator | Razčlenjevalnik |
Scan Input program | Izvedite sintaksno analizo |
Prepoznajte žetone | Ustvarite abstraktno predstavitev kode |
Vstavite žetone v tabelo simbolov | Posodobi vnose v tabelo simbolov |
Ustvarja leksikalne napake | Ustvari drevo razčlenitve izvorne kode |
Zakaj ločiti Lexical in Parser?
- Enostavnost oblikovanja: olajša postopek leksikalne analize in sintakse z odstranitvijo neželenih žetonov
- Za izboljšanje učinkovitosti prevajalnika: pomaga vam izboljšati učinkovitost prevajalnika
- Specializacija: za izboljšanje procesa leksikalne analize je mogoče uporabiti posebne tehnike
- Prenosljivost: samo optični bralnik potrebuje komunikacijo z zunanjim svetom
- Večja prenosljivost: posebnosti vhodne naprave, omejene na lexer
Prednosti leksikalne analize
- Metodo leksikalnega analizatorja uporabljajo programi, kot so prevajalniki, ki lahko uporabijo razčlenjene podatke iz programerjeve kode za ustvarjanje prevedene binarne izvršljive kode
- Spletni brskalniki ga uporabljajo za formatiranje in prikaz spletne strani s pomočjo razčlenjenih podatkov iz JavsScript, HTML, CSS
- Ločen leksikalni analizator vam pomaga zgraditi specializiran in potencialno učinkovitejši procesor za nalogo
Pomanjkljivost leksikalne analize
- Precej časa morate porabiti za branje izvornega programa in njegovo razdelitev v obliki žetonov
- Nekatere regularne izraze je precej težko razumeti v primerjavi s pravili PEG ali EBNF
- Potrebno je več truda za razvoj in odpravljanje napak lexerja in njegovih opisov žetonov
- Za ustvarjanje lexer tabel in konstruiranje žetonov so potrebni dodatni režijski stroški
Povzetek
- Leksikalna analiza je prva faza oblikovanja prevajalnika
- Leksem je zaporedje znakov, ki so vključeni v izvorni program v skladu z vzorcem ujemanja žetona
- Leksikalni analizator je vgrajen za skeniranje celotne izvorne kode programa
- Leksikalni analizator pomaga prepoznati žeton v tabeli simbolov
- Zaporedje znakov, ki ga ni mogoče pregledati v noben veljaven žeton, je leksikalna napaka
- Odstranjevanje enega znaka iz preostalega vnosa je koristno Način obnovitve po napaki
- Lexical Analyzer skenira vhodni program, medtem ko razčlenjevalnik izvaja sintaksno analizo
- Olajša postopek leksikalne analize in analize skladnje z odpravo neželenih žetonov
- Leksični analizator uporabljajo spletni brskalniki za formatiranje in prikaz spletne strani s pomočjo razčlenjenih podatkov iz JavsScript, HTML, CSS
- Največja pomanjkljivost uporabe Lexical analizatorja je, da potrebuje dodatne režijske stroške, potrebne za generiranje lexer tabel in konstruiranje žetonov