Sintaksės analizė: kompiliatorius iš viršaus į apačią & Iš apačios į viršų analizės tipai

Turinys:

Anonim

Kas yra sintaksės analizė?

Sintaksės analizė yra antrasis kompiliatoriaus projektavimo proceso etapas, kurio metu tikrinama, ar pateikta įvesties eilutė patvirtina formalios gramatikos taisykles ir struktūrą. Ji analizuoja sintaksinę struktūrą ir tikrina, ar pateikta įvestis yra teisinga programavimo kalbos sintakse, ar ne.

Sintaksės analizė kompiliatoriaus projektavimo procese atliekama po leksinės analizės fazės. Jis taip pat žinomas kaip analizės medis arba sintaksės medis. Parse medis kuriamas iš anksto apibrėžtos kalbos gramatikos pagalba. Sintaksės analizatorius taip pat patikrina, ar tam tikra programa atitinka taisykles, kurias numato gramatika be konteksto. Jei jis tenkina, analizatorius sukuria tos šaltinio programos analizės medį. Priešingu atveju bus rodomi klaidų pranešimai.

Sintaksės analizatoriaus procesas

Šioje pamokoje sužinosite

  • Kodėl jums reikia sintaksės analizatoriaus?
  • Svarbi sintaksės analizatoriaus terminologija
  • Kodėl mums reikia analizuoti?
  • Analizavimo technika
  • Klaida - atkūrimo metodai
  • Gramatika:
  • Notacinės konvencijos
  • Konteksto nemokama gramatika
  • Gramatikos darinys
  • Sintaksė ir leksinis analizatorius
  • Sintaksės analizatorių naudojimo trūkumai

Kodėl jums reikia sintaksės analizatoriaus?

  • Patikrinkite, ar kodas galioja gramatiškai
  • Sintaksinis analizatorius padeda jums pritaikyti taisykles kodui
  • Padeda įsitikinti, kad kiekviena atidarymo petneša turi atitinkamą uždarymo balansą
  • Kiekviena deklaracija turi tipą ir kad tipas turi egzistuoti

Svarbi sintaksės analizatoriaus terminologija

Svarbios sintaksės analizės procese vartojamos terminologijos:

  • Sakinys: sakinys yra simbolių grupė per tam tikrą abėcėlę.
  • Leksema: leksema yra žemiausio lygio sintaksinis kalbos vienetas (pvz., Bendra, pradžia).
  • Žetonas: Žetonas yra tik leksemų kategorija.
  • Raktiniai žodžiai ir rezervuoti žodžiai - tai identifikatorius, naudojamas kaip fiksuota teiginio sintaksės dalis. Tai rezervuotas žodis, kurio negalite naudoti kaip kintamojo vardo ar identifikatoriaus.
  • Triukšmo žodžiai - triukšmo žodžiai yra neprivalomi, kurie įterpiami į sakinį, siekiant pagerinti sakinio įskaitomumą.
  • Komentarai - tai labai svarbi dokumentacijos dalis. Tai dažniausiai rodoma, / * * / arba // Tuščia (tarpai)
  • Atribotuvai - tai sintaksinis elementas, žymintis kurio nors sintaksinio vieneto pradžią ar pabaigą. Kaip sakinys ar posakis, „pradėk“… “„ baigk “arba {}.
  • Simbolių rinkinys - ASCII, „Unicode“
  • Identifikatoriai - tai ilgio apribojimai, kurie padeda sumažinti sakinio įskaitomumą.
  • Operatoriaus simboliai - + ir - atlieka dvi pagrindines aritmetines operacijas.
  • Sintaktiniai kalbos elementai

Kodėl mums reikia analizuoti?

Analizė taip pat patikrina, ar įvesties eilutė yra gerai suformuota, ir, jei ne, atmeta ją.

Toliau pateikiamos svarbios užduotys, kurias atlieka analizatorius kurdamas kompiliatoriaus dizainą:

  • Padeda aptikti visų rūšių sintaksės klaidas
  • Raskite klaidos padėtį
  • Aiškus ir tikslus klaidos aprašymas.
  • Atkūrimas po klaidos, jei norite tęsti ir rasti daugiau klaidų kode.
  • Tai neturėtų turėti įtakos „teisingų“ programų sudarymui.
  • Analizuojant reikia atmesti netinkamus tekstus pranešant apie sintaksės klaidas

Analizavimo technika

Analizės metodai yra suskirstyti į dvi skirtingas grupes:

  • Analizavimas iš viršaus į apačią,
  • Analizavimas iš apačios į viršų

Analizavimas iš viršaus į apačią:

Lyginant iš viršaus į apačią, parsėjančio medžio konstrukcija prasideda nuo šaknies ir tęsiasi lapų link.

Yra du tipų analizavimo iš viršaus į apačią tipai:

  1. Nuspėjamas analizavimas:

