Što je sintaksna analiza?
Analiza sintakse druga je faza postupka dizajna kompajlera u kojoj se provjerava zadani ulazni niz radi potvrde pravila i strukture formalne gramatike. Analizira sintaktičku strukturu i provjerava je li zadani unos u ispravnoj sintaksi programskog jezika ili nije.
Analiza sintakse u procesu oblikovanja kompilatora dolazi nakon faze leksičke analize. Također je poznato kao stablo raščlanjivanja ili stablo sintakse. Stablo raščlanjivanja razvijeno je uz pomoć unaprijed definirane gramatike jezika. Analizator sintakse također provjerava ispunjava li zadani program pravila koja podrazumijeva gramatika bez konteksta. Ako zadovoljava, parser tada stvara stablo raščlanjivanja tog izvornog programa. U suprotnom, prikazat će se poruke pogreške.

U ovom ćete tutorijalu naučiti
- Zašto vam treba Syntax Analyzer?
- Važna terminologija analizatora sintakse
- Zašto nam je potrebno raščlanjivanje?
- Tehnike raščlanjivanja
- Pogreška - metode oporavka
- Gramatika:
- Notacijske konvencije
- Kontekst Slobodna gramatika
- Izvođenje gramatike
- Sintaksa nasuprot leksičkom analizatoru
- Mane upotrebe sintaksnih analizatora
Zašto vam treba Syntax Analyzer?
- Provjerite je li kod gramatički valjan
- Sintaksički analizator pomaže vam u primjeni pravila na kôd
- Pomaže vam da osigurate da svaka zagrada za otvaranje ima odgovarajuću vagu za zatvaranje
- Svaka deklaracija ima tip i taj tip mora postojati
Važna terminologija analizatora sintakse
Važne terminologije korištene u procesu analize sintakse:
- Rečenica: Rečenica je skupina znakova nad nekom abecedom.
- Leksema: Leksema je sintaksička jedinica jezika najniže razine (npr. Total, start).
- Token: Token je samo kategorija leksema.
- Ključne riječi i rezervirane riječi - To je identifikator koji se koristi kao fiksni dio sintakse iskaza. To je rezervirana riječ koju ne možete koristiti kao ime varijable ili identifikator.
- Riječi buke - riječi buke nisu obvezne i ubacuju se u izjavu radi poboljšanja čitljivosti rečenice.
- Komentari - To je vrlo važan dio dokumentacije. Prikazuje se uglavnom, / * * / ili // Prazno (razmaci)
- Razdjelnici - To je sintaktički element koji označava početak ili kraj neke sintaktičke jedinice. Poput izjave ili izraza, "početak" ... '' kraj 'ili {}.
- Skup znakova - ASCII, Unicode
- Identifikatori - Ograničenja duljine pomažu vam smanjiti čitljivost rečenice.
- Simboli operatora - + i - izvode dvije osnovne aritmetičke operacije.
- Sintaktički elementi jezika
Zašto nam je potrebno raščlanjivanje?
Analiza također provjerava je li ulazni niz dobro oblikovan, a ako nije, odbacite ga.
Slijede važni zadaci koje parser izvodi u dizajnu kompajlera:
- Pomaže vam u otkrivanju svih vrsta sintaksnih pogrešaka
- Pronađite položaj na kojem se dogodila pogreška
- Jasan i točan opis pogreške.
- Oporavak od pogreške da biste nastavili i pronašli daljnje pogreške u kodu.
- Ne bi trebao utjecati na kompilaciju "ispravnih" programa.
- Analiza mora odbiti nevaljane tekstove prijavljujući sintaksne pogreške
Tehnike raščlanjivanja
Tehnike raščlanjivanja podijeljene su u dvije različite skupine:
- Raščlanjivanje odozgo prema dolje,
- Raščlanjivanje odozdo prema gore
Raščlanjivanje odozgo prema dolje:
U konstrukciji raščlanjivanja odozgo prema dolje stablo raščlanjivanja započinje od korijena, a zatim nastavlja prema lišću.
Dvije su vrste raščlanjivanja odozgo prema dolje:
- Prediktivno raščlanjivanje:
Prediktivno raščlanjivanje može predvidjeti koju proizvodnju treba koristiti za zamjenu određenog ulaznog niza. Prediktivni parser koristi točku gledanja unaprijed koja usmjerava prema sljedećim ulaznim simbolima. Povratno praćenje nije problem s ovom tehnikom raščlanjivanja. Poznat je pod nazivom LL (1) Parser
- Rekurzivno raščlanjivanje spuštanja:
Ova tehnika raščlanjivanja rekurzivno raščlanjuje ulazne podatke da bi napravila stablo prase. Sastoji se od nekoliko malih funkcija, po jedna za svaki neterminal u gramatici.
Raščlanjivanje odozdo prema gore:
U raščlanjivanju odozdo prema gore u dizajnu kompajlera, izrada stabla za raščlanjivanje započinje odmorom, a zatim se obrađuje prema svom korijenu. Također se naziva raščlanjivanjem smanjenja pomaka. Ova vrsta raščlanjivanja u dizajnu kompajlera kreira se uz pomoć nekih softverskih alata.
Pogreška - metode oporavka
Uobičajene pogreške koje se javljaju prilikom raščlanjivanja u sustavskom softveru
- Leksički : Naziv pogrešno upisanog identifikatora
- Sintaktički : neuravnotežena zagrada ili nedostaje točka i zarez
- Semantički : nekompatibilna dodjela vrijednosti
- Logično : Beskonačna petlja i nedostižni kôd
Analizator bi trebao moći otkriti i prijaviti bilo koju pogrešku pronađenu u programu. Dakle, kad god se dogodila pogreška, parser. Trebao bi biti u stanju to riješiti i nastaviti s raščlanjivanjem preostalog unosa. Program može imati sljedeće vrste pogrešaka u različitim fazama procesa kompilacije. Pet je uobičajenih metoda oporavka pogrešaka koje se mogu implementirati u parser
Oporavak načina izjave
- U slučaju da parser naiđe na pogrešku, pomaže vam u poduzimanju korektivnih koraka. To omogućuje raščlanjivanje ostalih unosa i stanja.
- Na primjer, dodavanje točke sa zarezom koja nedostaje dolazi u načinu oporavka u načinu izraza. Međutim, dizajner raščlambe mora biti oprezan prilikom uvođenja ovih promjena jer jedna pogrešna korekcija može dovesti do beskonačne petlje.
Oporavak u načinu rada panike
- U slučaju kada parser naiđe na pogrešku, ovaj način zanemaruje ostatak izraza i ne obrađuje unos s pogrešnog unosa na razgraničnik, poput točke i dvotačke. Ovo je jednostavna metoda oporavka pogreške.
- U ovoj vrsti metode oporavka, parser odbija ulazne simbole jedan po jedan sve dok se ne pronađe jedna određena skupina sinkronizirajućih tokena. Simboli za sinkronizaciju obično koriste graničnike poput ili.
Oporavak na razini fraze:
- Prevoditelj ispravlja program umetanjem ili brisanjem tokena. To mu omogućuje daljnji raščlanjivanje s mjesta na kojem je bio. Izvodi korekciju na preostalom ulazu. Prefiks preostalog unosa može zamijeniti nekim nizom, što pomaže analizatoru da nastavi postupak.
Proizvodnja pogrešaka
- Oporavak proizvodnje pogreške proširuje gramatiku jezika koji generira pogrešne konstrukcije. Parser zatim izvodi dijagnostiku pogrešaka o toj konstrukciji.
Globalna korekcija:
- Prevoditelj bi trebao izvršiti što je moguće manje izmjena dok obrađuje netočan ulazni niz. S obzirom na netočne ulazne nizove a i gramatiku c, algoritmi će tražiti stablo raščlanjivanja povezanog niza b. Kao i neka umetanja, brisanja i izmjene žetona potrebnih za pretvaranje anta u b, što je manje moguće.
Gramatika:
Gramatika je skup strukturnih pravila koja opisuju jezik. Gramatike dodijeljuju strukturu bilo kojoj rečenici. Ovaj se izraz također odnosi na proučavanje ovih pravila, a ova datoteka uključuje morfologiju, fonologiju i sintaksu. Sposoban je opisivati mnoge, sintaksu programskih jezika.
Pravila gramatike obrasca
- Simbol koji nije terminal trebao bi se pojaviti lijevo od najmanje jedne produkcije
- Simbol cilja nikada ne smije biti prikazan desno od :: = bilo koje produkcije
- Pravilo je rekurzivno ako se LHS pojavljuje u svom RHS-u
Notacijske konvencije
Simbol notacijskih konvencija može se označiti zatvaranjem elementa u uglate zagrade. To je proizvoljan slijed instanci elementa koji se može označiti zatvaranjem elementa u zagrade nakon čega slijedi simbol zvjezdice, {…} *.
To je izbor alternative koja može koristiti simbol unutar jednog pravila. Po potrebi se može priložiti zagradom ([,]).
Dvije vrste notacijskih konvencija su područje Terminal i Non-terminal
1. terminali:
- Mala slova u abecedi kao što su a, b, c,
- Simboli operatora kao što su +, -, * itd.
- Interpunkcijski simboli kao što su zagrade, hash, zarez
- 0, 1,…, 9 znamenki
- Nizovi podebljanog slova poput id ili if, bilo što što predstavlja jedan terminalni simbol
2.Norminali:
- Velika slova kao što su A, B, C
- Mala kurzivna imena: izraz ili neka druga
Kontekst Slobodna gramatika
CFG je lijevo-rekurzivna gramatika koja ima barem jednu tvorbu tog tipa. Pravila u gramatici bez konteksta uglavnom su rekurzivna. Analizator sintakse provjerava ispunjava li određeni program sva pravila gramatike bez konteksta ili ne. Ako se zadovolji, analizatori sintakse ovih pravila mogu stvoriti stablo raščlanjivanja za taj program.
expression -> expression -+ termexpression -> expression - termexpression-> termterm -> term * factorterm -> expression/ factorterm -> factor factorfactor -> ( expression )factor -> id
Izvođenje gramatike
Izvođenje gramatike slijed je gramatičkog pravila koje pretvara početni simbol u niz. Izvođenje dokazuje da niz pripada gramatičkom jeziku.
Krajnje lijevo izvođenje
Kada se sentencijalni oblik unosa skenira i zamijeni u slijedu slijeva udesno, poznat je kao krajnje lijevo izvođenje. Rečenica oblika koja je izvedena iz krajnje lijeve izvedbe naziva se lijevo-rečenica.
Potpuno desno Izvođenje
Skeniranje skretnice udesno i unos zamijenite produkcijskim pravilima slijeda s desna na lijevo. Poznato je kao najdesnije izvođenje. Oblik rečenice koji je izveden iz krajnje desne izvedenice poznat je pod nazivom desnoručni oblik.
Sintaksa nasuprot leksičkom analizatoru
Sintaksni analizator |
Leksički analizator |
Analizator sintakse uglavnom se bavi rekurzivnim konstrukcijama jezika. |
Leksički analizator olakšava zadatak analizatora sintakse. |
Analizator sintakse radi na tokenima u izvornom programu kako bi prepoznao značajne strukture u programskom jeziku. |
Leksički analizator prepoznaje token u izvornom programu. |
Prima ulaze u obliku tokena od leksičkih analizatora. |
Odgovorna je za valjanost tokena koji je dostavio analizator sintakse |
Mane upotrebe sintaksnih analizatora
- Nikada neće utvrditi je li token valjan ili ne
- Ne pomaže vam utvrditi je li operacija izvedena na tipu tokena valjana ili ne
- Ne možete odlučiti da se token deklarira i inicijalizira prije nego što se upotrijebi
Sažetak
- Analiza sintakse druga je faza procesa dizajniranja kompajlera koja dolazi nakon leksičke analize
- Sintaksički analizator pomaže vam u primjeni pravila na kôd
- Rečenica, leksem, žeton, ključne riječi i rezervirane riječi, riječi buke, komentari, razgraničnici, skup znakova, identifikatori neki su važni pojmovi koji se koriste u sintaksnoj analizi u konstrukciji sastavljača
- Analiza provjerava je li ulazni niz dobro oblikovan, a ako nije, odbacite ga
- Tehnike raščlanjivanja podijeljene su u dvije različite skupine: Raščlanjivanje odozgo prema dolje, Raščlanjivanje odozdo prema gore
- Leksičke, sintaktičke, semantičke i logičke su neke od uobičajenih pogrešaka koje se javljaju tijekom postupka raščlanjivanja
- Gramatika je skup strukturnih pravila koja opisuju jezik
- Simbol notacijskih konvencija može se označiti zatvaranjem elementa u uglate zagrade
- CFG je lijevo-rekurzivna gramatika koja ima barem jednu tvorbu tog tipa
- Izvođenje gramatike slijed je gramatičkog pravila koje pretvara početni simbol u niz
- Analizator sintakse uglavnom se bavi rekurzivnim konstrukcijama jezika, dok leksički analizator olakšava zadatak analizatora sintakse u DBMS-u
- Nedostatak metode Syntax analizatora je taj što nikada neće utvrditi je li token valjan ili ne