Leksikalna analiza v oblikovanju prevajalnika s primerom

Kazalo:

Anonim

Kaj je leksikalna analiza?

LEKSIČNA ANALIZA je prva faza oblikovanja prevajalnika. Lexer vzame spremenjeno izvorno kodo, ki je napisana v obliki stavkov. Z drugimi besedami, pomaga vam pretvoriti zaporedje znakov v zaporedje žetonov. Leksični analizator to sintakso razdeli na vrsto žetonov. Odstrani odvečen prostor ali komentar, zapisan v izvorni kodi.

Programi, ki izvajajo leksikalno analizo, se imenujejo leksikalni analizatorji ali lexers. Lexer vsebuje tokenizer ali optični bralnik. Če leksikalni analizator zazna, da žeton ni veljaven, ustvari napako. Prebere tokove znakov iz izvorne kode, preveri, ali obstajajo zakoniti žetoni, in podatke posreduje analizatorju skladnje, ko to zahteva.

Primer

How Pleasant Is The Weather?

Glej ta primer; Tu lahko zlahka prepoznamo, da obstaja pet besed Kako prijetno je, vreme je. To je za nas zelo naravno, saj lahko prepoznamo ločila, praznine in ločila.

 HowPl easantIs Th ewe ather?

Zdaj, preverite ta primer, lahko tudi to preberemo. Vendar bo trajalo nekaj časa, ker so ločila postavljena na Neparna mesta. To ni nekaj, kar pride k vam takoj.

V tej vadnici boste izvedeli

  • Osnovne terminologije:
  • Arhitektura leksikalnega analizatorja: prepoznavanje žetonov
  • Vloge leksikalnega analizatorja
  • Leksikalne napake
  • Obnavljanje napak v leksikalnem analizatorju
  • Leksikalni analizator proti Parserju
  • Zakaj ločiti Lexical in Parser?
  • Prednosti leksikalne analize
  • Pomanjkljivost leksikalne analize

Osnovne terminologije

Kaj je leksem?

Leksem je zaporedje znakov, ki so vključeni v izvorni program v skladu z vzorcem ujemanja žetona. To ni nič drugega kot primerek žetona.

Kaj je žeton?

Žeton je zaporedje znakov, ki predstavlja enoto informacij v izvornem programu.

Kaj je vzorec?

Vzorec je opis, ki ga uporablja žeton. V primeru ključne besede, ki se uporablja kot žeton, je vzorec zaporedje znakov.

Arhitektura leksikalnega analizatorja: prepoznavanje žetonov

Glavna naloga leksikalne analize je branje vhodnih znakov v kodi in izdelava žetonov.

Leksikalni analizator skenira celotno izvorno kodo programa. Vsak žeton identificira enega za drugim. Optični bralniki so običajno nameščeni za izdelavo žetonov samo na zahtevo razčlenjevalnika. Tukaj je, kako to deluje -

  1. "Get next token" je ukaz, ki ga parser pošlje leksikalnemu analizatorju.
  2. Po prejemu tega ukaza leksikalni analizator pregleda vhod, dokler ne najde naslednjega žetona.
  3. Vrne žeton Parserju.

Lexical Analyzer med ustvarjanjem teh žetonov preskoči presledke in komentarje. Če je prisotna kakšna napaka, bo Lexical Analyzer to napako povezal z izvorno datoteko in številko vrstice.

Vloge leksikalnega analizatorja

Leksikalni analizator izvaja naslednje naloge:

  • Pomaga pri prepoznavanju žetona v tabeli simbolov
  • Odstrani presledke in komentarje iz izvornega programa
  • Poveže sporočila o napakah z izvornim programom
  • Pomaga vam pri razširitvi makrov, če jih najdete v izvornem programu
  • Preberite vhodne znake iz izvornega programa

Primer leksikalne analize, žetoni, ne-žetoni

Upoštevajte naslednjo kodo, ki se dovaja v Lexical Analyzer

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

Primeri ustvarjenih žetonov