Nuspėjamasis analizavimas gali numatyti, kuri produkcija turėtų būti naudojama norint pakeisti konkrečią įvesties eilutę. Nuspėjamasis analizatorius naudoja perspektyvų tašką, kuris nukreipia į kitus įvesties simbolius. Ši analizavimo technika nėra problema. Tai žinoma kaip LL (1) analizatorius

  1. Rekursinis nusileidimo analizavimas:

Ši analizės technika rekursyviai analizuoja įvestį, kad būtų pradinis medis. Jis susideda iš kelių mažų funkcijų, po vieną kiekvienam nepagrindiniam gramatikoje.

Analizavimas iš apačios į viršų:

Analizuojant iš apačios į viršų, sudarius kompiliatoriaus projektą, analizuojančio medžio konstrukcija prasideda nuo lapo, o tada jis pereina prie šaknies. Tai taip pat vadinama „parsinešimu“. Šis kompiliatoriaus dizaino analizavimas yra sukurtas naudojant kai kurias programinės įrangos priemones.

Klaida - atkūrimo metodai

Dažniausios sistemos programinės įrangos analizės klaidos

  • Leksinis : neteisingai įvesto identifikatoriaus pavadinimas
  • Sintaktinė : nesubalansuota skliaustai arba trūksta kabliataškio
  • Semantinis : nesuderinamas vertės priskyrimas
  • Loginis : begalinis ciklas ir nepasiekiamas kodas

Analizatorius turėtų sugebėti aptikti bet kokią programoje rastą klaidą ir pranešti apie ją. Taigi, kai analizatoriui įvyko klaida. Jis turėtų sugebėti jį tvarkyti ir analizuoti likusį įvestį. Įvairiuose kompiliavimo proceso etapuose programa gali turėti šių tipų klaidas. Yra penki įprasti klaidų atkūrimo metodai, kuriuos galima įdiegti analizatoriuje

Pareiškimo režimo atkūrimas

  • Jei analizatorius susiduria su klaida, tai padeda jums atlikti taisomuosius veiksmus. Tai leidžia likusiems įėjimams ir būsenoms analizuoti į priekį.
  • Pvz., Trūkstamos kabliataškio pridėjimas yra ataskaitos režimo atkūrimo metodas. Tačiau analizuojantis dizaineris turi būti atsargus, atlikdamas šiuos pakeitimus, nes vienas neteisingas pataisymas gali sukelti begalinę kilpą.

Panikos režimo atkūrimas

  • Tuo atveju, kai analizatorius susiduria su klaida, šis režimas nepaiso likusio teiginio ir neapdoroja įvesties iš klaidingo įvesties į atribiklį, pavyzdžiui, kabliataškis. Tai yra paprastas klaidų atkūrimo metodas.
  • Šio tipo atkūrimo metodu analizatorius atmeta įvesties simbolius po vieną, kol bus surasta viena paskirta sinchronizavimo žetonų grupė. Sinchronizuojantys žetonai paprastai naudoja tokius skiriklius kaip arba.

Frazės lygio atkūrimas:

  • Kompiliatorius pataiso programą įterpdamas arba ištrindamas žetonus. Tai leidžia analizuoti iš ten, kur buvo. Jis atlieka likusios įvesties korekciją. Tai gali pakeisti likusio įvesties priešdėlį tam tikra eilute, tai padeda analizatoriui tęsti procesą.

„Error Productions“

  • Klaidų gamybos atkūrimas išplečia kalbos, kuria generuojami klaidingi dariniai, gramatiką. Tada analizatorius atlieka klaidos diagnostiką apie tą konstrukciją.

Visuotinė korekcija:

  • Kompiliatorius, atlikdamas neteisingą įvesties eilutę, turėtų atlikti kuo mažiau pakeitimų. Atsižvelgiant į neteisingą įvesties eilutę a ir gramatiką c, algoritmai ieškos susijusios eilutės b analizės medžio. Kaip ir kai kurie įterpimai, ištrynimai ir modifikacijos, padarytos iš žetonų, reikalingų transformuoti a į b, yra kuo mažiau.

Gramatika:

Gramatika yra struktūrinių taisyklių rinkinys, apibūdinantis kalbą. Gramatikos bet kuriam sakiniui priskiria struktūrą. Šis terminas taip pat reiškia šių taisyklių tyrimą, o ši byla apima morfologiją, fonologiją ir sintaksę. Jis sugeba apibūdinti daugelį programavimo kalbų sintaksės.

Formos gramatikos taisyklės

  • Negalinis simbolis turėtų pasirodyti kairėje iš bent vienos produkcijos
  • Tikslo simbolis niekada neturėtų būti rodomas bet kurios produkcijos :: = dešinėje
  • Taisyklė yra rekursinė, jei LHS rodoma jos RHS

Notacinės konvencijos

Žodžių sutarčių simbolis gali būti nurodytas uždėjus elementą laužtiniuose skliaustuose. Tai yra atsitiktinė elemento sekų seka, kurią galima nurodyti įtraukiant elementą į petnešas, po kurios yra žvaigždutės simbolis {…} *.

