Leksikaalne analüüs kompilaatori kujunduses koos näitega

Lang L: none (table-of-contents):

Anonim

Mis on leksikaalne analüüs?

LEKSILINE ANALÜÜS on kompilaatori kavandamise esimene etapp. Lexer võtab muudetud lähtekoodi, mis on kirjutatud lausetena. Teisisõnu, see aitab teil tähemärkide jada muuta märgiks. Leksikaalne analüsaator jagab selle süntaksit märkide reaks. See eemaldab kõik lähtekoodi kirjutatud lisaruumi või kommentaarid.

Programme, mis teostavad leksikaalset analüüsi, nimetatakse leksikaalseks analüsaatoriks või leksiks. Lekser sisaldab märgistit või skannerit. Kui leksikaalne analüsaator tuvastab, et luba on vale, tekitab see tõrke. See loeb lähtekoodist märgivoogusid, kontrollib legaalseid märke ja edastab andmed süntaksianalüsaatorile, kui see nõuab.

Näide

How Pleasant Is The Weather?

Vaadake seda näidet; Siin võime hõlpsasti ära tunda, et on olemas viis sõna, kui mõnus, ilm, ilm on. See on meie jaoks väga loomulik, kuna võime ära tunda eraldajad, toorikud ja kirjavahemärgid.

 HowPl easantIs Th ewe ather?

Nüüd kontrollige seda näidet, saame ka seda lugeda. See võtab siiski veidi aega, sest eraldatud paigutatakse paaritutesse kohtadesse. See pole midagi, mis teile kohe kohale jõuab.

Selles õpetuses saate teada

  • Põhiterminoloogia:
  • Leksikaalse analüsaatori arhitektuur: kuidas märke ära tuntakse
  • Leksikaalse analüsaatori rollid
  • Leksikaalsed vead
  • Vigade taastamine Lexical Analyzer'is
  • Leksikaalne analüsaator vs parser
  • Miks eraldada Lexical ja Parser?
  • Leksikaalse analüüsi eelised
  • Leksikaalse analüüsi puudus

Põhiterminoloogiad

Mis on leksem?

Leksem on tähemärkide jada, mis lisatakse lähteprogrammi vastavalt märgi sobitusmustrile. See pole midagi muud kui märgi eksemplar.

Mis on märk?

Luba on tähemärkide jada, mis tähistab allikaprogrammi teabeühikut.

Mis on muster?

Muster on kirjeldus, mida märgis kasutab. Märgina kasutatava märksõna puhul on muster tähemärkide jada.

Leksikaalse analüsaatori arhitektuur: kuidas märke ära tuntakse

Leksikaalanalüüsi põhiülesanne on lugeda koodis sisendmärke ja luua märke.

Leksikaalne analüsaator skannib kogu programmi lähtekoodi. See identifitseerib iga loa ükshaaval. Skannerid rakendatakse tavaliselt märkide tootmiseks ainult parseri nõudmisel. Nii see toimib-

  1. "Get next token" on käsk, mis saadetakse parserilt leksikaalsele analüsaatorile.
  2. Selle käsu saamisel skannib leksikaalne analüsaator sisendit, kuni leiab järgmise märgi.
  3. See tagastab loa parserile.

Lexical Analyzer jätab need märgid luues vahele tühikud ja kommentaarid. Kui esineb mõni viga, korreleerib Lexical analüsaator selle vea lähtefaili ja rea ​​numbriga.

Leksikaalse analüsaatori rollid

Leksikaalne analüsaator täidab antud ülesandeid allpool:

  • Aitab tuvastada sümboli tabelisse loa
  • Eemaldab lähteprogrammist tühikud ja kommentaarid
  • Korreleerib tõrketeated lähteprogrammiga
  • Aitab laiendada makrosid, kui need on leitud lähteprogrammist
  • Loe algprogrammi sisendmärke

Leksikaalse analüüsi näide, märgid, mittemärgid

Mõelge järgmisele koodile, mis antakse Lexical Analyzerile

#include int maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}

Loodud žetoonide näited