Leksema Žeton
int Ključna beseda
največ Identifikator
( Operater
int Ključna beseda
x Identifikator
, Operater
int Ključna beseda
Y. Identifikator
) Operater
{ Operater
Če Ključna beseda

Primeri Nontokenov

Tip Primeri
Komentiraj // To bo primerjalo dve številki
Direktiva predprocesorja #include
Direktiva predprocesorja #define NUMS 8,9
Makro ŠTEVIL
Presledek / n / b / t

Leksikalne napake

Zaporedje znakov, ki ga ni mogoče pregledati v noben veljaven žeton, je leksikalna napaka. Pomembna dejstva o besedni napaki:

  • Leksikalne napake niso zelo pogoste, vendar bi jih moral upravljati skener
  • Napačno črkovanje identifikatorjev, operatorjev, ključne besede se šteje za besedne napake
  • Običajno leksikalno napako povzroči videz nekega nezakonitega znaka, večinoma na začetku žetona.

Obnavljanje napak v leksikalnem analizatorju

Tu je nekaj najpogostejših tehnik obnavljanja napak:

  • Odstrani en znak iz preostalega vnosa
  • V načinu panike se zaporedni znaki vedno prezrejo, dokler ne pridemo do dobro oblikovanega žetona
  • Z vstavitvijo manjkajočega znaka v preostali vnos
  • Znak zamenjajte z drugim
  • Prenesite dva zaporedna znaka

Leksikalni analizator proti Parserju

Leksikalni analizator Razčlenjevalnik
Scan Input program Izvedite sintaksno analizo
Prepoznajte žetone Ustvarite abstraktno predstavitev kode
Vstavite žetone v tabelo simbolov Posodobi vnose v tabelo simbolov
Ustvarja leksikalne napake Ustvari drevo razčlenitve izvorne kode

Zakaj ločiti Lexical in Parser?

  • Enostavnost oblikovanja: olajša postopek leksikalne analize in sintakse z odstranitvijo neželenih žetonov
  • Za izboljšanje učinkovitosti prevajalnika: pomaga vam izboljšati učinkovitost prevajalnika
  • Specializacija: za izboljšanje procesa leksikalne analize je mogoče uporabiti posebne tehnike
  • Prenosljivost: samo optični bralnik potrebuje komunikacijo z zunanjim svetom
  • Večja prenosljivost: posebnosti vhodne naprave, omejene na lexer

Prednosti leksikalne analize

  • Metodo leksikalnega analizatorja uporabljajo programi, kot so prevajalniki, ki lahko uporabijo razčlenjene podatke iz programerjeve kode za ustvarjanje prevedene binarne izvršljive kode
  • Spletni brskalniki ga uporabljajo za formatiranje in prikaz spletne strani s pomočjo razčlenjenih podatkov iz JavsScript, HTML, CSS
  • Ločen leksikalni analizator vam pomaga zgraditi specializiran in potencialno učinkovitejši procesor za nalogo

Pomanjkljivost leksikalne analize

  • Precej časa morate porabiti za branje izvornega programa in njegovo razdelitev v obliki žetonov
  • Nekatere regularne izraze je precej težko razumeti v primerjavi s pravili PEG ali EBNF
  • Potrebno je več truda za razvoj in odpravljanje napak lexerja in njegovih opisov žetonov
  • Za ustvarjanje lexer tabel in konstruiranje žetonov so potrebni dodatni režijski stroški

Povzetek

  • Leksikalna analiza je prva faza oblikovanja prevajalnika
  • Leksem je zaporedje znakov, ki so vključeni v izvorni program v skladu z vzorcem ujemanja žetona
  • Leksikalni analizator je vgrajen za skeniranje celotne izvorne kode programa
  • Leksikalni analizator pomaga prepoznati žeton v tabeli simbolov
  • Zaporedje znakov, ki ga ni mogoče pregledati v noben veljaven žeton, je leksikalna napaka
  • Odstranjevanje enega znaka iz preostalega vnosa je koristno Način obnovitve po napaki
  • Lexical Analyzer skenira vhodni program, medtem ko razčlenjevalnik izvaja sintaksno analizo
  • Olajša postopek leksikalne analize in analize skladnje z odpravo neželenih žetonov
  • Leksični analizator uporabljajo spletni brskalniki za formatiranje in prikaz spletne strani s pomočjo razčlenjenih podatkov iz JavsScript, HTML, CSS
  • Največja pomanjkljivost uporabe Lexical analizatorja je, da potrebuje dodatne režijske stroške, potrebne za generiranje lexer tabel in konstruiranje žetonov