Tai yra alternatyvos pasirinkimas, kuris gali naudoti simbolį vienoje taisyklėje. Jei reikia, jis gali būti uždarytas skliaustais ([,]).

Dviejų tipų notacijų konvencijos: terminalas ir ne terminalas

1. Terminalai:

  • Mažosios raidės abėcėlėje, tokios kaip a, b, c,
  • Operatoriaus simboliai, tokie kaip +, -, * ir kt.
  • Skyrybos simboliai, pvz., Skliausteliuose, maišos, kablelis
  • 0, 1,…, 9 skaitmenys
  • „Boldface“ eilutės, pvz., „Id“ arba „if if“, reiškia bet kokį terminalo simbolį

2. Negaliniai:

  • Didelės raidės, tokios kaip A, B, C
  • Mažosios raidės kursyvu: išraiška arba kai kurie

Konteksto nemokama gramatika

CFG yra kairėje rekursyvi gramatika, turinti bent vieną tokio tipo produkciją. Gramatikos be konteksto taisyklės dažniausiai yra rekursinės. Sintaksės analizatorius patikrina, ar konkreti programa atitinka visas gramatikos be konteksto taisykles. Jei jis atitinka, šių taisyklių sintaksės analizatoriai gali sukurti tos programos analizės medį.

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

Gramatikos darinys

Gramatikos išvedimas yra gramatikos taisyklės seka, paverčianti pradžios simbolį į eilutę. Išvestis įrodo, kad eilutė priklauso gramatikos kalbai.

Labiausiai kairė išvestis

Kai įvestinė sentencinė forma nuskaitoma ir pakeičiama iš kairės į dešinę, ji vadinama labiausiai kairiuoju dariniu. Sentencinė forma, kuri gaunama iš kairės pusės darinio, vadinama kairiosios-sentencine forma.

Dešinės dešinės išvestis

Dešinysis dešinysis vedinys nuskaito ir pakeičia įvestį gamybos taisyklėmis iš dešinės į kairę, seka. Tai vadinama dešiniuoju dariniu. Sentencinė forma, kilusi iš dešiniojo darinio, yra vadinama dešiniojo-sentencinio forma.

Sintaksė ir leksinis analizatorius

Sintaksės analizatorius

Leksinis analizatorius

Sintaksės analizatorius daugiausia susijęs su rekursyviais kalbos konstruktais.

Leksinis analizatorius palengvina sintaksės analizatoriaus užduotį.

Sintaksės analizatorius dirba su žetonais šaltinio programoje, kad atpažintų prasmingas programavimo kalbos struktūras.

Leksinis analizatorius atpažįsta žetoną šaltinio programoje.

Jis gauna įvestį žetonų pavidalu iš leksikos analizatorių.

Ji yra atsakinga už žetono, kurį pateikė „

sintaksės analizatorius

Sintaksės analizatorių naudojimo trūkumai

  • Tai niekada nenustatys, ar prieigos raktas galioja, ar ne
  • „Not“ nepadės nustatyti, ar veiksmas, atliktas su prieigos rakto tipu, galioja
  • Negalite nuspręsti, kad prieigos raktas yra deklaruojamas ir inicijuojamas prieš jį naudojant

Santrauka

  • Sintaksės analizė yra antrasis kompiliatoriaus projektavimo proceso etapas, kuris atliekamas po leksinės analizės
  • Sintaksinis analizatorius padeda jums pritaikyti taisykles kodui
  • Sakinys, „Lexeme“, žetonas, raktiniai žodžiai ir rezervuoti žodžiai, triukšmo žodžiai, komentarai, skiriamieji ženklai, simbolių rinkinys, identifikatoriai yra keli svarbūs terminai, naudojami sintaksės analizėje sudarant kompiliatorių
  • Analizuojant patikrinama, ar įvesties eilutė yra gerai suformuota, ir, jei ne, atmeta ją
  • Analizės metodai yra suskirstyti į dvi skirtingas grupes: analizavimas iš viršaus į apačią, iš apačios į viršų
  • Leksiniai, sintaksiniai, semantiniai ir loginiai yra keletas dažniausiai pasitaikančių klaidų, atsirandančių analizuojant metodą
  • Gramatika yra struktūrinių taisyklių rinkinys, apibūdinantis kalbą
  • Žodžių sutarčių simbolis gali būti nurodytas uždėjus elementą laužtiniuose skliaustuose
  • CFG yra kairėje rekursyvi gramatika, turinti bent vieną tokio tipo produkciją
  • Gramatikos išvedimas yra gramatikos taisyklės seka, paverčianti pradžios simbolį į eilutę
  • Sintaksės analizatorius daugiausia susijęs su rekursyviais kalbos konstruktais, o leksinis analizatorius palengvina sintaksės analizatoriaus užduotį DBVS
  • Sintaksės analizatoriaus metodo trūkumas yra tas, kad jis niekada nenustatys, ar prieigos raktas galioja, ar ne