Süntaksianalüüs: kompilaatori ülalt alla & Alt üles parsimistüübid

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

Anonim

Mis on süntaksianalüüs?

Süntaksianalüüs on kompilaatori disainiprotsessi teine ​​etapp, mille käigus kontrollitakse etteantud sisestusstringi reeglite ja ametliku grammatika struktuuri kinnitamiseks. See analüüsib süntaktilist struktuuri ja kontrollib, kas antud sisend on programmeerimiskeele õiges süntaksis või mitte.

Süntaksianalüüs kompilaatori kujundamise protsessis toimub pärast leksikaalse analüüsi faasi. Seda tuntakse ka kui parsimispuud või süntaksipuud. Sõelumispuu arendamine toimub keele eelnevalt määratletud grammatika abil. Süntaksianalüsaator kontrollib ka seda, kas antud programm täidab kontekstivaba grammatika vihjatud reegleid. Kui see rahuldab, loob parser selle lähtekava parsimispuu. Vastasel korral kuvatakse veateateid.

Süntaksianalüsaatori protsess

Selles õpetuses saate teada

  • Miks vajate süntaksianalüsaatorit?
  • Tähtis süntaksianalüsaatori terminoloogia
  • Miks me vajame parsimist?
  • Parsimistehnikad
  • Viga - taastamismeetodid
  • Grammatika:
  • Tähistuskonventsioonid
  • Kontekstivaba grammatika
  • Grammatika tuletis
  • Süntaks vs leksikaalne analüsaator
  • Süntaksianalüsaatorite kasutamise puudused

Miks vajate süntaksianalüsaatorit?

  • Kontrollige, kas kood on grammatiliselt kehtiv
  • Süntaktiline analüsaator aitab teil koodi suhtes reegleid rakendada
  • Aitab teil veenduda, et igal avaklambril on vastav lõppsaldo
  • Igal deklaratsioonil on tüüp ja see tüüp peab olema olemas

Tähtis süntaksianalüsaatori terminoloogia

Süntaksianalüüsi protsessis kasutatavad olulised terminoloogiad:

  • Lause: lause on märkide rühm tähestiku kohal.
  • Lekseme: leksem on keele (nt kokku, algus) madalaima taseme süntaktiline üksus.
  • Märgis : märk on vaid leksemide kategooria.
  • Märksõnad ja reserveeritud sõnad - see on identifikaator, mida kasutatakse lause süntaksi fikseeritud osana. See on reserveeritud sõna, mida ei saa kasutada muutuja nime või identifikaatorina.
  • Mürasõnad - mürasõnad on valikulised, mis lisatakse lause loetavuse parandamiseks lausesse.
  • Märkused - see on dokumentatsiooni väga oluline osa. Enamasti kuvatakse, / * * / või // Tühi (tühikud)
  • Eraldajad - see on süntaktiline element, mis tähistab mõne süntaktilise üksuse algust või lõppu. Nagu lause või avaldis, nii ka "algus" ... "lõpp" või {}.
  • Märgistik - ASCII, Unicode
  • Identifikaatorid - see on pikkuse piirang, mis aitab teil lause loetavust vähendada.
  • Operaatori sümbolid - + ja - täidavad kahte põhilist aritmeetilist toimingut.
  • Keele süntaktilised elemendid

Miks me vajame parsimist?

Sõelumine kontrollib ka sisendstringi korralikku vormistamist ja kui ei, lükka see tagasi.

Parseri poolt kompilaatori kujunduses tehtavad olulised ülesanded on järgmised:

  • Aitab teil tuvastada igat tüüpi süntaksivigu
  • Leidke vea tekkimise koht
  • Vea selge ja täpne kirjeldus.
  • Vea taastamine jätkamiseks ja koodist täiendavate vigade leidmiseks.
  • See ei tohiks mõjutada "õigete" programmide koostamist.
  • Sõelumine peab kehtetud tekstid tagasi lükkama, teatades süntaksivigadest

Parsimistehnikad

Parsimistehnikad on jagatud kahte erinevasse rühma:

  • Ülalt alla sõelumine,
  • Alt üles parsimine

Ülalt alla sõelumine:

Ülalt alla sõeludes algab parsimispuu ehitus juurest ja jätkub seejärel lehtede suunas.

Kaks ülalt alla sõelumise tüüpi on:

  1. Ennustav sõelumine:

