Sintakses analīze: sastādītājs no augšas uz leju & ​​amp; Apakšā uz augšu parsēšanas veidi

Satura rādītājs:

Anonim

Kas ir sintakses analīze?

Sintakses analīze ir kompilatora projektēšanas procesa otrā fāze, kurā tiek pārbaudīta dotā ievades virkne, lai apstiprinātu formālās gramatikas likumus un struktūru. Tas analizē sintaktisko struktūru un pārbauda, ​​vai ievadītā ievade ir pareizā programmēšanas valodas sintaksē vai nē.

Sintakses analīze kompilatora projektēšanas procesā notiek pēc leksiskās analīzes fāzes. Tas ir pazīstams arī kā parsēšanas koks vai sintakses koks. Parsēšanas koks tiek izstrādāts ar iepriekš noteiktas valodas gramatikas palīdzību. Sintakses analizators arī pārbauda, ​​vai konkrētā programma atbilst noteikumiem, kurus nosaka gramatika, kurā nav konteksta. Ja tas apmierina, parsētājs izveido šīs avota programmas parsēšanas koku. Pretējā gadījumā tas parādīs kļūdu ziņojumus.

Sintakses analizatora process

Šajā apmācībā jūs uzzināsiet

  • Kāpēc jums ir nepieciešams sintakses analizators?
  • Svarīga sintakses analizatora terminoloģija
  • Kāpēc mums ir nepieciešama parsēšana?
  • Parsēšanas paņēmieni
  • Kļūda - atkopšanas metodes
  • Gramatika:
  • Notācijas konvencijas
  • Konteksta bezmaksas gramatika
  • Gramatikas atvasinājums
  • Sintakse pret leksisko analizatoru
  • Sintakses analizatoru izmantošanas trūkumi

Kāpēc jums ir nepieciešams sintakses analizators?

  • Pārbaudiet, vai kods ir derīgs gramatiski
  • Sintaktiskais analizators palīdz jums piemērot noteikumus kodam
  • Palīdz jums pārliecināties, ka katram atvēruma stiprinājumam ir atbilstošs noslēguma atlikums
  • Katrai deklarācijai ir tips, un tipam jābūt

Svarīga sintakses analizatora terminoloģija

Sintakses analīzes procesā izmantotās svarīgās terminoloģijas:

  • Teikums: teikums ir rakstzīmju grupa virs kāda alfabēta.
  • Leksēma: leksēma ir valodas zemākā līmeņa sintaktiskā vienība (piemēram, kopējais, sākums).
  • Marķieris: Marķieris ir tikai leksēmu kategorija.
  • Atslēgvārdi un rezervētie vārdi - tas ir identifikators, ko izmanto kā fiksētu daļu priekšraksta sintaksē. Tas ir rezervēts vārds, kuru nevar izmantot kā mainīgā nosaukumu vai identifikatoru.
  • Trokšņa vārdi - trokšņa vārdi nav obligāti, un tie tiek ievietoti paziņojumā, lai uzlabotu teikuma lasāmību.
  • Komentāri - tā ir ļoti svarīga dokumentācijas daļa. To galvenokārt parāda, / * * / vai // Blank (atstarpes)
  • Atdalītāji - tas ir sintaktiskais elements, kas iezīmē kādas sintaktiskas vienības sākumu vai beigas. Tāpat kā paziņojums vai izteiciens, "sākt" ... "beigties" vai {}.
  • Rakstzīmju kopa - ASCII, Unicode
  • Identifikatori - tie ir garuma ierobežojumi, kas palīdz samazināt teikuma lasāmību.
  • Operatora simboli - + un - veic divas aritmētiskās pamatdarbības.
  • Valodas sintaktiskie elementi

Kāpēc mums ir nepieciešama parsēšana?

Parsēšana arī pārbauda, ​​vai ievades virkne ir pareizi izveidota, un, ja nē, noraida to.

Svarīgi uzdevumi, ko parsētājs veic kompilatora projektēšanā:

  • Palīdz jums atklāt visu veidu sintakses kļūdas
  • Atrodiet vietu, kurā radusies kļūda
  • Skaidrs un precīzs kļūdas apraksts.
  • Atgūšana pēc kļūdas, lai turpinātu un atrastu citas kļūdas kodā.
  • Tam nevajadzētu ietekmēt "pareizo" programmu apkopošanu.
  • Parsēšanai ir jānoraida nederīgi teksti, ziņojot par sintakses kļūdām

Parsēšanas paņēmieni

Parsēšanas paņēmieni ir sadalīti divās dažādās grupās:

  • Parsēšana no augšas uz leju,
  • Parsēšana no apakšas uz augšu

Parsēšana no augšas uz leju:

Parsēšanas augšā no augšas uz leju parsēšanas konstrukcija sākas no saknes un pēc tam virzās uz lapām.

Divi veidi no augšas uz leju analizē:

  1. Paredzamā parsēšana:

