Kas ir leksiskā analīze?
LEKSISKĀ ANALĪZE ir pats pirmais posms kompilatora projektēšanā. Lexer ņem modificēto pirmkodu, kas ir uzrakstīts teikumu formā. Citiem vārdiem sakot, tas palīdz pārveidot rakstzīmju secību par žetonu secību. Leksiskais analizators šo sintaksi sadala žetonu sērijā. Tas noņem visu papildu vietu vai komentārus, kas ierakstīti pirmkodā.
Programmas, kas veic leksisko analīzi, sauc par leksiskajiem analizatoriem vai leksikiem. Leksikā ir marķieris vai skeneris. Ja leksiskais analizators konstatē, ka marķieris nav derīgs, tas rada kļūdu. Tas nolasa rakstzīmju plūsmas no avota koda, pārbauda, vai nav likumīgu marķieru, un pēc pieprasījuma nodod datus sintakses analizatoram.
Piemērs
How Pleasant Is The Weather?
Skatiet šo piemēru; Šeit mēs varam viegli atpazīt, ka ir pieci vārdi Cik patīkami, laika apstākļi. Tas mums ir ļoti dabiski, jo mēs varam atpazīt atdalītājus, sagataves un pieturzīmes.
HowPl easantIs Th ewe ather?
Tagad pārbaudiet šo piemēru, un mēs to varam arī izlasīt. Tomēr tas prasīs kādu laiku, jo nepāra vietās tiek izvietoti atdalītāji. Tas nav kaut kas, kas jums nekavējoties nāk klāt.
Šajā apmācībā jūs uzzināsiet
- Pamata terminoloģijas:
- Leksiskā analizatora arhitektūra: kā žetoni tiek atpazīti
- Leksiskā analizatora lomas
- Leksiskas kļūdas
- Kļūdu atkopšana Lexical Analyzer
- Leksiskais analizators pret parsētāju
- Kāpēc atdalīt Lexical un Parser?
- Leksiskās analīzes priekšrocības
- Leksiskās analīzes trūkums
Pamata terminoloģijas
Kas ir leksēma?
Leksēma ir rakstzīmju secība, kas ir iekļauta avota programmā atbilstoši marķiera atbilstības modelim. Tas nav nekas cits kā žetona eksemplārs.
Kas ir žetons?
Marķieris ir rakstzīmju secība, kas attēlo informācijas vienību avota programmā.
Kas ir raksts?
Modelis ir apraksts, kuru lieto marķieris. Atslēgvārda gadījumā, kas tiek izmantots kā marķieris, modelis ir rakstzīmju secība.
Leksiskā analizatora arhitektūra: kā žetoni tiek atpazīti
Leksiskās analīzes galvenais uzdevums ir lasīt ievades rakstzīmes kodā un izveidot žetonus.
Leksiskais analizators skenē visu programmas pirmkodu. Tas identificē katru marķieri pa vienam. Skeneri parasti tiek ieviesti, lai izgatavotu marķierus tikai pēc parsētāja pieprasījuma. Lūk, kā tas darbojas-
- "Saņemt nākamo marķieri" ir komanda, kuru no parsētāja nosūta leksiskajam analizatoram.
- Saņemot šo komandu, leksiskais analizators skenē ievadi, līdz atrod nākamo marķieri.
- Tas atgriež marķieri parsētājam.
Veidojot šos marķierus, Lexical Analyzer izlaiž atstarpes un komentārus. Ja ir kāda kļūda, tad Lexical analizators koriģēs šo kļūdu ar avota failu un rindas numuru.
Leksiskā analizatora lomas
Leksiskais analizators veic zemāk norādītos uzdevumus:
- Palīdz identificēt marķieri simbolu tabulā
- Noņem avota programmas atstarpes un komentārus
- Korelē kļūdu ziņojumus ar avota programmu
- Palīdz paplašināt makro, ja tas ir atrodams avota programmā
- Lasiet ievades rakstzīmes no avota programmas
Leksiskās analīzes piemērs, žetoni, žetoni
Apsveriet šo kodu, kas tiek padots Lexical Analyzer
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Izveidoto žetonu piemēri
Lexeme | Žetons |
int | Atslēgvārds |
maksimāli | Identifikators |
( | Operators |
int | Atslēgvārds |
x | Identifikators |
, | Operators |
int | Atslēgvārds |
Jā | Identifikators |
) | Operators |
{ | Operators |
Ja | Atslēgvārds |
Nontokens piemēri
Tips | Piemēri |
Komentēt | // Tas salīdzinās 2 skaitļus |
Priekšapstrādātāja direktīva | #include |
Priekšapstrādātāja direktīva | #define NUMS 8,9 |
Makro | NUMS |
Baltā telpa | / n / b / t |
Leksiskas kļūdas
Rakstzīmju secība, kuru nav iespējams skenēt nevienā derīgā marķierī, ir leksiska kļūda. Svarīgi fakti par leksisko kļūdu:
- Leksikas kļūdas nav ļoti izplatītas, taču tās jāpārvalda skenerim
- Identifikatoru, operatoru, atslēgvārdu pareizrakstības kļūda tiek uzskatīta par leksiskām kļūdām
- Parasti leksisku kļūdu izraisa kāda nelegāla rakstura parādīšanās, galvenokārt marķiera sākumā.
Kļūdu atkopšana Lexical Analyzer
Šeit ir daži visbiežāk sastopamie kļūdu atkopšanas paņēmieni:
- No atlikušās ievades tiek noņemta viena rakstzīme
- Panikas režīmā secīgās rakstzīmes vienmēr tiek ignorētas, līdz mēs sasniedzam labi izveidotu marķieri
- Ievietojot trūkstošo rakstzīmi atlikušajā ievadā
- Nomainiet rakstzīmi ar citu rakstzīmi
- Transponējiet divas sērijas rakstzīmes
Leksiskais analizators pret parsētāju
Leksiskais analizators | Parsētājs |
Skenēšanas ievades programma | Veikt sintakses analīzi |
Identificējiet žetonus | Izveidojiet koda abstraktu attēlojumu |
Ievietojiet žetonus simbolu tabulā | Atjaunināt simbolu tabulas ierakstus |
Tas rada leksiskas kļūdas | Tas ģenerē avota koda parsēšanas koku |
Kāpēc atdalīt Lexical un Parser?
- Dizaina vienkāršība: tas atvieglo leksiskās analīzes un sintakses analīzes procesu, izslēdzot nevēlamus marķierus
- Kompilatora efektivitātes uzlabošana: palīdz uzlabot kompilatora efektivitāti
- Specializācija: leksiskās analīzes procesa uzlabošanai var izmantot specializētas metodes
- Pārnesamība: tikai skenerim ir nepieciešama saziņa ar ārpasauli
- Lielāka pārnesamība: ievades ierīcei raksturīgās īpatnības, kas attiecas tikai uz lexer
Leksiskās analīzes priekšrocības
- Leksiskā analizatora metodi izmanto tādas programmas kā kompilatori, kas var izmantot parsētos datus no programmētāja koda, lai izveidotu kompilētu bināru izpildāmu kodu
- Tīmekļa pārlūkprogrammas to izmanto, lai formatētu un parādītu tīmekļa lapu, izmantojot parsētus datus no JavsScript, HTML, CSS
- Atsevišķs leksiskais analizators palīdz jums izveidot specializētu un potenciāli efektīvāku uzdevuma procesoru
Leksiskās analīzes trūkums
- Jums jāpavada daudz laika, lasot avota programmu un sadalot to žetonu veidā
- Dažus regulāros izteicienus ir diezgan grūti saprast, salīdzinot ar PEG vai EBNF noteikumiem
- Leksera un tā marķieru aprakstu izstrādei un atkļūdošanai ir jāpieliek lielākas pūles
- Lai ģenerētu leksera tabulas un izveidotu marķierus, ir nepieciešami papildu izpildlaika pieskaitāmie izdevumi
Kopsavilkums
- Leksiskā analīze ir pats pirmais posms kompilatora projektēšanā
- Leksēma ir rakstzīmju secība, kas ir iekļauta avota programmā atbilstoši marķiera atbilstības modelim
- Leksiskais analizators tiek ieviests, lai skenētu visu programmas pirmkodu
- Leksiskais analizators palīdz identificēt marķējumu simbolu tabulā
- Rakstzīmju secība, kuru nav iespējams skenēt nevienā derīgā marķierī, ir leksiska kļūda
- No atlikušās ievades tiek noņemta viena rakstzīme. Noderīga ir kļūdu atkopšanas metode
- Leksiskais analizators skenē ievades programmu, kamēr parsētājs veic sintakses analīzi
- Tas atvieglo leksiskās analīzes un sintakses analīzes procesu, izslēdzot nevēlamus marķierus
- Leksisko analizatoru tīmekļa pārlūkprogrammas izmanto, lai formatētu un parādītu tīmekļa lapu, izmantojot parsētus datus no JavsScript, HTML, CSS
- Leksiskā analizatora izmantošanas lielākais trūkums ir tāds, ka leksera tabulu ģenerēšanai un marķieru izveidošanai ir nepieciešami papildu izpildlaika izdevumi.