Ennustava sõelumisega saab ennustada, millist tootmist tuleks konkreetse sisendstringi asendamiseks kasutada. Prognoosiv parser kasutab tulevikupunkti, mis osutab järgmise sisendsümboli poole. Tagasijälgimine pole selle sõelumistehnika probleem. Seda tuntakse kui LL (1) parserit

  1. Rekursiivse laskumise parsimine:

See parsimistehnika parsib sisendi rekursiivselt, et teha algpuu. See koosneb mitmest väikesest funktsioonist, millest üks on iga grammatika mitteterminali jaoks.

Alt üles parsimine:

Kompilaatori kujundamisel alt üles parsimisel algab sõelumispuu ehitus puhkusega ja seejärel töötatakse selle juurte suunas. Seda nimetatakse ka nihet vähendavaks parsimiseks. Seda tüüpi sõelumine kompilaatori disainis luuakse mõne tarkvaratööriista abil.

Viga - taastamismeetodid

Süsteemitarkvara parsimisel esinevad levinumad vead

  • Leksikaalne : valesti sisestatud identifikaatori nimi
  • Süntaktiline : tasakaalustamata sulg või puuduv semikoolon
  • Semantiline : ühildamatu väärtuse omistamine
  • Loogiline : lõpmatu silmus ja kood pole kättesaadav

Parser peaks suutma tuvastada programmis leitud vead ja neist teatada. Niisiis, alati kui parser tekkis viga. See peaks saama sellega hakkama saada ja ülejäänud sisendit parsida. Programmil võib erinevates kompileerimisprotsessides olla järgmist tüüpi vigu. Parseris saab rakendada viit levinud tõrke taastamise meetodit

Lauserežiimi taastamine

  • Juhul, kui parser leiab mõne vea, aitab see teil teha parandusmeetmeid. See võimaldab ülejäänud sisenditel ja olekutel parsida.
  • Näiteks puuduva semikooloni lisamine toimub lauserežiimi taastamise meetodil. Parsimisdisainer peab nende muudatuste tegemisel olema ettevaatlik, kuna üks vale parandus võib viia lõpmatu silmuseni.

Paanikarežiimi taastamine

  • Juhul, kui parser leiab mõne vea, eirab see režiim ülejäänud lauset ja ei töötle sisendit ekslikust sisendist eraldajani, näiteks semikoolonit. See on lihtne tõrke taastamise meetod.
  • Seda tüüpi taastamismeetodi korral lükkab parser sisendsümbolid ükshaaval tagasi, kuni leitakse üks määratud sünkroonimismärkide rühm. Sünkroonimismärgid kasutavad tavaliselt eraldajaid nagu või.

Fraasitaseme taastamine:

  • Kompilaator parandab programmi, lisades või kustutades märgid. See võimaldab tal sõeluda sealt, kus see oli. See teostab ülejäänud sisendi korrektsiooni. See võib asendada ülejäänud sisendi eesliite mõne stringiga, mis aitab parseril protsessi jätkata.

Viga Productions

  • Vigade tootmise taastamine laiendab eksitava konstruktsiooni genereeriva keele grammatikat. Parser teostab seejärel selle konstruktsiooni vea diagnostika.

Üldine parandus:

  • Vale sisendstringi töötlemisel peaks kompilaator tegema võimalikult vähe muudatusi. Võttes vale sisestusstringi a ja grammatika c, otsivad algoritmid seotud sõnal b sõelumispuud. Nagu mõned sisestused, kustutamised ja muudatused, mis on tehtud märkide a muutmiseks b-ks, on nii vähe kui võimalik.

Grammatika:

Grammatika on keelt kirjeldavate struktuurireeglite kogum. Grammatika määrab igale lausele struktuuri. See termin viitab ka nende reeglite uurimisele ja see fail sisaldab morfoloogiat, fonoloogiat ja süntaksit. See on võimeline kirjeldama paljusid programmeerimiskeelte süntaksi.

Vormigrammatika reeglid

  • Mitteterminaalne sümbol peaks ilmuma vähemalt ühest tootest vasakule
  • Eesmärgi sümbolit ei tohiks kunagi kuvada ühegi lavastuse :: = paremal
  • Reegel on rekursiivne, kui LHS kuvatakse selle RHS-is

Tähistuskonventsioonid

Tähistuskonventsioonide sümbolit saab tähistada, pannes elemendi nurksulgudesse. See on suvaline elemendi järjestuste järjestus, mida saab näidata, sulgedes elemendi traksidega, millele järgneb tärn sümbol {…} *.

See on alternatiivi valik, mis võib sümbolit kasutada ühe reegli sees. Vajaduse korral võib selle sulgude ([,]) abil sulgeda.