Paredzošā parsēšana var paredzēt, kura produkcija jāizmanto, lai aizstātu konkrēto ievades virkni. Jutīgais parsētājs izmanto perspektīvas punktu, kas norāda uz nākamajiem ievades simboliem. Šajā parsēšanas tehnikā nav problēmu iet atpakaļ. Tas ir pazīstams kā LL (1) parsētājs

  1. Rekursīvā nolaišanās parsēšana:

Šī parsēšanas tehnika rekursīvi parsē ievadi, lai izveidotu prase koku. Tas sastāv no vairākām mazām funkcijām, pa vienai katram gramatikas bezterminālam.

Parsēšana no apakšas uz augšu:

Parsēšanas procesā no apakšas uz augšu kompilatora dizainā parsēšanas koka konstrukcija sākas ar atvaļinājumu, un pēc tam tā virzās uz sakni. To sauc arī par parsēšanu, kas samazina maiņu. Šāda veida parsēšana kompilatora dizainā tiek izveidota, izmantojot dažus programmatūras rīkus.

Kļūda - atkopšanas metodes

Bieži sastopamās kļūdas, kas rodas, analizējot sistēmas programmatūru

  • Leksiskais : nepareizi ierakstīta identifikatora nosaukums
  • Sintaktisks : nelīdzsvarota iekava vai trūkst semikola
  • Semantisks : nesaderīgs vērtības piešķiršana
  • Loģiski : bezgalīga cilpa un kods nav sasniedzams

Parsētājam jāspēj atklāt un ziņot par visām programmā atrastajām kļūdām. Tātad, vienmēr, kad parsētājs radās kļūda. Tam jāspēj to apstrādāt un turpināt analizēt atlikušo ievadi. Programmai dažādos sastādīšanas procesa posmos var būt šāda veida kļūdas. Parsētājā var ieviest piecas izplatītas kļūdu atkopšanas metodes

Izraksta režīma atkopšana

  • Gadījumā, ja parsētājs sastopas ar kļūdu, tas palīdz veikt koriģējošas darbības. Tas ļauj pārējām ieejām un stāvokļiem analizēt priekšu.
  • Piemēram, trūkstošā semikola pievienošana notiek paziņojuma režīma atkopšanas metodē. Tomēr parsēšanas dizainerim jābūt uzmanīgam, veicot šīs izmaiņas, jo viena nepareiza korekcija var izraisīt bezgalīgu cilpu.

Panikas režīma atkopšana

  • Gadījumā, ja parsētājs sastopas ar kļūdu, šis režīms ignorē pārējo paziņojumu un neapstrādā ievadi no kļūdainas ievades atdalītājā, piemēram, semikols. Šī ir vienkārša kļūdu atkopšanas metode.
  • Šāda veida atkopšanas procesā parsētājs noraida ievades simbolus pa vienam, līdz tiek atrasta viena noteikta sinhronizējošo marķieru grupa. Sinhronizācijas marķieri parasti izmanto atdalītājus, piemēram, vai.

Frāzes līmeņa atkopšana:

  • Kompilators labo programmu, ievietojot vai izdzēšot žetonus. Tas ļauj tai turpināt analizēt no vietas, kur tas bija. Tas veic atlikušās ievades korekciju. Tas var aizstāt atlikušās ievades prefiksu ar kādu virkni, kas palīdz parsētājam turpināt procesu.

Kļūda Productions

  • Kļūdu produkcijas atkopšana paplašina valodas gramatiku, kas ģenerē kļūdainus konstruktus. Parsētājs pēc tam veic kļūdas diagnostiku attiecībā uz šo konstrukciju.

Globālā korekcija:

  • Apstrādājot nepareizu ievades virkni, kompilatoram jāveic pēc iespējas mazāks izmaiņu skaits. Ņemot vērā nepareizu ievades virkni a un gramatiku c, algoritmi meklēs parsēšanas koku saistītai virknei b. Tāpat kā daži ievietojumi, dzēšana un pārveidošana no žetoniem, kas nepieciešami, lai pārveidotu a par b, ir pēc iespējas mazāk.

Gramatika:

Gramatika ir strukturālu noteikumu kopums, kas apraksta valodu. Gramatika jebkuram teikumam piešķir struktūru. Šis termins attiecas arī uz šo noteikumu izpēti, un šis fails ietver morfoloģiju, fonoloģiju un sintaksi. Tas spēj aprakstīt daudzas programmēšanas valodu sintaksi.

Formas gramatikas likumi

  • Simbolam, kas nav termināls, vajadzētu parādīties pa kreisi no vismaz vienas produkcijas
  • Mērķa simbolu nekad nedrīkst attēlot pa labi no jebkura produkta :: =
  • Noteikums ir rekursīvs, ja LHS parādās tā RHS

Notācijas konvencijas

Apzīmējumu konvenciju simbolu var norādīt, iekļaujot elementu kvadrātiekavās. Tā ir elementa patvaļīga secība, ko var norādīt, iekļaujot elementu iekavās, kam seko zvaigznītes simbols {…} *.

