Analiza skladnje: prevajalnik zgoraj navzdol & Vrste razčlenjevanja od spodaj navzgor

Kazalo:

Anonim

Kaj je sintaksna analiza?

Analiza sintakse je druga faza postopka oblikovanja prevajalnika, v kateri se preverja dani vhodni niz za potrditev pravil in strukture formalne slovnice. Analizira skladenjsko strukturo in preveri, ali je dani vnos v pravilni skladnji programskega jezika ali ne.

Analiza sintakse v postopku oblikovanja prevajalnika prihaja po fazi leksikalne analize. Znano je tudi kot drevo razčlenitve ali sintaksno drevo. Razčlenjevalno drevo je razvito s pomočjo vnaprej določene slovnice jezika. Sintaksni analizator tudi preveri, ali dani program izpolnjuje pravila, ki jih nalaga slovnica brez konteksta. Če izpolnjuje, razčlenjevalnik nato ustvari drevo razčlenitve tega izvornega programa. V nasprotnem primeru se prikažejo sporočila o napakah.

Proces sintaksnega analizatorja

V tej vadnici boste izvedeli

  • Zakaj potrebujete Syntax Analyzer?
  • Pomembna terminologija sintaksnega analizatorja
  • Zakaj potrebujemo razčlenjevanje?
  • Tehnike razčlenjevanja
  • Napaka - Načini obnovitve
  • Slovnica:
  • Notacijske konvencije
  • Kontekst prosta slovnica
  • Izpeljava slovnice
  • Sintaksa v primerjavi z leksikalnim analizatorjem
  • Slabosti uporabe sintaksnih analizatorjev

Zakaj potrebujete Syntax Analyzer?

  • Preverite, ali je koda slovnično veljavna
  • Sintaksični analizator vam pomaga pri uporabi pravil za kodo
  • Pomaga vam zagotoviti, da ima vsaka odpiralna zapora ustrezno zapiralno tehtnico
  • Vsaka izjava ima tip in mora obstajati

Pomembna terminologija sintaksnega analizatorja

Pomembne terminologije, uporabljene v postopku analize sintakse:

  • Stavek: Stavek je skupina znakov nad neko abecedo.
  • Leksema: Leksem je skladenjska enota jezika na najnižji ravni (npr. Seštevek, začetek).
  • Token: Žeton je samo kategorija leksemov.
  • Ključne besede in rezervirane besede - to je identifikator, ki se uporablja kot fiksni del sintakse stavka. To je rezervirana beseda, ki je ne morete uporabiti kot ime spremenljivke ali identifikator.
  • Hrupne besede - Šumne besede niso obvezne in se vstavijo v stavek, da se izboljša berljivost stavka.
  • Pripombe - To je zelo pomemben del dokumentacije. Prikaže se večinoma s / * * / ali // Prazno (presledki)
  • Ločila - je skladenjski element, ki označuje začetek ali konec neke skladenjske enote. Tako kot stavek ali izraz, "začetek" ... '' konec 'ali {}.
  • Nabor znakov - ASCII, Unicode
  • Identifikatorji - omejitve dolžine vam pomagajo zmanjšati berljivost stavka.
  • Simbol operatorja - + in - izvaja dve osnovni računski operaciji.
  • Skladenjski elementi jezika

Zakaj potrebujemo razčlenjevanje?

Razčlenitev tudi preveri, ali je vhodni niz dobro oblikovan, in če ne, ga zavrnite.

Sledijo pomembne naloge, ki jih razčlenjevalnik izvaja pri oblikovanju prevajalnika:

  • Pomaga pri odkrivanju vseh vrst sintaksnih napak
  • Poiščite položaj, na katerem je prišlo do napake
  • Jasen in natančen opis napake.
  • Okrevanje po napaki za nadaljevanje in iskanje nadaljnjih napak v kodi.
  • Ne sme vplivati ​​na sestavljanje "pravilnih" programov.
  • Razčlenitev mora zavrniti neveljavna besedila s poročanjem o sintaksnih napakah

Tehnike razčlenjevanja

Tehnike razčlenjevanja so razdeljene v dve različni skupini:

  • Razčlenjevanje od zgoraj navzdol,
  • Razčlenjevanje od spodaj navzgor

Razčlenjevanje od zgoraj navzdol:

Pri razčlenjevanju od zgoraj navzdol se drevo za razčlenitev začne pri korenu in nato nadaljuje proti listjem.

Dve vrsti razčlenjevanja od zgoraj navzdol sta:

  1. Predvidevanje razčlenjevanja:

S predvidevanjem razčlenitve lahko predvidete, katero produkcijo je treba uporabiti za nadomestitev določenega vhodnega niza. Predvidevalni razčlenjevalnik uporablja točko pogleda naprej, ki kaže na naslednje vhodne simbole. Pri tej tehniki razčlenjevanja sledenje ni težava. Znan je pod imenom LL (1) Parser

  1. Rekurzivno razčlenjevanje spusta:

Ta tehnika razčlenjevanja rekurzivno razčleni vhod, da naredi drevo prase. Sestavljen je iz več majhnih funkcij, po ena za vsak neterminal v slovnici.

Razčlenjevanje od spodaj navzgor:

Pri razčlenjevanju od spodaj navzgor pri oblikovanju prevajalnika se gradnja drevesa za razčlenitev začne z dopustom in nato obdela proti svojemu korenu. Imenuje se tudi kot razčlenitev z zmanjšanjem premika. Ta vrsta razčlenjevanja v oblikovanju prevajalnika je ustvarjena s pomočjo nekaterih programskih orodij.

Napaka - Načini obnovitve

Pogoste napake, ki se pojavijo pri razčlenjevanju v sistemski programski opremi

  • Leksikalno : Ime napačno vnesenega identifikatorja
  • Sintaksično : neuravnotežena oklepaj ali manjkajoča podpičje
  • Semantično : dodelitev nezdružljive vrednosti
  • Logično : neskončna zanka in nedosegljiva koda

Razčlenjevalnik mora biti sposoben zaznati in prijaviti kakršno koli napako v programu. Torej, vsakič, ko je prišlo do napake, je parser. Moral bi ga obvladati in nadaljevati z razčlenjevanjem preostalih vhodnih podatkov. Program ima lahko naslednje vrste napak v različnih fazah postopka prevajanja. V razčlenjevalniku je mogoče uporabiti pet najpogostejših načinov za obnovo napak

Obnovitev načina izjave

  • V primeru, da razčlenjevalnik naleti na napako, vam pomaga, da izvedete popravne korake. To omogoča, da se preostali vhodi in stanja razčlenijo naprej.
  • Na primer, dodajanje manjkajočega podpičja je v načinu izterjave v načinu stavka. Vendar mora biti razčlenjevalnik pri teh spremembah previden, saj lahko en napačen popravek privede do neskončne zanke.

Obnovitev v načinu panike

  • V primeru, ko razčlenjevalnik naleti na napako, ta način prezre preostanek stavka in ne obdela vnosa iz napačnega vnosa v ločilo, na primer podpičje. To je preprost način za obnovitev napak.
  • Pri tej vrsti metode obnovitve razčlenjevalnik zavrne vhodne simbole enega za drugim, dokler ne najde ene same določene skupine sinhronizirajočih žetonov. Sinhronizirajoči žetoni na splošno uporabljajo ločila, kot so.

Obnovitev na ravni fraze:

  • Prevajalnik popravi program tako, da vstavi ali izbriše žetone. To mu omogoča nadaljevanje razčlenjevanja od tam, kjer je bilo. Izvede popravek na preostalem vnosu. Predpono preostalega vnosa lahko nadomesti z nizom, kar pomaga razčlenjevalniku, da nadaljuje postopek.

Produkcije napak

  • Obnovitev proizvodnje napak razširi slovnico jezika, ki ustvarja napačne konstrukcije. Nato razčlenjevalnik izvede diagnostiko napak o tej konstrukciji.

Globalni popravek:

  • Prevajalnik mora med obdelavo nepravilnega vhodnega niza narediti čim manj sprememb. Glede na napačen vhodni niz a in slovnico c bodo algoritmi iskali drevo za razčlenitev povezanega niza b. Tako kot nekaj vstavitev, izbrisov in sprememb žetonov, potrebnih za pretvorbo črke b, je čim manj.

Slovnica:

Slovnica je sklop strukturnih pravil, ki opisujejo jezik. Slovnice vsakemu stavku dodeljujejo strukturo. Ta izraz se nanaša tudi na preučevanje teh pravil in ta datoteka vključuje morfologijo, fonologijo in sintakso. Zmožen je opisati številne skladnje programskih jezikov.

Pravila obrazca slovnica

  • Simbol, ki ni končni, mora biti prikazan na levi strani vsaj ene produkcije
  • Simbol cilja nikoli ne sme biti prikazan desno od :: = katere koli produkcije
  • Pravilo je rekurzivno, če se LHS pojavi v svojem RHS

Notacijske konvencije

Simbol notacijskih dogovorov je lahko označen z zaprtjem elementa v oklepaje To je poljubno zaporedje primerkov elementa, ki ga lahko označimo tako, da element zapremo v oklepaje, čemur sledi znak zvezdice, {…} *.