Kaks tüüpi noodikokkulepete ala Terminal ja Non-terminalid

1. Terminalid:

  • Tähestiku väiketähed nagu a, b, c,
  • Operaatori sümbolid nagu +, -, * jne.
  • Kirjavahemärgid, näiteks sulgud, räsi, koma
  • 0, 1,…, 9 numbrit
  • Boldface'i stringid, nagu id või if, kõik, mis tähistab ühte terminali sümbolit

2. Mitteterminalid:

  • Suurtähed nagu A, B, C
  • Väikesed kaldkirjad: väljend või mõni

Kontekstivaba grammatika

CFG on vasakule rekursiivne grammatika, millel on vähemalt üks seda tüüpi toodang. Kontekstivaba grammatika reeglid on peamiselt rekursiivsed. Süntaksianalüsaator kontrollib, kas konkreetne programm vastab kõigile kontekstivaba grammatika reeglitele või mitte. Kui see vastab, võivad need reeglite süntaksianalüsaatorid luua selle programmi jaoks sõelumispuu.

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

Grammatika tuletis

Grammatika tuletamine on grammatikareegli jada, mis muudab algussümboli stringiks. Tuletus tõestab, et string kuulub grammatika keelde.

Kõige vasakpoolsem tuletis

Kui sisendi sententset vormi skannitakse ja asendatakse vasakult paremale järjestuses, on see tuntud kui kõige vasakpoolsem tuletis. Kõige vasakpoolsema tuletise tuletatud sententsiaalset vormi nimetatakse vasakpoolseks.

Parempoolne tuletis

Parempoolne tuletis skaneerib ja asendab sisendi järjestustega paremalt vasakule. See on tuntud kui kõige parem tuletis. Parempoolsest tuletisest tuletatud sententsiaalset vormi nimetatakse parem-sententsiaalseks vormiks.

Süntaks vs leksikaalne analüsaator

Süntaksianalüsaator

Leksikaalne analüsaator

Süntaksianalüsaator tegeleb peamiselt keele rekursiivsete konstruktsioonidega.

Leksikaalne analüsaator hõlbustab süntaksianalüsaatori ülesannet.

Süntaksianalüsaator töötab lähtekoodis olevate märkide abil, et ära tunda programmeerimiskeele sisukaid struktuure.

Leksikaalne analüsaator tunneb loa lähteprogrammis ära.

See saab sisendeid märgidena leksikaalsetest analüsaatoritest.

Ta vastutab pakutava loa kehtivuse eest

süntaksianalüsaator

Süntaksianalüsaatorite kasutamise puudused

  • See ei määra kunagi, kas märk on kehtiv või mitte
  • Funktsioon Not ei aita teil tuvastada, kas märgitüübiga tehtud toiming on kehtiv või mitte
  • Te ei saa otsustada, et luba deklareeritakse ja lähtestatakse enne selle kasutamist

Kokkuvõte

  • Süntaksianalüüs on kompilaatori disainiprotsessi teine ​​etapp, mis tuleb pärast leksikaalset analüüsi
  • Süntaktiline analüsaator aitab teil koodi suhtes reegleid rakendada
  • Lause, Lexeme, Token, Märksõnad ja reserveeritud sõnad, Mürasõnad, Kommentaarid, eraldajad, Märgistik, Identifikaatorid on mõned olulised terminid, mida kasutatakse süntaksianalüüsis kompilaatori koostamisel
  • Sõelumine kontrollib, kas sisendstring on korralikult vormistatud, ja kui ei, lükka see tagasi
  • Parsimistehnikad on jagatud kahte erinevasse rühma: ülalt alla sõelumine, alt üles sõelumine
  • Leksikaalsed, süntaktilised, semantilised ja loogilised on parsimismeetodi käigus levinud vead
  • Grammatika on keelt kirjeldavate struktuurireeglite kogum
  • Tähistuskonventsioonide sümbolit saab tähistada, pannes elemendi nurksulgudesse
  • CFG on vasakule rekursiivne grammatika, millel on vähemalt üks seda tüüpi toodang
  • Grammatika tuletamine on grammatikareegli jada, mis muudab algussümboli stringiks
  • Süntaksianalüsaator tegeleb peamiselt keele rekursiivsete konstruktsioonidega, samas kui leksikaalne analüsaator hõlbustab süntaksianalüsaatori ülesannet DBMS-is
  • Süntaksianalüsaatori meetodi puuduseks on see, et see ei määra kunagi, kas luba kehtib või mitte