Analysera
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 25 december 2021; kontroller kräver
2 redigeringar .
Syntaktisk analys (eller parsing , slang parsing ← Engelsk parsing ) inom lingvistik och datavetenskap är processen att jämföra en linjär sekvens av lexem (ord, tokens) av ett naturligt eller formellt språk med dess formella grammatik . Resultatet är vanligtvis ett parseträd (syntaxträd). Används vanligtvis i samband med lexikal analys .
En parser ( slang parser ← engelsk parser ) är ett program eller del av ett program som utför analys.
Under analysen omvandlas källtexten till en datastruktur , vanligtvis ett träd, som återspeglar den syntaktiska strukturen för inmatningssekvensen och som är väl lämpad för vidare bearbetning.
Som regel är resultatet av syntaktisk analys den syntaktiska strukturen av meningen, presenterad antingen i form av ett beroendeträd , eller i form av ett komponentträd , eller i form av någon kombination av den första och andra representationsmetoderna .
Omfattning
Allt som har en " syntax " lämpar sig för automatisk analys.
- Programmeringsspråk - analys av källkoden för programmeringsspråk, under översättningsprocessen ( sammanställning eller tolkning );
- Strukturerad data - data, språk för deras beskrivning, design, etc. Till exempel XML , HTML , CSS , JSON , ini-filer, specialiserade konfigurationsfiler etc.;
- Bygga ett index i en sökmotor ;
- SQL -frågor ( DSL- språk);
- Matematiska uttryck;
- Reguljära uttryck (som i sin tur kan användas för att automatisera lexikal analys );
- Formella grammatiker ;
- Lingvistik - naturliga språk. Till exempel maskinöversättning och andra textgeneratorer .
- Att extrahera data från webbsidor - webbskrapning , är ett specialfall av parsning [1] .
Typer av algoritmer
- Top-down parser ( eng. top-down parser ) - grammatikprodukter expanderas, med början från starttecknet, tills den nödvändiga sekvensen av tokens erhålls .
- Ascending parser ( eng. bottom-up parser ) - produkter återställs från de rätta delarna, som börjar med tokens och slutar med starttecknet.
Återställning från fel
Det enklaste sättet att svara på en ogiltig inmatningssträng av tokens är att avsluta analysen och visa ett felmeddelande. Det är dock ofta användbart att hitta så många fel som möjligt i ett försök att analysera. Det är så översättare av de vanligaste programmeringsspråken beter sig.
Sålunda har parserfelhanteraren följande uppgifter:
- den måste tydligt och korrekt rapportera förekomsten av fel.
- det bör ge snabb felåterställning för att fortsätta leta efter andra fel;
- det bör inte avsevärt sakta ner bearbetningen av en giltig inmatningssträng.
De mest välkända felåterställningsstrategierna beskrivs nedan.
Återhämtning i panikläge
När ett fel påträffas, hoppar parsern över inmatningstoken en i taget tills en av en speciellt definierad uppsättning synkroniseringstoken hittas . Vanligtvis är sådana symboler avgränsare, till exempel: ; , ) eller } . Uppsättningen av synkroniseringstokens måste bestämmas av utvecklaren av det analyserade språket. Med denna återställningsstrategi kan det hända att ett betydande antal tecken kommer att hoppas över utan att det finns ytterligare fel. Denna återställningsstrategi är den enklaste att implementera.
Återställning på frasnivå
Ibland, när ett fel påträffas, kan parsern utföra en lokal korrigering på ingångsströmmen för att tillåta den att fortsätta. Till exempel, före ett semikolon som separerar olika satser i ett programmeringsspråk, kan parsern stänga parenteser som ännu inte har stängts. Detta är mer komplicerat att designa och implementera, men i vissa situationer kan det fungera betydligt bättre än panikåterhämtning. Naturligtvis är denna strategi maktlös om det faktiska felet inträffade innan parsern upptäckte felet.
Buggproduktioner
Kunskap om de vanligaste felen gör att du kan utöka språkets grammatik med produktioner som genererar felaktiga konstruktioner. När sådana produktioner startar loggas ett fel, men parsern fortsätter att köras normalt.
Analysatorutvecklingsverktyg
Separata stadier av utveckling och konstruktion av översättare kan automatiseras och utföras av en dator.
Här är några av de mest kända analysverktygen för utveckling [2] :
- ANTLR - parsergenerator
- Bison - parsergenerator
- Coco/R - skanner och parsergenerator
- GULD - parser
- JavaCC - Java - parsergenerator
- Lemon Parser - parsergenerator
- Lex - skannergenerator
- Ragel - Inline Parser Generator
- Spirit Parser Framework - parsergenerator
- SYNTAX
- Syntax Definition Formalism
- UltraGram
- VivaCore
- Yacc - parsergenerator
Se även jämförelse av parsergeneratorer .
Se även
Anteckningar
- ↑ Tim Jones M. Extrahera information från Internet med Ruby-språket. (22 maj 2014). Hämtad 13 december 2019. Arkiverad från originalet 13 december 2019. (obestämd)
- ↑ Ela Kumar. naturlig språkbehandling. - IK International Pvt Ltd, 2011. - S. 100. - ISBN 978-93-80578-77-4 .
Litteratur
- A. Aho , J. Ullman. Teori om analys, översättning och sammanställning. T. 1. Per. från engelska. V. N. Agafonov, red. V. M. Kurochkina . M.: Mir, 1978. 614 sid.
- A. Aho, J. Ullman. Teori om analys, översättning och sammanställning. T. 2. Per. från engelska. A.N. Biryukov och V.A. Serebryakov , red. V. M. Kurochkina. M.: Mir, 1978. 487 sid.
- Alfred W. Aho, Monica S. Lam, Ravi Seti, Jeffrey D. Ullman. Compilers: Principles, Techniques and Tools = Compilers: Principles, Techniques and Tools. - 2:a uppl. - M .: Williams , 2008. - ISBN 978-5-8459-1349-4 .
- Robin Hunter. Grundläggande kompilatorkoncept = essensen av kompilatorer. - M . : "Williams" , 2002. - S. 256. - ISBN 5-8459-0360-2 .
Länkar