Mikä on leksikaalinen analyysi?
LEXICAL ANALYSIS on kääntäjän suunnittelun ensimmäinen vaihe. Lexer ottaa muokatun lähdekoodin, joka kirjoitetaan lauseina. Toisin sanoen se auttaa sinua muuttamaan merkkijonon merkkijonoksi. Leksikaalinen analysaattori hajottaa tämän syntaksin sarjaksi merkkejä. Se poistaa kaikki lähdekoodiin kirjoitetut lisätilat tai kommentit.
Leksikaalianalyysiä suorittavia ohjelmia kutsutaan leksikaalisiksi analysaattoreiksi tai leksereiksi. Lekseri sisältää tokenizerin tai skannerin. Jos leksikaalinen analysaattori havaitsee, että tunnus on virheellinen, se aiheuttaa virheen. Se lukee merkkivirrat lähdekoodista, tarkistaa lailliset tunnukset ja välittää tiedot syntaksianalysaattorille, kun se vaatii.
Esimerkki
How Pleasant Is The Weather?
Katso tämä esimerkki; Täällä voimme helposti tunnistaa, että on viisi sanaa kuinka miellyttävä, sää, sää on. Tämä on meille hyvin luonnollista, koska voimme tunnistaa erotimet, aihiot ja välimerkkisymbolin.
HowPl easantIs Th ewe ather?
Tarkista nyt tämä esimerkki, voimme myös lukea tämän. Se vie kuitenkin jonkin aikaa, koska parittomiin paikkoihin on sijoitettu erottimia. Se ei ole asia, joka tulee sinulle välittömästi.
Tässä opetusohjelmassa opit
- Perustermit:
- Lexical Analyzer Architecture: Kuinka tunnukset tunnistetaan
- Lexical-analysaattorin roolit
- Leksikaaliset virheet
- Virheiden palautus Lexical Analyzerissa
- Lexical Analyzer vs. jäsennin
- Miksi erottaa Lexical ja Parser?
- Leksikaalisen analyysin edut
- Leksikaalisen analyysin haitta
Perustermit
Mikä on lexeme?
Leksema on sarja merkkejä, jotka sisältyvät lähdeohjelmaan tunnuksen vastaavan mallin mukaan. Se ei ole muuta kuin merkin esiintymä.
Mikä on merkki?
Tunnus on merkkisarja, joka edustaa tietoyksikköä lähdeohjelmassa.
Mikä on kuvio?
Kuvio on kuvaus, jota tunnus käyttää. Tunnuksena käytettävän avainsanan kuvio on merkkijono.
Lexical Analyzer Architecture: Kuinka tunnukset tunnistetaan
Leksikaalisen analyysin päätehtävä on lukea koodin syöttömerkkejä ja tuottaa tunnuksia.
Leksikaalinen analysaattori skannaa ohjelman koko lähdekoodin. Se tunnistaa kukin tunnuksen yksitellen. Skannerit toteutetaan yleensä tuottamaan tunnuksia vain, jos jäsennin sitä pyytää. Näin tämä toimii-
- "Get next token" on komento, joka lähetetään jäsentäjältä leksikaaliseen analysaattoriin.
- Saatuaan tämän komennon leksikaalinen analysaattori skannaa syötteen, kunnes se löytää seuraavan tunnuksen.
- Se palauttaa tunnuksen jäsentäjälle.
Lexical Analyzer ohittaa välilyönnit ja kommentit luodessaan näitä tunnuksia. Jos virheitä esiintyy, Lexical-analysaattori korreloi virheen lähdetiedoston ja rivinumeron kanssa.
Lexical-analysaattorin roolit
Leksikaalinen analysaattori suorittaa alla annetut tehtävät:
- Auttaa tunnistamaan tunnuksen symbolitaulukkoon
- Poistaa välilyönnit ja kommentit lähdeohjelmasta
- Korjaa virheilmoitukset lähdeohjelman kanssa
- Auttaa laajentamaan makroja, jos ne löytyvät lähdeohjelmasta
- Lue syöttömerkit lähdeohjelmasta
Esimerkki leksikaalisesta analyysistä, rahakkeet, muut merkit
Harkitse seuraavaa koodia, joka syötetään Lexical Analyzerille
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Esimerkkejä luotuista tunnuksista
Lexeme | Tunnus |
int | Avainsana |
maksimi | Tunniste |
( | Operaattori |
int | Avainsana |
x | Tunniste |
, | Operaattori |
int | Avainsana |
Y | Tunniste |
) | Operaattori |
{ | Operaattori |
Jos | Avainsana |
Esimerkkejä Nontokensista
Tyyppi | Esimerkkejä |
Kommentti | // Tämä vertaa kahta numeroa |
Esikäsittelijää koskeva direktiivi | #include |
Esikäsittelijää koskeva direktiivi | #define NUMERIT 8,9 |
Makro | NUMS |
Välilyönti | / n / b / t |
Leksikaaliset virheet
Merkkijono, jota ei voida skannata mihinkään kelvolliseen tunnukseen, on leksikaalinen virhe. Tärkeitä tietoja leksikaalivirheestä:
- Leksikaalivirheet eivät ole kovin yleisiä, mutta niitä tulisi hallita skannerilla
- Tunnisteiden, operaattoreiden ja avainsanojen kirjoitusvirheitä pidetään leksikaalisinä virheinä
- Yleensä leksikaalivirhe johtuu jonkin laittoman merkin esiintymisestä, enimmäkseen tunnuksen alussa.
Virheiden palautus Lexical Analyzerissa
Tässä on muutamia yleisimpiä virheiden palautustekniikoita:
- Poistaa yhden merkin jäljellä olevasta syötteestä
- Paniikkitilassa peräkkäiset merkit jätetään aina huomiotta, kunnes saavutamme hyvin muodostetun tunnuksen
- Lisäämällä puuttuva merkki jäljellä olevaan syötteeseen
- Korvaa merkki toisella merkillä
- Transponoi kaksi sarjamerkkiä
Lexical Analyzer vs. jäsennin
Leksikaalinen analysaattori | Jäsennin |
Scan Input -ohjelma | Suorita syntaksianalyysi |
Tunnista rahakkeet | Luo abstrakti esitys koodista |
Lisää tunnukset symbolitaulukkoon | Päivitä symbolitaulukon merkinnät |
Se tuottaa leksikaalisia virheitä | Se luo lähdekoodin jäsennyspuun |
Miksi erottaa Lexical ja Parser?
- Suunnittelun yksinkertaisuus: Se helpottaa leksisen analyysin ja syntaksianalyysin poistamalla ei-toivotut tunnukset
- Kääntäjän tehokkuuden parantaminen: Auttaa sinua parantamaan kääntäjän tehokkuutta
- Erikoistuminen: erikoistuneita tekniikoita voidaan soveltaa leksikaalisen analyysin parantamiseen
- Siirrettävyys: vain skanneri vaatii kommunikointia ulkomaailman kanssa
- Parempi siirrettävyys: syöttölaitekohtaiset erityispiirteet rajoitettu lexeriin
Leksikaalisen analyysin edut
- Leksikaalista analysaattorimenetelmää käyttävät ohjelmat, kuten kääntäjät, jotka voivat käyttää ohjelmoijan koodin jäsennettyä dataa kootun binäärisen suoritettavan koodin luomiseen
- Verkkoselaimet käyttävät sitä verkkosivun alustamiseen ja näyttämiseen JavsScriptin, HTML: n, CSS: n jäsennettyjen tietojen avulla.
- Erillinen leksikaalinen analysaattori auttaa sinua rakentamaan erikoistuneen ja mahdollisesti tehokkaamman prosessorin tehtävää varten
Leksikaalisen analyysin haitta
- Sinun on käytettävä paljon aikaa lähdeohjelman lukemiseen ja sen jakamiseen tunnisteiden muodossa
- Joitakin säännöllisiä lausekkeita on melko vaikea ymmärtää verrattuna PEG- tai EBNF-sääntöihin
- Lekserin ja sen tunnuskuvausten kehittäminen ja virheenkorjaus vaatii enemmän vaivaa
- Lekseritaulukoiden luomiseen ja rahakkeiden rakentamiseen tarvitaan lisää ajonaikaisia lisäkustannuksia
Yhteenveto
- Leksikaalinen analyysi on kääntäjän suunnittelun ensimmäinen vaihe
- Lekseme on sarja merkkejä, jotka sisältyvät lähdeohjelmaan tunnuksen vastaavan mallin mukaan
- Leksikaalinen analysaattori on toteutettu ohjelman koko lähdekoodin skannaamiseen
- Leksikaalinen analysaattori auttaa tunnistamaan tunnuksen symbolitaulukkoon
- Merkkijono, jota ei voida skannata mihinkään kelvolliseen tunnukseen, on leksikaalinen virhe
- Yhden merkin poistaminen jäljellä olevasta syötteestä on hyödyllinen virheen palautustapa
- Lexical Analyzer skannaa syöttöohjelman, kun jäsentäjä suorittaa syntaksianalyysin
- Se helpottaa leksikaalisen analyysin ja syntaksianalyysin poistamalla ei-toivotut tunnukset
- Verkkoselaimet käyttävät leksikaalista analysaattoria verkkosivun alustamiseen ja näyttämiseen JavsScriptin, HTML: n, CSS: n jäsennettyjen tietojen avulla
- Lexical-analysaattorin käytön suurin haittapuoli on, että se tarvitsee ylimääräisiä ajonaikaisia lisäkustannuksia, jotka tarvitaan lekseritaulukoiden luomiseen ja tunnusten rakentamiseen.