Tā ir alternatīvas izvēle, kurā simbolu var izmantot vienā likumā. Vajadzības gadījumā to var pievienot iekavas ([,]).

Divu veidu apzīmējumu konvencijas apgabals Terminal un Non-terminal

1. Termināli:

  • Mazie burti alfabētā, piemēram, a, b, c,
  • Operatora simboli, piemēram, +, -, * utt.
  • Pieturzīmes, piemēram, iekavas, hash, komats
  • 0, 1,…, 9 cipari
  • Boldface virknes, piemēram, id vai if, jebkas, kas apzīmē vienu termināla simbolu

2. Bez termināļiem:

  • Lielie burti, piemēram, A, B, C
  • Mazie kursīvie nosaukumi: izteiciens vai daži

Konteksta bezmaksas gramatika

CFG ir kreisajā rekursīvā gramatika, kurai ir vismaz viena šāda veida produkcija. Noteikumi gramatikā bez konteksta galvenokārt ir rekursīvi. Sintakses analizators pārbauda, ​​vai konkrētā programma atbilst visiem gramatikas bez konteksta noteikumiem. Ja tas atbilst, šo noteikumu sintakses analizatori šai programmai var izveidot parsēšanas koku.

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

Gramatikas atvasinājums

Gramatikas atvasinājums ir gramatikas likumu secība, kas sākuma simbolu pārveido par virkni. Atvasinājums pierāda, ka virkne pieder gramatikas valodai.

Visvairāk kreisais atvasinājums

Kad ieejas sentenciālā forma tiek skenēta un aizstāta secībā no kreisās uz labo, to sauc par atvasinājumu pa kreisi. Sentenciālo formu, kas atvasināta no kreisās puses atvasinājuma, sauc par kreiso-sentenciālo formu.

Labākais labais atvasinājums

Labākais atvasinājums skenē un aizstāj ievadi ar ražošanas noteikumiem no labās uz kreiso secību. Tas ir pazīstams kā labākā atvasināšana. Sentenciālā forma, kas atvasināta no labākā atvasinājuma, ir pazīstama kā labās-sentenciālā forma.

Sintakse pret leksisko analizatoru

Sintakses analizators

Leksiskais analizators

Sintakses analizators galvenokārt nodarbojas ar valodas rekursīvām konstrukcijām.

Leksiskais analizators atvieglo sintakses analizatora uzdevumu.

Sintakses analizators darbojas ar avotprogrammas marķieriem, lai atpazītu jēgpilnas struktūras programmēšanas valodā.

Leksiskais analizators atpazīst marķieri avota programmā.

Tas saņem ievadi žetonu veidā no leksiskajiem analizatoriem.

Tas ir atbildīgs par

sintakses analizatoru

Sintakses analizatoru izmantošanas trūkumi

  • Tas nekad nenoskaidros, vai marķieris ir derīgs vai nē
  • Not palīdz jums noteikt, vai darbība, kas veikta ar marķiera tipu, ir derīga vai nē
  • Jūs nevarat izlemt, ka marķieris tiek deklarēts un inicializēts pirms tā izmantošanas

Kopsavilkums

  • Sintakses analīze ir kompilatora projektēšanas procesa otrā fāze, kas nāk pēc leksiskās analīzes
  • Sintaktiskais analizators palīdz jums piemērot noteikumus kodam
  • Teikums, Lexeme, Token, Atslēgvārdi un rezervētie vārdi, Trokšņojošie vārdi, Komentāri, Atdalītāji, Rakstzīmju kopa, Identifikatori ir daži svarīgi termini, kas tiek izmantoti sintakses analīzē kompilatora konstruēšanā.
  • Parsēšana pārbauda, ​​vai ievades virkne ir pareizi izveidota, un, ja nē, noraidiet to
  • Parsēšanas paņēmieni ir sadalīti divās dažādās grupās: Parsēšana no augšas uz leju, Parsēšana no apakšas uz augšu
  • Leksiskās, sintaktiskās, semantiskās un loģiskās ir dažas izplatītas kļūdas, kas rodas parsēšanas metodes laikā
  • Gramatika ir strukturālu noteikumu kopums, kas apraksta valodu
  • Apzīmējumu konvenciju simbolu var norādīt, iekļaujot elementu kvadrātiekavās
  • CFG ir kreisajā rekursīvā gramatika, kurai ir vismaz viena šāda veida produkcija
  • Gramatikas atvasinājums ir gramatikas likumu secība, kas sākuma simbolu pārveido par virkni
  • Sintakses analizators galvenokārt nodarbojas ar valodas rekursīviem konstruktiem, savukārt leksiskais analizators atvieglo sintakses analizatora darbību DBVS
  • Sintakses analizatora metodes trūkums ir tāds, ka tā nekad nenoskaidros, vai marķieris ir derīgs