To je izbira alternative, ki lahko uporablja simbol znotraj enega pravila. Po potrebi je lahko v oklepaju ([,]).

Dve vrsti notacijskih konvencij sta področje Terminal in Ne-terminali

1. terminali:

  • Male črke v abecedi, kot so a, b, c,
  • Simboli operaterja, kot so +, -, * itd.
  • Ločila, kot so oklepaji, zgoščena beseda, vejica
  • 0, 1,…, 9 števk
  • Niz v krepkem tisku, kot je id ali if, karkoli, kar predstavlja en terminalni simbol

2. Terminali:

  • Velike črke, kot so A, B, C
  • Mala poševna imena: izraz ali nekatera druga

Kontekst prosta slovnica

CFG je levo-rekurzivna slovnica, ki ima vsaj eno obliko tega tipa. Pravila v slovnici brez konteksta so v glavnem rekurzivna. Analizator skladnje preveri, ali določen program izpolnjuje vsa pravila slovnice brez konteksta. Če se izpolni, lahko analizatorji sintakse pravil ustvarijo drevo za razčlenitev tega programa.

expression -> expression -+ termexpression -> expression - termexpression-> termterm -> term * factorterm -> expression/ factorterm -> factor factorfactor -> ( expression )factor -> id

Izpeljava slovnice

Izpeljava slovnice je zaporedje slovničnega pravila, ki pretvori začetni simbol v niz. Izpeljava dokazuje, da niz pripada slovničnemu jeziku.

Najbolj leva izpeljava

Ko je sentencialna oblika vnosa optično prebrana in zamenjana v zaporedju od leve proti desni, je znana kot najbolj leva izpeljava. Stavčna oblika, ki je izpeljana z skrajno levo izpeljavo, se imenuje levo-sentencialna oblika.

Najbolj desno Izpeljava

Skeniranje sklicevanja skrajno desno in vnos zamenjajte s proizvodnimi pravili od desne proti levi, zaporedje. Znana je kot najbolj desna izpeljava. Sentencialna oblika, ki izhaja iz skrajno desne izpeljave, je znana kot desna sentencialna oblika.

Sintaksa v primerjavi z leksikalnim analizatorjem

Sintaksni analizator

Leksikalni analizator

Sintaksni analizator se ukvarja predvsem z rekurzivnimi konstrukti jezika.

Leksikalni analizator olajša nalogo sintaksnega analizatorja.

Analizator sintakse deluje na žetonih v izvornem programu, da prepozna pomembne strukture v programskem jeziku.

Leksikalni analizator prepozna žeton v izvornem programu.

Vhodne podatke v obliki žetonov prejema od leksikalnih analizatorjev.

Odgovorna je za veljavnost žetona, ki ga dobavi

sintaksni analizator

Slabosti uporabe sintaksnih analizatorjev

  • Nikoli ne bo ugotovil, ali je žeton veljaven ali ne
  • Ne pomaga vam ugotoviti, ali je operacija, izvedena na vrsti žetona, veljavna ali ne
  • Ne morete se odločiti, da je žeton razglašen in inicializiran, preden je uporabljen

Povzetek

  • Sintaksna analiza je druga faza postopka oblikovanja prevajalnika, ki sledi leksikalni analizi
  • Sintaksični analizator vam pomaga pri uporabi pravil za kodo
  • Stavek, leksem, žeton, ključne besede in pridržane besede, besede hrupa, komentarji, ločila, nabor znakov, identifikatorji so nekateri pomembni izrazi, uporabljeni v sintaksni analizi v konstrukciji prevajalnika
  • Razčlenitev preveri, ali je vhodni niz dobro oblikovan, in če ne, ga zavrnite
  • Tehnike razčlenjevanja so razdeljene v dve različni skupini: razčlenjevanje od zgoraj navzdol, razčlenjevanje od spodaj navzgor
  • Leksikalne, sintaktične, semantične in logične so nekatere pogoste napake, ki se pojavijo med načinom razčlenjevanja
  • Slovnica je sklop strukturnih pravil, ki opisujejo jezik
  • Simbol notacijskih dogovorov je lahko označen z zaprtjem elementa v oglate oklepaje
  • CFG je levo-rekurzivna slovnica, ki ima vsaj eno obliko tega tipa
  • Izpeljava slovnice je zaporedje slovničnega pravila, ki pretvori začetni simbol v niz
  • Sintaksni analizator se ukvarja predvsem z rekurzivnimi konstrukti jezika, medtem ko leksikalni analizator olajša nalogo sintaksnega analizatorja v DBMS
  • Slaba stran metode analizatorja Syntax je, da nikoli ne bo ugotovila, ali je žeton veljaven ali ne