Syntaksanalyse: Parsingstyper for kompilator ovenfra og ned og nedenfra opp
Hva er syntaksanalyse?
Syntaksanalyse er en andre fase av kompilatordesignprosessen der den gitte inndatastrengen sjekkes for bekreftelse av regler og struktur for den formelle grammatikken. Den analyserer den syntaktiske strukturen og sjekker om den gitte inngangen er i riktig syntaks for programmeringssprรฅket eller ikke.
Syntaksanalyse i kompilatordesignprosessen kommer etter den leksikalske analysefasen. Det er ogsรฅ kjent som Parse Tree eller Syntax Tree. Parse Tree er utviklet ved hjelp av forhรฅndsdefinert grammatikk for sprรฅket. Syntaksanalysatoren sjekker ogsรฅ om et gitt program oppfyller reglene som fรธlger av en kontekstfri grammatikk. Hvis den tilfredsstiller, oppretter parseren deretter analysetreet til det kildeprogrammet. Ellers vil den vise feilmeldinger.

Hvorfor trenger du Syntax Analyser?
- Sjekk om koden er grammatisk gyldig
- Den syntaktiske analysatoren hjelper deg รฅ bruke regler pรฅ koden
- Hjelper deg รฅ sรธrge for at hver รฅpningsbรธyle har en tilsvarende sluttbalanse
- Hver deklarasjon har en type og at typen mรฅ eksistere
Viktig syntaksanalysatorterminologi
Viktige terminologier som brukes i syntaksanalyseprosessen:
- Setning: En setning er en gruppe tegn over et eller annet alfabet.
- Lekseme: Et leksem er den syntaktiske enheten pรฅ laveste nivรฅ i et sprรฅk (f.eks. totalt, start).
- Token: Et token er bare en kategori av leksemer.
- Nรธkkelord og reserverte ord โ Det er en identifikator som brukes som en fast del av syntaksen til en setning. Det er et reservert ord som du ikke kan bruke som variabelnavn eller identifikator.
- Stรธyord โ Stรธyord er valgfrie som settes inn i en setning for รฅ forbedre setningens lesbarhet.
- Kommentar โ Det er en veldig viktig del av dokumentasjonen. Det vises stort sett med /* */, eller//Blank (mellomrom)
- Avgrensere โ Det er et syntaktisk element som markerer starten eller slutten pรฅ en eller annen syntaktisk enhet. Som et utsagn eller uttrykk, "begynn"..."slutt", eller {}.
- Karaktersett โ ASCII, Unicode
- Identifikatorer โ Det er en restriksjon pรฅ lengden som hjelper deg รฅ redusere lesbarheten til setningen.
- Operator symboler โ + og โ utfรธrer to grunnleggende aritmetiske operasjoner.
- Syntaktiske elementer i sprรฅket
Hvorfor trenger vi Parsing?
En parse sjekker ogsรฅ at inndatastrengen er velformet, og hvis ikke, avviser den.
Fรธlgende er viktige oppgaver som utfรธres av parseren i kompilatordesign:
- Hjelper deg รฅ oppdage alle typer syntaksfeil
- Finn posisjonen der feilen har oppstรฅtt
- Klar og nรธyaktig beskrivelse av feilen.
- Gjenoppretting fra en feil for รฅ fortsette og finne flere feil i koden.
- Bรธr ikke pรฅvirke kompilering av "riktige" programmer.
- Parsen mรฅ avvise ugyldige tekster ved รฅ rapportere syntaksfeil
Parsing-teknikker
Parseteknikker er delt inn i to forskjellige grupper:
- Top-down parsing,
- Bottom-up-parsing
Top-down-parsing
I den ovenfra og ned-parsing-konstruksjonen av parsetreet starter ved roten og fortsetter deretter mot bladene.
To typer topp-ned-parsing er:
- Prediktiv parsing:
Prediktiv parse kan forutsi hvilken produksjon som skal brukes for รฅ erstatte den spesifikke inndatastrengen. Den prediktive parseren bruker look-ahead-punkt, som peker mot neste inngangssymboler. Tilbakesporing er ikke et problem med denne analyseteknikken. Det er kjent som LL(1) Parser
- Rekursiv nedstigningsanalyse:
Denne analyseteknikken analyserer rekursivt inndataene for รฅ lage et prasetre. Den bestรฅr av flere smรฅ funksjoner, en for hver ikke-terminal i grammatikken.
Bottom-up-parsing
I bunnen opp-parsing i kompilatordesign starter konstruksjonen av parsetreet med bladet, og deretter prosesserer det mot roten. Det kalles ogsรฅ shift-reduce-parsing. Denne typen parsing i kompilatordesign lages ved hjelp av noen programvareverktรธy.
Feil โ Gjenopprettingsmetoder
Vanlige feil som oppstรฅr i parsing i systemprogramvare
- Leksikalsk: Navn pรฅ en feilskrevet identifikator
- Syntaktisk: ubalansert parentes eller manglende semikolon
- Semantisk: uforenlig verditilordning
- logisk: Uendelig slรธyfe og ikke tilgjengelig kode
En parser skal kunne oppdage og rapportere eventuelle feil funnet i programmet. Sรฅ nรฅr det oppstod en feil, parseren. Den skal kunne hรฅndtere det og fortsette รฅ analysere de gjenvรฆrende inndataene. Et program kan ha fรธlgende typer feil ved ulike kompileringsprosessstadier. Det er fem vanlige feilgjenopprettingsmetoder som kan implementeres i parseren
Gjenoppretting av erklรฆringsmodus
- I tilfellet nรฅr parseren stรธter pรฅ en feil, hjelper det deg รฅ ta korrigerende skritt. Dette lar resten av inndata og tilstander analysere fremover.
- For eksempel, รฅ legge til et manglende semikolon kommer i gjenopprettingsmetoden for statement-modus. Imidlertid mรฅ parsedesigneren vรฆre forsiktig nรฅr du gjรธr disse endringene, da en feil korreksjon kan fรธre til en uendelig slรธyfe.
Gjenoppretting i panikkmodus
- I tilfellet nรฅr parseren stรธter pรฅ en feil, ignorerer denne modusen resten av setningen og behandler ikke inndata fra feil inndata til skilletegn, som et semikolon. Dette er en enkel feilgjenopprettingsmetode.
- I denne typen gjenopprettingsmetode avviser parseren inngangssymboler รฉn etter รฉn inntil en enkelt utpekt gruppe synkroniseringssymboler blir funnet. Synkroniseringssymbolene bruker vanligvis skilletegn som eller.
Gjenoppretting pรฅ frasenivรฅ
- Kompilatoren korrigerer programmet ved รฅ sette inn eller slette tokens. Dette gjรธr at den kan fortsette รฅ analysere fra der den var. Den utfรธrer korreksjon pรฅ gjenvรฆrende inngang. Den kan erstatte et prefiks for den gjenvรฆrende inngangen med en streng, dette hjelper parseren til รฅ fortsette prosessen.
Feilproduksjoner
- Gjenoppretting av feilproduksjon utvider grammatikken for sprรฅket som genererer de feilaktige konstruksjonene. Parseren utfรธrer deretter feildiagnostikk om den konstruksjonen.
Global korreksjon
- Kompilatoren bรธr gjรธre mindre antall endringer som mulig mens den behandler en feil inndatastreng. Gitt feil inndatastreng a og grammatikk c, vil algoritmer sรธke etter et parsetre for en relatert streng b. Som noen innsettinger, slettinger og modifikasjoner laget av tokens som trengs for รฅ transformere an til b, er sรฅ lite som mulig.
Grammatikk
En grammatikk er et sett med strukturelle regler som beskriver et sprรฅk. Grammatikk tildeler struktur til enhver setning. Dette begrepet refererer ogsรฅ til studiet av disse reglene, og denne filen inkluderer morfologi, fonologi og syntaks. Den er i stand til รฅ beskrive mange, av syntaksen til programmerings sprรฅk.
Regler for formgrammatikk
- Det ikke-terminale symbolet skal vises til venstre for den minst ene produksjonen
- Mรฅlsymbolet skal aldri vises til hรธyre for::= av noen produksjon
- En regel er rekursiv hvis LHS vises i RHS
Notasjonskonvensjoner
Symbol for notasjonskonvensjoner kan angis ved รฅ sette elementet i hakeparenteser. Det er en vilkรฅrlig sekvens av forekomster av elementet som kan angis ved รฅ omslutte elementet i klammeparenteser etterfulgt av et stjernesymbol, { โฆ }*.
Det er et valg av alternativet som kan bruke symbolet innenfor enkeltregelen. Den kan omsluttes av parentes ([,] ) ved behov.
To typer notasjonskonvensjoner omrรฅdet Terminal og Non-terminals
1. Terminaler:
- Smรฅ bokstaver i alfabetet som a, b, c,
- Operator-symboler som +,-, * osv.
- Tegnsettingssymboler som parenteser, hash, komma
- 0, 1, โฆ, 9 sifre
- Fet skriftstrenger som id eller if, alt som representerer et enkelt terminalsymbol
2. Ikke-terminaler:
- Store bokstaver som A, B, C
- Navn med smรฅ bokstaver i kursiv: uttrykket eller noen
Kontekst gratis grammatikk
En CFG er en venstrerekursiv grammatikk som har minst รฉn produksjon av typen. Reglene i en kontekstfri grammatikk er hovedsakelig rekursive. En syntaksanalysator sjekker at et bestemt program tilfredsstiller alle reglene for kontekstfri grammatikk eller ikke. Hvis den oppfyller, kan disse regelsyntaksanalysatorene lage et parse-tre for det programmet.
expression -> expression -+ term expression -> expression โ term expression-> term term -> term * factor term -> expression/ factor term -> factor factor factor -> ( expression ) factor -> id
Grammatikkavledning
Grammatikkavledning er en sekvens av grammatikkregel som forvandler startsymbolet til strengen. En avledning beviser at strengen tilhรธrer grammatikkens sprรฅk.
Avledning lengst til venstre
Nรฅr setningsformen for input skannes og erstattes i venstre til hรธyre rekkefรธlge, er det kjent som avledning lengst til venstre. Sentensformen som er avledet av avledningen lengst til venstre kalles venstre-setningsformen.
Avledning lengst til hรธyre
Avledning lengst til hรธyre skanner og erstatt inndataene med produksjonsregler, fra hรธyre til venstre, sekvens. Det er kjent som avledning lengst til hรธyre. Sentensformen som er avledet fra avledningen lengst til hรธyre er kjent som hรธyre-setningsformen.
Syntaks vs. Lexical Analyzer
| Syntaksanalysator | Leksikalsk analysator |
|---|---|
| Syntaksanalysatoren omhandler hovedsakelig rekursive konstruksjoner av sprรฅket. | Den leksikalske analysatoren letter oppgaven til syntaksanalysatoren. |
| Syntaksanalysatoren fungerer pรฅ tokens i et kildeprogram for รฅ gjenkjenne meningsfulle strukturer i programmeringssprรฅket. | Den leksikalske analysatoren gjenkjenner token i et kildeprogram. |
| Den mottar inndata, i form av tokens, fra leksikale analysatorer. | Den er ansvarlig for gyldigheten av et token levert av
syntaksanalysatoren |
Ulemper ved รฅ bruke Syntax Analyzers
- Det vil aldri avgjรธre om et token er gyldig eller ikke
- Not hjelper deg med รฅ avgjรธre om en operasjon utfรธrt pรฅ en tokentype er gyldig eller ikke
- Du kan ikke bestemme at token skal deklareres og initialiseres fรธr det brukes
Sammendrag
- Syntaksanalyse er en andre fase av kompilatordesignprosessen som kommer etter leksikalsk analyse
- Den syntaktiske analysatoren hjelper deg รฅ bruke regler pรฅ koden
- Setning, Lexeme, Token, Nรธkkelord og reserverte ord, Stรธyord, Kommentarer, Avgrensningstegn, Tegnsett, Identifikatorer er noen viktige termer som brukes i syntaksanalysen i kompilatorkonstruksjon
- Parse sjekker at inndatastrengen er godt utformet, og hvis ikke, avviser den
- Parsingteknikker er delt inn i to forskjellige grupper: Top-Down Parsing, Bottom-Up Parsing
- Leksikalsk, syntaktisk, semantisk og logisk er noen vanlige feil som oppstรฅr under analysemetoden
- En grammatikk er et sett med strukturelle regler som beskriver et sprรฅk
- Symbol for notasjonskonvensjoner kan angis ved รฅ sette elementet i hakeparenteser
- En CFG er en venstrerekursiv grammatikk som har minst รฉn produksjon av typen
- Grammatikkavledning er en sekvens av grammatikkregel som forvandler startsymbolet til strengen
- Syntaksanalysatoren omhandler hovedsakelig rekursive konstruksjoner av sprรฅket, mens den leksikalske analysatoren letter oppgaven til syntaksanalysatoren i DBMS
- Ulempen med Syntax-analysatormetoden er at den aldri vil avgjรธre om et token er gyldig eller ikke


