Lexical Analysis in Compiler Design with Example

Sisällysluettelo:

Anonim

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-

  1. "Get next token" on komento, joka lähetetään jäsentäjältä leksikaaliseen analysaattoriin.
  2. Saatuaan tämän komennon leksikaalinen analysaattori skannaa syötteen, kunnes se löytää seuraavan tunnuksen.
  3. 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

#include int 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.