Hva er syntaksanalyse?
Syntaksanalyse er en andre fase av kompileringsdesignprosessen der den gitte inngangsstrengen blir sjekket 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 Compiler Design-prosessen kommer etter den leksikale 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 parsetreet til det kildeprogrammet. Ellers vil det vise feilmeldinger.

I denne veiledningen vil du lære
- Hvorfor trenger du Syntax Analyzer?
- Viktig syntaksanalysatorterminologi
- Hvorfor trenger vi parsing?
- Analyseringsteknikker
- Feil - Gjenopprettingsmetoder
- Grammatikk:
- Notasjonskonvensjoner
- Kontekstfri grammatikk
- Grammatikkavledning
- Syntaks vs Lexical Analyzer
- Ulemper ved bruk av syntaksanalysatorer
Hvorfor trenger du Syntax Analyzer?
- Sjekk om koden er gyldig grammatisk
- Den syntaktiske analysatoren hjelper deg med å bruke regler på koden
- Hjelper deg med å sørge for at hver åpningsbøyle har en tilsvarende lukkesaldo
- Hver erklæring har en type og at typen må eksistere
Viktig syntaksanalysatorterminologi
Viktige terminologier som brukes i syntaksanalyseprosessen:
- Setning: En setning er en gruppe tegn over noe alfabet.
- Lexeme: Et lexeme er det laveste nivået av syntaktiske enheter i et språk (f.eks. Total, 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 påstand. 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 uttalelse for å forbedre setningens lesbarhet.
- Kommentarer - Det er en veldig viktig del av dokumentasjonen. Den vises for det meste av, / * * / eller // Blank (mellomrom)
- Avgrensere - Det er et syntaktisk element som markerer starten eller slutten på en eller annen syntaktisk enhet. Som en påstand eller et uttrykk, "begynn" ... "slutt", eller {}.
- Tegnsett - ASCII, Unicode
- Identifikatorer - Det er begrensninger på lengden som hjelper deg med å redusere setningens lesbarhet.
- Operatørsymboler - + og - utfører to grunnleggende aritmetiske operasjoner.
- Syntaktiske elementer i språket
Hvorfor trenger vi parsing?
En analyse kontrollerer også at inngangsstrengen er velformet, og hvis ikke, avvis den.
Følgende er viktige oppgaver som parseren utfører i kompilerdesign:
- Hjelper deg med å oppdage alle typer syntaksfeil
- Finn posisjonen der feilen har oppstått
- Tydelig 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.
- Analysen må avvise ugyldige tekster ved å rapportere syntaksfeil
Analyseringsteknikker
Analyseringsteknikker er delt inn i to forskjellige grupper:
- Analyse ovenfra og ned,
- Parsing fra bunnen av
Analyse ovenfra og ned:
I analysen ovenfra og ned starter analysetreet på roten og fortsetter deretter mot bladene.
To typer top-down-parsing er:
- Prediktiv parsing:
Prediktiv analyse kan forutsi hvilken produksjon som skal brukes til å erstatte den spesifikke inngangsstrengen. Den prediktive parseren bruker blikk fremover, som peker mot neste inngangssymboler. Backtracking er ikke et problem med denne analyseteknikken. Det er kjent som LL (1) Parser
- Rekursiv nedstigningsparsering:
Denne parsingsteknikken analyserer rekursivt inngangen for å lage et prase-tre. Den består av flere små funksjoner, en for hver ikke-terminal i grammatikken.
Analyse fra undersiden:
I bunnen opp og analyseres i kompilerdesign, begynner konstruksjonen av parse-treet med permisjonen, og deretter prosesserer den mot roten. Det kalles også som skiftreduserende parsing. Denne typen analysering i kompilerdesign er laget ved hjelp av noen programvareverktøy.
Feil - Gjenopprettingsmetoder
Vanlige feil som oppstår i parsing i systemprogramvaren
- Lexical : Navnet på en feil skrevet identifikator
- Syntaktisk : ubalansert parentes eller manglende semikolon
- Semantisk : inkompatibel verditildeling
- Logisk : Uendelig løkke og ikke tilgjengelig kode
En parser skal kunne oppdage og rapportere eventuelle feil som finnes i programmet. Så når en feil oppstod analysatoren. Det skal være i stand til å håndtere det og fortsette å analysere de gjenværende inngangene. Et program kan ha følgende typer feil på forskjellige stadier for kompilering. Det er fem vanlige feilgjenopprettingsmetoder som kan implementeres i parseren
Statement mode recovery
- I tilfelle når parseren støter på en feil, hjelper det deg å ta korrigerende trinn. Dette gjør at resten av innganger og stater kan analysere fremover.
- For eksempel, å legge til et manglende semikolon kommer i setningsmodusgjenopprettingsmetode. Imidlertid må analysedesigner være forsiktig med å gjøre disse endringene, da en feil korreksjon kan føre til en uendelig løkke.
Panic-Mode utvinning
- I tilfelle når parseren støter på en feil, ignorerer denne modusen resten av utsagnet og behandler ikke inngang fra feil inngang til avgrensning, som en semikolon. Dette er en enkel metode for feilgjenoppretting.
- I denne typen gjenopprettingsmetode avviser parseren inngangssymboler en etter en til en enkelt angitt gruppe synkroniserende tokens er funnet. Synkroniseringstokenene bruker vanligvis skilletegn som eller.
Frasenivågjenoppretting:
- Compiler korrigerer programmet ved å sette inn eller slette tokens. Dette gjør at den kan fortsette å analysere fra hvor den var. Den utfører korreksjon på gjenværende inngang. Det kan erstatte et prefiks av den gjenværende inngangen med noen streng. Dette hjelper parseren til å fortsette prosessen.
Feilproduksjoner
- Feilproduksjon utvinning utvider grammatikken for språket som genererer feil konstrukter. Parseren utfører deretter feildiagnostisering av den konstruksjonen.
Global korreksjon:
- Kompilatoren bør gjøre færre endringer som mulig mens den behandler en feil inngangsstreng. Gitt feil inngangsstreng a og grammatikk c, vil algoritmer søke etter et parse-tre etter en beslektet streng b. Som noen innsettinger, er slettinger og modifikasjoner laget av tokens som trengs for å transformere a til b så lite som mulig.
Grammatikk:
En grammatikk er et sett med strukturelle regler som beskriver et språk. Grammatikk tilordner 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 programmeringsspråk.
Regler for formgrammatikk
- Det ikke-terminale symbolet skal vises til venstre for minst en produksjon
- Målsymbolet skal aldri vises til høyre for :: = av en hvilken som helst produksjon
- En regel er rekursiv hvis LHS vises i sin RHS
Notasjonskonvensjoner
Symbol for konvensjonelle notasjoner kan indikeres ved å legge elementet i parentes. Det er en vilkårlig sekvens av forekomster av elementet som kan indikeres ved å omslutte elementet i parentes etterfulgt av et stjernesymbol, {...} *.
Det er et valg av alternativet som kan bruke symbolet i den ene regelen. Det kan være lukket med parentes ([,]) når det er nødvendig.
To typer Notasjonskonvensjonsområde Terminal og ikke-terminaler
1. terminaler:
- Små bokstaver i alfabetet som a, b, c,
- Operatørsymboler som +, -, *, etc.
- Tegnsettingstegn som parenteser, hasj, komma
- 0, 1,…, 9 sifre
- Boldface strenger som id eller hvis, noe som representerer et enkelt terminalsymbol
2. non-terminaler:
- Store bokstaver som A, B, C
- Små kursive navn: uttrykket eller noen
Kontekstfri grammatikk
En CFG er en venstre-rekursiv grammatikk som har minst en produksjon av typen. Reglene i en kontekstfri grammatikk er i hovedsak rekursive. En syntaksanalysator sjekker at spesifikt program tilfredsstiller alle reglene for kontekstfri grammatikk eller ikke. Hvis det oppfyller disse syntaksanalysatorene, kan disse reglene opprette et parse-tre for det programmet.
expression -> expression -+ termexpression -> expression - termexpression-> termterm -> term * factorterm -> expression/ factorterm -> factor factorfactor -> ( expression )factor -> id
Grammatikkavledning
Grammatikkavledning er en sekvens av grammatikkregelen som forvandler startsymbolet til strengen. En avledning beviser at strengen tilhører grammatikkens språk.
Venstre mest avledning
Når den sentensielle formen for inngang blir skannet og erstattet i venstre til høyre rekkefølge, er den kjent som den mest avledede. Den sentensielle skjemaet som er avledet av den lengste avledningen kalles den venstre sentensielle formen.
Høyre avledning
Retteste avledningsskanning og erstatt inngangen med produksjonsregler, fra høyre til venstre, sekvens. Det er kjent som den høyeste avledningen. Sententiell form som er avledet fra den lengste avledningen er kjent som sentimental form.
Syntaks vs Lexical Analyzer
Syntaksanalysator |
Lexical Analyzer |
Syntaksanalysatoren behandler hovedsakelig rekursive konstruksjoner av språket. |
Den leksikale analysatoren letter oppgaven til syntaksanalysatoren. |
Syntaksanalysatoren jobber med tokens i et kildeprogram for å gjenkjenne meningsfulle strukturer i programmeringsspråket. |
Den leksikale analysatoren gjenkjenner symbolet i et kildeprogram. |
Den mottar innganger, i form av tokens, fra leksikale analysatorer. |
Det er ansvarlig for gyldigheten av et token levert av syntaksanalysatoren |
Ulemper ved bruk av syntaksanalysatorer
- Det vil aldri avgjøre om et token er gyldig eller ikke
- Ikke hjelper deg med å finne ut om en operasjon utført på en token-type er gyldig eller ikke
- Du kan ikke bestemme at token blir erklært og initialisert før det blir brukt
Sammendrag
- Syntaksanalyse er en andre fase av kompilatorens designprosess som kommer etter leksikalanalyse
- Den syntaktiske analysatoren hjelper deg med å bruke regler på koden
- Setning, Lexeme, Token, nøkkelord og reserverte ord, Støyord, Kommentarer, Avgrensere, Tegnsett, Identifikatorer er noen viktige begreper som brukes i syntaksanalysen i kompilatorkonstruksjon
- Parse kontrollerer at inngangsstrengen er velformet, og hvis ikke, avvis den
- Parsingsteknikker er delt inn i to forskjellige grupper: Top-Down Parsing, Bottom-Up Parsing
- Lexikalsk, syntaktisk, semantisk og logisk er noen vanlige feil som oppstår under analyseringsmetoden
- En grammatikk er et sett med strukturelle regler som beskriver et språk
- Symbol for konvensjonelle notasjoner kan indikeres ved å legge elementet i parentes
- En CFG er en venstre-rekursiv grammatikk som har minst en produksjon av typen
- Grammatikkavledning er en sekvens av grammatikkregel som forvandler startsymbolet til strengen
- Syntaksanalysatoren arbeider hovedsakelig med rekursive konstruksjoner av språket mens den leksikale analysatoren letter oppgaven til syntaksanalysatoren i DBMS
- Ulempen med Syntax analysator metode er at den aldri vil avgjøre om et token er gyldig eller ikke