Lexeme Tähis
int Märksõna
maksimaalselt Identifier
( Operaator
int Märksõna
x Identifier
, Operaator
int Märksõna
Y Identifier
) Operaator
{ Operaator
Kui Märksõna

Nontokensi näited

Tüüp Näited
Kommentaar // See võrdleb 2 numbrit
Eeltöötleja direktiiv #include
Eeltöötleja direktiiv #define NUMS 8,9
Makro NUMS
Tühik / n / b / t

Leksikaalsed vead

Tähemärkide järjestus, mida pole võimalik üheski kehtivas loas skannida, on leksikaalne viga. Olulised faktid leksikaalse vea kohta:

  • Leksikavead pole eriti levinud, kuid seda peaks juhtima skanner
  • Identifikaatorite, operaatorite, märksõna valesti kirjutamist loetakse leksikavigadeks
  • Üldiselt põhjustab leksikaalse vea mõne ebaseadusliku märgi ilmumine, enamasti märgi alguses.

Vigade taastamine Lexical Analyzer'is

Siin on mõned levinumad vigade taastamise tehnikad:

  • Eemaldab järelejäänud sisendist ühe märgi
  • Paanikarežiimis ignoreeritakse järjestikuseid märke alati, kuni jõuame korralikult vormistatud märgini
  • Lisades puuduva märgi ülejäänud sisendisse
  • Asenda märk teise tähemärgiga
  • Teisaldage kaks seeriatähte

Leksikaalne analüsaator vs parser

Leksikaalne analüsaator Parser
Scan Input programm Tehke süntaksianalüüs
Tuvastage märgid Looge koodi abstraktne esitus
Sisestage märgid sümbolitabelisse Sümbolitabeli kirjete värskendamine
See tekitab leksikaalseid vigu See genereerib lähtekoodi sõelumispuu

Miks eraldada Lexical ja Parser?

  • Kujunduse lihtsus: see hõlbustab leksikaalse analüüsi ja süntaksianalüüsi, kõrvaldades soovimatud märgid
  • Kompilaatori efektiivsuse parandamine: aitab teil kompilaatori efektiivsust parandada
  • Spetsialiseerumine: leksikaalse analüüsi protsessi täiustamiseks saab rakendada spetsialiseeritud tehnikaid
  • Kaasaskantavus: ainult skanner vajab välismaailmaga suhtlemist
  • Suurem teisaldatavus: sisend-seadmespetsiifilised eripärad piirduvad lekseriga

Leksikaalse analüüsi eelised

  • Leksikaalse analüsaatori meetodit kasutavad sellised programmid nagu kompilaatorid, kes saavad programmeeri koodilt parsitud andmeid kasutada kompileeritud binaarse käivitatava koodi loomiseks
  • Veebibrauserid kasutavad seda veebilehe vormindamiseks ja kuvamiseks JavaScripti, HTML-i, CSS-i parsitud andmete abil
  • Eraldi leksikaalne analüsaator aitab teil ülesandeks konstrueerida spetsialiseeritud ja potentsiaalselt tõhusama protsessori

Leksikaalse analüüsi puudus

  • Peate kulutama palju aega lähtekoodiprogrammi lugemiseks ja selle jagamiseks žetoonide kujul
  • Mõne regulaaravaldise mõistmine PEG või EBNF reeglitega on üsna keeruline
  • Lekseri ja selle sümboolsete kirjelduste väljatöötamiseks ja silumiseks on vaja rohkem pingutada
  • Lekseritabelite loomiseks ja märkide koostamiseks on vaja täiendavat käitamisaega

Kokkuvõte

  • Leksikaalne analüüs on kompilaatori kujundamise kõige esimene etapp
  • Leksem on tähemärkide jada, mis lisatakse lähteprogrammi vastavalt märgi sobitamise mustrile
  • Leksikaalne analüsaator on rakendatud kogu programmi lähtekoodi skannimiseks
  • Leksikaalne analüsaator aitab sümboli tabelis märgi tuvastada
  • Tähemärkide järjestus, mida pole võimalik üheski kehtivas loas skannida, on leksikaalne viga
  • Ühe tähemärgi eemaldamine ülejäänud sisendist on kasulik Vigade taastamise meetod
  • Leksikaalne analüsaator skannib sisendprogrammi, samal ajal kui parser teostab süntaksianalüüsi
  • See hõlbustab leksikaalse analüüsi ja süntaksianalüüsi, kõrvaldades soovimatud märgid
  • Leksikaalset analüsaatorit kasutavad veebibrauserid veebilehe vormindamiseks ja kuvamiseks JavaScripti, HTMLi, CSS-i parsitud andmete abil
  • Leksikaalse analüsaatori kasutamise suurim puudus on see, et lekseritabelite loomiseks ja märkide koostamiseks on vaja täiendavat käitamisaega