Syntaxanalys: Kompilator uppifrån och ner & Analyseringstyper från botten upp

Innehållsförteckning:

Anonim

Vad är syntaxanalys?

Syntaxanalys är en andra fas av kompilatorns designprocess där den angivna inmatningssträngen kontrolleras för bekräftelse av regler och struktur för den formella grammatiken. Den analyserar den syntaktiska strukturen och kontrollerar om den angivna ingången är i rätt syntax för programmeringsspråket eller inte.

Syntaxanalys i Compiler Design-processen kommer efter den Lexikala analysfasen. Det är också känt som Parse Tree eller Syntax Tree. Parse Tree är utvecklat med hjälp av fördefinierad språkgrammatik. Syntaxanalysatorn kontrollerar också om ett visst program uppfyller reglerna i en sammanhangsfri grammatik. Om det uppfyller, skapar tolkaren sedan analysträdet för det källprogrammet. Annars visas felmeddelanden.

Syntaxanalysatorprocess

I den här handledningen lär du dig

  • Varför behöver du Syntax Analyzer?
  • Viktig syntaxanalysatorterminologi
  • Varför behöver vi analysera?
  • Analyseringstekniker
  • Fel - Återställningsmetoder
  • Grammatik:
  • Notationella konventioner
  • Kontextfri grammatik
  • Grammatisk härledning
  • Syntax vs Lexical Analyzer
  • Nackdelar med att använda syntaxanalysatorer

Varför behöver du Syntax Analyzer?

  • Kontrollera om koden är giltig grammatiskt
  • Den syntaktiska analysatorn hjälper dig att tillämpa regler på koden
  • Hjälper dig att se till att varje öppningsstag har motsvarande slutbalans
  • Varje deklaration har en typ och att typen måste finnas

Viktig syntaxanalysatorterminologi

Viktiga terminologier som används i syntaxanalysprocessen:

  • Mening: En mening är en grupp av tecken över något alfabet.
  • Lexeme: Ett lexeme är den lägsta syntaktiska enheten i ett språk (t.ex. total, start).
  • Token: En token är bara en kategori av lexem.
  • Nyckelord och reserverade ord - Det är en identifierare som används som en fast del av syntaxen för ett uttalande. Det är ett reserverat ord som du inte kan använda som variabelnamn eller identifierare.
  • Bullerord - Bullerord är valfria som infogas i ett uttalande för att förbättra läsbarheten av meningen.
  • Kommentarer - Det är en mycket viktig del av dokumentationen. Den visas mestadels av, / * * / eller // Tom (mellanslag)
  • Avgränsare - Det är ett syntaktiskt element som markerar början eller slutet av någon syntaktisk enhet. Som ett uttalande eller uttryck, "börja" ... "slut" eller {}.
  • Teckenuppsättning - ASCII, Unicode
  • Identifierare - Det är begränsningar i längden som hjälper dig att minska läsbarheten av meningen.
  • Operatörssymboler - + och - utför två grundläggande aritmetiska operationer.
  • Syntaktiska delar av språket

Varför behöver vi analysera?

En analys kontrollerar också att ingångssträngen är välformad, och om inte, avvisa den.

Följande är viktiga uppgifter som parsern utför i kompilerdesign:

  • Hjälper dig att upptäcka alla typer av syntaxfel
  • Hitta den position där felet har inträffat
  • Tydlig och korrekt beskrivning av felet.
  • Återställning från ett fel för att fortsätta och hitta fler fel i koden.
  • Bör inte påverka sammanställningen av "korrekta" program.
  • Analysen måste avvisa ogiltiga texter genom att rapportera syntaxfel

Analyseringstekniker

Analyseringstekniker är indelade i två olika grupper:

  • Uppifrån och ner analysering,
  • Nedre upp-analysering

Uppifrån och ner analysering:

I analysen uppifrån och ner av analysen börjar parstreet vid roten och fortsätter sedan mot bladen.

Två typer av top-down-analysering är:

  1. Predictive Parsing:

Predictive parse kan förutsäga vilken produktion som ska användas för att ersätta den specifika inmatningssträngen. Den prediktiva tolkaren använder blick framåt, som pekar mot nästa inmatningssymboler. Backtracking är inte ett problem med denna tolkningsteknik. Det är känt som LL (1) Parser

  1. Recursive Descent Parsing:

Denna analyseringsteknik analyserar ingången rekursivt för att skapa ett prase-träd. Den består av flera små funktioner, en för varje icke-terminal i grammatiken.

Nedre upp-analysering:

I analysen nedifrån och upp i kompilerdesignen börjar konstruktionen av parse-trädet med ledigheten och sedan bearbetas mot roten. Det kallas också som skiftreducerande tolkning. Denna typ av analys i kompilerdesign skapas med hjälp av vissa programverktyg.

Fel - Återställningsmetoder

Vanliga fel som uppstår vid tolkning i systemprogramvaran

  • Lexikal : Namnet på en felaktigt skriven identifierare
  • Syntaktisk : obalanserad parentes eller saknat semikolon
  • Semantisk : inkompatibel värdetilldelning
  • Logisk : Oändlig slinga och kod som inte kan nås

En analysator ska kunna upptäcka och rapportera alla fel som finns i programmet. Så, när ett fel inträffade tolkar. Den ska kunna hantera den och fortsätta att analysera den återstående ingången. Ett program kan ha följande typer av fel i olika sammanställningssteg. Det finns fem vanliga felåterställningsmetoder som kan implementeras i parsern

Återställning av uttalande-läge

  • I fallet när analysatören stöter på ett fel hjälper det dig att vidta korrigerande steg. Detta gör att resten av ingångar och tillstånd kan analyseras framåt.
  • Till exempel, att lägga till en saknad semikolon saknas kommer i metod för återställningsläge. Analysdesignern måste dock vara försiktig när de gör dessa ändringar, eftersom en felkorrigering kan leda till en oändlig slinga.

Panic-Mode återställning

  • I fallet när parsern stöter på ett fel ignorerar detta läge resten av uttalandet och bearbetar inte inmatning från felaktig inmatning till avgränsning, som en semikolon. Detta är en enkel felåterställningsmetod.
  • I denna typ av återställningsmetod avvisar parsern inmatningssymboler en efter en tills en enda angiven grupp synkroniserande tokens hittas. De synkroniserande tokens som vanligtvis använder avgränsare som eller.

Frasnivååterställning:

  • Compiler korrigerar programmet genom att infoga eller ta bort tokens. Detta gör att den kan fortsätta att analysera från var den var. Den utför korrigering av den återstående ingången. Det kan ersätta ett prefix av den återstående ingången med någon sträng, detta hjälper tolkaren att fortsätta processen.

Felproduktioner

  • Felproduktionsåterställning utvidgar grammatiken för språket som genererar felaktiga konstruktioner. Parsern utför sedan feldiagnostik om den konstruktionen.

Global korrigering:

  • Kompilatorn ska göra mindre antal ändringar som möjligt medan hanterar en felaktig inmatningssträng. Med tanke på felaktig inmatningssträng a och grammatik c kommer algoritmer att söka efter ett analyseringsträd för en relaterad sträng b. Liksom vissa insättningar är borttagningar och modifieringar av tokens som behövs för att förvandla ett till b så lite som möjligt.

Grammatik:

En grammatik är en uppsättning strukturella regler som beskriver ett språk. Grammatik tilldelar struktur till vilken mening som helst. Denna term hänvisar också till studien av dessa regler, och den här filen inkluderar morfologi, fonologi och syntax. Den kan beskriva många syntaxer för programmeringsspråk.

Regler för formulärgrammatik

  • Den icke-terminala symbolen ska visas till vänster om minst en produktion
  • Målsymbolen ska aldrig visas till höger om :: = för någon produktion
  • En regel är rekursiv om LHS visas i sin RHS

Notationella konventioner

Symbol för notationskonventioner kan anges genom att stänga in elementet inom hakparenteser. Det är en godtycklig sekvens av instanser av elementet som kan indikeras genom att omsluta elementet i hakparentes följt av en asterisk-symbol, {...} *.

