Syntaktisk analyse (eller parsing , slang parsing ← Engelsk parsing ) i lingvistik og datalogi er processen med at sammenligne en lineær sekvens af leksemer (ord, tokens) af et naturligt eller formelt sprog med dets formelle grammatik . Resultatet er normalt et parsetræ (syntakstræ). Bruges normalt i forbindelse med leksikalsk analyse .
En parser ( slang parser ← engelsk parser ) er et program eller en del af et program, der udfører parsing.
Under parsing konverteres kildeteksten til en datastruktur , normalt et træ, der afspejler den syntaktiske struktur af inputsekvensen og er velegnet til yderligere behandling.
Som regel er resultatet af syntaktisk analyse den syntaktiske struktur af sætningen, præsenteret enten i form af et afhængighedstræ eller i form af et komponenttræ eller i form af en kombination af den første og anden repræsentationsmetode .
Alt, der har en " syntaks " egner sig til automatisk parsing.
Den enkleste måde at reagere på en ugyldig inputstreng af tokens er at afslutte parsing og vise en fejlmeddelelse. Det er dog ofte nyttigt at finde så mange fejl som muligt i et forsøg på at parse. Sådan opfører oversættere af de mest almindelige programmeringssprog sig.
Således har parser fejlbehandleren følgende opgaver:
De mest kendte fejlgendannelsesstrategier er beskrevet nedenfor.
Når der opstår en fejl, springer parseren input-tokens over et ad gangen, indtil et af et specielt defineret sæt synkroniseringstokens er fundet . Normalt er sådanne tokens afgrænsninger, for eksempel: ; , ) eller } . Sættet af synkroniseringstokens skal bestemmes af udvikleren af det analyserede sprog. Med denne gendannelsesstrategi kan det være, at et betydeligt antal tegn vil blive sprunget over uden at tjekke for yderligere fejl. Denne genopretningsstrategi er den nemmeste at implementere.
Nogle gange, når der opstår en fejl, kan parseren udføre en lokal korrektion på inputstrømmen for at tillade den at fortsætte. For eksempel, før et semikolon, der adskiller forskellige udsagn i et programmeringssprog, kan parseren lukke parenteser, der endnu ikke er blevet lukket. Dette er mere komplekst at designe og implementere, men i nogle situationer kan det fungere væsentligt bedre end panikopsving. Naturligvis er denne strategi magtesløs, hvis den faktiske fejl opstod, før parseren opdagede fejlen.
Kendskab til de mest almindelige fejl giver dig mulighed for at udvide sprogets grammatik med produktioner, der genererer fejlagtige konstruktioner. Når sådanne produktioner udløses, logges en fejl, men parseren fortsætter med at køre normalt.
Separate stadier af udvikling og konstruktion af oversættere kan automatiseres og udføres af en computer.
Her er nogle af de mest kendte analysatorudviklingsværktøjer [2] :
Se også sammenligning af parsergeneratorer .