Kas yra leksinė analizė?
LEKSINĖ ANALIZĖ yra pats pirmasis kompiliatoriaus projektavimo etapas. „Lexer“ imasi modifikuoto šaltinio kodo, kuris parašomas sakinių pavidalu. Kitaip tariant, tai padeda konvertuoti simbolių seką į žetonų seką. Leksinis analizatorius suskaido šią sintaksę į žetonų seriją. Tai pašalina bet kokią papildomą vietą ar komentarą, parašytą šaltinio kode.
Leksinę analizę atliekančios programos vadinamos leksikos analizatoriais arba leksikais. Lekseryje yra žymeklis arba skaitytuvas. Jei leksinis analizatorius nustato, kad prieigos raktas yra neteisingas, jis sukuria klaidą. Jis skaito simbolių srautus iš šaltinio kodo, tikrina, ar nėra teisėtų žetonų, ir, kai to reikalauja, duomenis perduoda sintaksės analizatoriui.
Pavyzdys
How Pleasant Is The Weather?
Žr. Šį pavyzdį; Čia galime lengvai atpažinti, kad yra penki žodžiai „Kaip malonu, oras“. Tai mums labai natūralu, nes galime atpažinti skyriklius, ruošinius ir skyrybos simbolį.
HowPl easantIs Th ewe ather?
Dabar patikrinkite šį pavyzdį, mes taip pat galime tai perskaityti. Tačiau tai užtruks šiek tiek laiko, nes nelyginėse vietose yra įrengti separatoriai. Tai nėra kažkas, kas jums ateina iš karto.
Šioje pamokoje sužinosite
- Pagrindinės terminijos:
- Leksinio analizatoriaus architektūra: kaip atpažįstami žetonai
- Leksinio analizatoriaus vaidmuo
- Leksinės klaidos
- Klaidų atkūrimas „Lexical Analyzer“
- Leksinis analizatorius ir analizatorius
- Kodėl reikia atskirti „Lexical“ ir „Parser“?
- Leksinės analizės pranašumai
- Leksinės analizės trūkumas
Pagrindinės terminijos
Kas yra leksema?
Leksema yra simbolių seka, įtraukta į šaltinio programą pagal atitikties šabloną. Tai ne kas kita, o žetono egzempliorius.
Kas yra žetonas?
Žetonas yra simbolių seka, atspindinti informacijos vienetą šaltinio programoje.
Kas yra raštas?
Šablonas yra aprašas, kurį naudoja žetonas. Raktinio žodžio, kuris naudojamas kaip žetonas, pavyzdys yra simbolių seka.
Leksinio analizatoriaus architektūra: kaip atpažįstami žetonai
Pagrindinis leksinės analizės uždavinys yra skaityti kodo įvesties simbolius ir gaminti žetonus.
Leksinis analizatorius nuskaito visą programos šaltinio kodą. Kiekvieną žetoną jis identifikuoja po vieną. Paprastai skaitytuvai diegiami, kad būtų galima sukurti žetonus tik tada, kai to prašo analizatorius. Štai kaip tai veikia-
- „Gauti kitą prieigos raktą“ yra komanda, kuri iš analizatoriaus siunčiama į leksinį analizatorių.
- Gavęs šią komandą, leksinis analizatorius nuskaito įvestį, kol randa kitą prieigos raktą.
- Jis grąžina prieigos raktą analizatoriui.
Kuriant šiuos žetonus, „Lexical Analyzer“ praleidžia tarpus ir komentarus. Jei yra kokių nors klaidų, „Lexical“ analizatorius koreliuos tą klaidą su šaltinio rinkmena ir eilutės numeriu.
Leksinio analizatoriaus vaidmuo
Leksinis analizatorius atlieka žemiau nurodytas užduotis:
- Padeda atpažinti žetoną į simbolių lentelę
- Pašalina tarpus ir komentarus iš šaltinio programos
- Koreliuoja klaidų pranešimus su šaltinio programa
- Padeda išplėsti makrokomandas, jei jos yra šaltinio programoje
- Perskaitykite įvesties simbolius iš šaltinio programos
Leksinės analizės pavyzdys, žetonai, ne žetonai
Apsvarstykite šį kodą, kuris tiekiamas „Lexical Analyzer“
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Sukurtų žetonų pavyzdžiai
„Lexeme“ | Žetonas |
tarpt | Raktažodis |
maksimaliai | Identifikatorius |
( | operatorius |
tarpt | Raktažodis |
x | Identifikatorius |
, | operatorius |
tarpt | Raktažodis |
Y | Identifikatorius |
) | operatorius |
{ | operatorius |
Jei | Raktažodis |
Nontokens pavyzdžiai
Tipas | Pavyzdžiai |
Pakomentuokite | // Tai palygins 2 skaičius |
Išankstinio procesoriaus direktyva | #include |
Išankstinio procesoriaus direktyva | #define NUMS 8,9 |
Makrokomanda | NUMS |
Balta vieta | / n / b / t |
Leksinės klaidos
Simbolių seka, kurios neįmanoma nuskaityti jokiame galiojančiame žetone, yra leksinė klaida. Svarbūs faktai apie leksinę klaidą:
- Leksikos klaidos nėra labai dažnos, tačiau jas turėtų tvarkyti skaitytuvas
- Netinkama identifikatorių, operatorių, raktinių žodžių rašyba laikoma leksinėmis klaidomis
- Paprastai leksinę klaidą sukelia tam tikro neteisėto simbolio atsiradimas, dažniausiai žetono pradžioje.
Klaidų atkūrimas „Lexical Analyzer“
Štai keletas dažniausiai pasitaikančių klaidų atkūrimo būdų:
- Pašalina vieną simbolį iš likusio įvesties
- Panikos režime vienas po kito einantys personažai visada ignoruojami, kol pasieksime gerai suformuotą žetoną
- Į likusį įvestį įterpdami trūkstamą simbolį
- Pakeiskite simbolį kitu simboliu
- Perkelkite du serijinius simbolius
Leksinis analizatorius ir analizatorius
Leksinis analizatorius | Analizatorius |
„Scan Input“ programa | Atlikite sintaksės analizę |
Identifikuokite žetonus | Sukurkite abstrakčią kodo atvaizdą |
Įterpkite žetonus į simbolių lentelę | Atnaujinti simbolių lentelės įrašus |
Tai sukuria leksines klaidas | Tai sukuria pirminio kodo analizės medį |
Kodėl reikia atskirti „Lexical“ ir „Parser“?
- Dizaino paprastumas: palengvina leksinės analizės ir sintaksės analizės procesą pašalinant nepageidaujamus žetonus
- Padidinti kompiliatoriaus efektyvumą: padeda pagerinti kompiliatoriaus efektyvumą
- Specializacija: leksinės analizės procesui pagerinti gali būti taikomos specializuotos technikos
- Nešiojamumas: norint bendrauti su išoriniu pasauliu reikia tik skaitytuvo
- Didesnis perkeliamumas: įvesties įrenginiui būdingi ypatumai, apriboti lekseriu
Leksinės analizės pranašumai
- Leksinio analizatoriaus metodą naudoja tokios programos kaip kompiliatoriai, kurie gali naudoti išanalizuotus duomenis iš programuotojo kodo, kad sukurtų sukurtą dvejetainį vykdomąjį kodą
- Jį naudoja interneto naršyklės, norėdami formatuoti ir rodyti tinklalapį naudodamiesi išanalizuotais „JavsScript“, HTML, CSS duomenimis.
- Atskiras leksinis analizatorius padeda sukonstruoti specializuotą ir potencialiai efektyvesnį užduoties procesorių
Leksinės analizės trūkumas
- Turite praleisti daug laiko skaitydami šaltinio programą ir skaidydami ją žetonų pavidalu
- Kai kuriuos įprastus posakius yra gana sunku suprasti, palyginti su PEG ar EBNF taisyklėmis
- Reikia daugiau pastangų kuriant ir derinant lekserį ir jo ženklų aprašus
- Norint sugeneruoti lexer lenteles ir sukonstruoti žetonus, reikia papildomų vykdymo laiko pridėtinių išlaidų
Santrauka
- Leksinė analizė yra pats pirmasis kompiliatoriaus projektavimo etapas
- Leksema yra simbolių seka, įtraukta į šaltinio programą pagal atitikties šabloną
- Leksinis analizatorius yra pritaikytas nuskaityti visą programos šaltinio kodą
- Leksinis analizatorius padeda atpažinti žetoną simbolių lentelėje
- Simbolių seka, kurios neįmanoma nuskaityti jokiame galiojančiame žetone, yra leksinė klaida
- Pašalinus vieną simbolį iš likusio įvesties, naudingas klaidų atkūrimo metodas
- Leksinis analizatorius nuskaito įvesties programą, o analizatorius atlieka sintaksės analizę
- Tai palengvina leksinės analizės ir sintaksės analizės procesą pašalindama nepageidaujamus žetonus
- Leksinį analizatorių naudoja interneto naršyklės, norėdami formatuoti ir rodyti tinklalapį naudodami išanalizuotus duomenis iš „JavsScript“, HTML, CSS
- Didžiausias „Lexical“ analizatoriaus trūkumas yra tai, kad norint sukurti lekserio lenteles ir sukurti žetonus, reikia papildomų vykdymo laiko pridėtinių išlaidų.