Det är ett val av alternativ som kan använda symbolen inom den enskilda regeln. Den kan omslutas av parentes ([,]) vid behov.

Två typer av Notational konventioner område Terminal och icke-terminaler

1. terminaler:

  • Små bokstäver i alfabetet som a, b, c,
  • Operatörssymboler som +, -, *, etc.
  • Skiljetecken som parenteser, hash, komma
  • 0, 1,…, 9 siffror
  • Boldface strängar som id eller om, något som representerar en enda terminal symbol

2. icke-terminaler:

  • Stora bokstäver som A, B, C
  • Kursiva små bokstäver: uttrycket eller något

Kontextfri grammatik

En CFG är en vänsterrekursiv grammatik som har minst en produktion av typen. Reglerna i en sammanhangsfri grammatik är främst rekursiva. En syntaxanalysator kontrollerar att specifikt program uppfyller alla regler för kontextfri grammatik eller inte. Om den uppfyller kan dessa regler syntaxanalysatorer skapa ett analysträd för det programmet.

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

Grammatisk härledning

Grammatisk härledning är en sekvens av grammatikregel som förvandlar startsymbolen till strängen. En härledning visar att strängen tillhör grammatikens språk.

Vänsterledningen

När den sententiella inmatningsformen skannas och ersätts i vänster till höger sekvens, är den känd som den mest vänstra härledningen. Sententialformuläret som härleds av derivatorn längst till vänster kallas den sententiella formuläret.

Högst härledning

Avsökningen längst till höger och ersätt inmatningen med produktionsregler, från höger till vänster, sekvens. Det är känt som den högsta härledningen. Sententialformuläret som härrör från härledningen längst till höger kallas höger-sententiell form.

Syntax vs Lexical Analyzer

Syntaxanalysator

Lexical Analyzer

Syntaxanalysatorn handlar främst om rekursiva konstruktioner av språket.

Den lexikala analysatorn underlättar syntaxanalysatorns uppgift.

Syntaxanalysatorn arbetar på tokens i ett källprogram för att känna igen meningsfulla strukturer i programmeringsspråket.

Den lexikaliska analysatorn känner igen symbolen i ett källprogram.

Den tar emot ingångar, i form av tokens, från lexikaliska analysatorer.

Det ansvarar för giltigheten av en token som tillhandahålls av

syntaxanalysatorn

Nackdelar med att använda syntaxanalysatorer

  • Det kommer aldrig att avgöra om en token är giltig eller inte
  • Inte hjälper dig att avgöra om en operation som utförs på en token-typ är giltig eller inte
  • Du kan inte bestämma att token deklareras och initialiseras innan den används

Sammanfattning

  • Syntaxanalys är en andra fas av kompilatorns designprocess som kommer efter lexikalisk analys
  • Den syntaktiska analysatorn hjälper dig att tillämpa regler på koden
  • Mening, Lexeme, Token, Nyckelord och reserverade ord, Bullerord, Kommentarer, Avgränsare, Teckenuppsättning, Identifierare är några viktiga termer som används i syntaxanalysen i kompilerkonstruktionen
  • Parse kontrollerar att ingångssträngen är välformad, och om inte, avvisa den
  • Parsingstekniker är uppdelade i två olika grupper: Top-Down Parsing, Bottom-Up Parsing
  • Lexikal, syntaktisk, semantisk och logisk är några vanliga fel uppträder under analyseringsmetoden
  • En grammatik är en uppsättning strukturella regler som beskriver ett språk
  • Symbol för notationskonventioner kan anges genom att stänga in elementet inom hakparenteser
  • En CFG är en vänsterrekursiv grammatik som har minst en produktion av typen
  • Grammatisk härledning är en sekvens av grammatikregel som förvandlar startsymbolen till strängen
  • Syntaxanalysatorn hanterar huvudsakligen rekursiva konstruktioner av språket medan den lexiska analysatorn underlättar syntaxanalysatorns uppgift i DBMS
  • Nackdelen med Syntax analysator metod är att den aldrig kommer att avgöra om en token är giltig eller inte