Syntaxanalys: Compiler Top Down & Bottom Up Parsingstyper
Vad รคr syntaxanalys?
Syntaxanalys รคr en andra fas av kompilatorns designprocess dรคr den givna 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 givna inmatningen รคr i korrekt syntax fรถr programmeringssprรฅket eller inte.
Syntaxanalys i kompilatordesignprocessen kommer efter den lexikaliska analysfasen. Det รคr ocksรฅ kรคnt som Parse Tree eller Syntax Tree. Parse Tree รคr utvecklad med hjรคlp av fรถrdefinierad grammatik fรถr sprรฅket. Syntaxanalysatorn kontrollerar ocksรฅ om ett givet program uppfyller reglerna som antyds av en kontextfri grammatik. Om den uppfyller, skapar parsern sedan analystrรคdet fรถr det kรคllprogrammet. Annars kommer det att visa felmeddelanden.

Varfรถr behรถver du Syntax Analyser?
- Kontrollera om koden รคr grammatiskt giltig
- Den syntaktiska analysatorn hjรคlper dig att tillรคmpa regler pรฅ koden
- Hjรคlper dig att se till att varje รถppningsstag har en motsvarande slutbalans
- Varje deklaration har en typ och att typen mรฅste finnas
Viktig syntaxanalysatorterminologi
Viktiga terminologier som anvรคnds i syntaxanalysprocesser:
- Mening: En mening รคr en grupp av tecken รถver nรฅgot alfabet.
- Lexem: Ett lexem รคr den syntaktiska enheten pรฅ lรคgsta nivรฅ i ett sprรฅk (t.ex. totalt, 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 en sats. Det รคr ett reserverat ord som du inte kan anvรคnda som variabelnamn eller identifierare.
- Buller ord โ Brusord รคr valfria som infogas i ett uttalande fรถr att fรถrbรคttra meningens lรคsbarhet.
- Kommentarer โ Det รคr en vรคldigt viktig del av dokumentationen. Det visas oftast med /* */, eller//Blank (mellanslag)
- avgrรคnsare โ Det รคr ett syntaktisk element som markerar bรถrjan eller slutet av nรฅgon syntaktisk enhet. Som ett pรฅstรฅende eller uttryck, "bรถrja"..."slut" eller {}.
- Teckenuppsรคttning โ ASCII, Unicode
- Identifierare โ Det รคr en begrรคnsning av lรคngden som hjรคlper dig att minska meningens lรคsbarhet.
- Operator symboler โ + och โ utfรถr tvรฅ grundlรคggande aritmetiska operationer.
- Syntaktiska delar av sprรฅket
Varfรถr behรถver vi Parsing?
En analys kontrollerar ocksรฅ att inmatningsstrรคngen รคr vรคlformad, och om inte, avvisa den.
Fรถljande รคr viktiga uppgifter som utfรถrs av parsern i kompilatordesign:
- 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 ytterligare fel i koden.
- Bรถr inte pรฅverka kompileringen av "korrekta" program.
- Analysen mรฅste avvisa ogiltiga texter genom att rapportera syntaxfel
Analystekniker
Analystekniker รคr indelade i tvรฅ olika grupper:
- Top-down parsing,
- Bottom-Up Parsing
Top-Down Parsing
I parsningen uppifrรฅn och ned bรถrjar konstruktionen av parsetrรคdet vid roten och fortsรคtter sedan mot lรถven.
Tvรฅ typer av top-down-analys รคr:
- Prediktiv analys:
Predictive parse kan fรถrutsรคga vilken produktion som ska anvรคndas fรถr att ersรคtta den specifika indatastrรคngen. Den prediktiva parsern anvรคnder blick framรฅt-punkt, som pekar mot nรคsta inmatningssymboler. Backtracking รคr inte ett problem med denna analysteknik. Den รคr kรคnd som LL(1) Parser
- Rekursiv nedstigningsanalys:
Denna analysteknik analyserar indata rekursivt fรถr att skapa ett prasetrรคd. Den bestรฅr av flera smรฅ funktioner, en fรถr varje icke-terminal i grammatiken.
Bottom-Up Parsing
I parsningen underifrรฅn och upp i kompilatordesign bรถrjar konstruktionen av parsetrรคdet med bladet och sedan bearbetar det mot sin rot. Det kallas ocksรฅ fรถr shift-reduce parsing. Denna typ av parsning i kompilatordesign skapas med hjรคlp av nรฅgra programverktyg.
Fel โ ร terstรคllningsmetoder
Vanliga fel som uppstรฅr vid analys i systemprogramvara
- Lexikalisk: Namn pรฅ en felaktigt skriven identifierare
- Syntaktisk: obalanserad parentes eller ett semikolon som saknas
- Semantisk: inkompatibel vรคrdetilldelning
- logisk: Oรคndlig slinga och oรฅtkomlig kod
En parser ska kunna upptรคcka och rapportera alla fel som hittas i programmet. Sรฅ, nรคrhelst ett fel intrรคffade, tolken. Den borde kunna hantera det och fortsรคtta att analysera den รฅterstรฅende inmatningen. Ett program kan ha fรถljande typer av fel vid olika kompileringsprocesser. Det finns fem vanliga felรฅterstรคllningsmetoder som kan implementeras i parsern
ร terstรคllning av utlรฅtandelรคge
- I de fall dรฅ parsern stรถter pรฅ ett fel, hjรคlper det dig att vidta korrigerande รฅtgรคrder. Detta tillรฅter resten av ingรฅngar och tillstรฅnd att analysera framรฅt.
- Till exempel, att lรคgga till ett saknat semikolon kommer i รฅterstรคllningsmetoden fรถr statement mode. Emellertid mรฅste analysdesignern vara fรถrsiktig nรคr du gรถr dessa รคndringar eftersom en felaktig korrigering kan leda till en oรคndlig loop.
ร terstรคllning av paniklรคge
- I fallet nรคr parsern stรถter pรฅ ett fel, ignorerar detta lรคge resten av satsen och bearbetar inte indata frรฅn felaktig inmatning till avgrรคnsare, som ett semikolon. Detta รคr en enkel felรฅterstรคllningsmetod.
- I denna typ av รฅterstรคllningsmetod avvisar tolken inmatningssymboler en efter en tills en enda utsedd grupp av synkroniseringstokens hittas. Synkroniseringssymbolerna anvรคnder vanligtvis avgrรคnsare som eller.
ร terstรคllning pรฅ frasnivรฅ
- Kompilatorn 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 fรถr den รฅterstรฅende inmatningen med nรฅgon strรคng, vilket hjรคlper parsern att fortsรคtta processen.
Felproduktioner
- ร terstรคllning av felproduktion utรถkar grammatiken fรถr sprรฅket som genererar de felaktiga konstruktionerna. Parsern utfรถr sedan feldiagnostik om den konstruktionen.
Global korrigering
- Kompilatorn bรถr gรถra fรคrre antal รคndringar som mรถjligt under bearbetning av en felaktig inmatningsstrรคng. Givet felaktig inmatningsstrรคng a och grammatik c, kommer algoritmer att sรถka efter ett analystrรคd fรถr en relaterad strรคng b. Liksom vissa infogningar, raderingar och modifieringar gjorda av tokens som behรถvs fรถr att omvandla an till b รคr 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 studiet av dessa regler, och den hรคr filen inkluderar morfologi, fonologi och syntax. Det รคr kapabelt att beskriva mรฅnga, av syntaxen fรถr programmeringssprรฅk.
Formregler grammatik
- 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 fรถrekommer i dess RHS
Notationskonventioner
Symbol fรถr notationskonventioner kan indikeras genom att elementet omges av hakparenteser. Det รคr en godtycklig sekvens av instanser av elementet som kan indikeras genom att omsluta elementet med klammerparenteser fรถljt av en asterisksymbol, { โฆ }*.
Det รคr ett val av alternativet som kan anvรคnda symbolen inom den enda regeln. Den kan omges av parentes ([,] ) vid behov.
Tvรฅ typer av notationskonventioner omrรฅdet Terminal och Non-terminals
1. Terminaler:
- Smรฅ bokstรคver i alfabetet som a, b, c,
- Operator-symboler som +,-, * osv.
- Skiljetecken som parenteser, hash, kommatecken
- 0, 1, โฆ, 9 siffror
- Fet strรคngar som id eller if, allt som representerar en enda terminalsymbol
2. Icke-terminaler:
- Versaler som A, B, C
- Kursiva namn med smรฅ bokstรคver: uttrycket eller nรฅgra
Sammanhang gratis grammatik
En CFG รคr en vรคnsterrekursiv grammatik som har minst en produktion av denna typ. Reglerna i en kontextfri grammatik รคr huvudsakligen rekursiva. En syntaxanalysator kontrollerar att ett specifikt program uppfyller alla regler fรถr kontextfri grammatik eller inte. Om den uppfyller, kan dessa regelsyntaxanalysatorer skapa ett analystrรคd fรถr det programmet.
expression -> expression -+ term expression -> expression โ term expression-> term term -> term * factor term -> expression/ factor term -> factor factor factor -> ( expression ) factor -> id
Grammatikavledning
Grammatikavledning รคr en sekvens av grammatikregel som omvandlar startsymbolen till strรคngen. En hรคrledning bevisar att strรคngen tillhรถr grammatikens sprรฅk.
Hรคrledning lรคngst till vรคnster
Nรคr meningsformen av inmatning skannas och ersรคtts i sekvens frรฅn vรคnster till hรถger, kallas det fรถr avledning lรคngst till vรคnster. Den meningsform som hรคrleds av hรคrledningen lรคngst till vรคnster kallas fรถr den vรคnstra meningsformen.
Hรคrledning lรคngst till hรถger
Hรคrledning lรคngst till hรถger skannar och ersรคtt indata med produktionsregler, frรฅn hรถger till vรคnster, sekvens. Det รคr kรคnt som hรคrledning lรคngst till hรถger. Den meningsform som รคr hรคrledd frรฅn den hรถgra hรคrledningen รคr kรคnd som hรถger-sententialform.
Syntax vs. Lexical Analyzer
| Syntaxanalysator | Lexical Analyzer |
|---|---|
| Syntaxanalysatorn sysslar frรคmst med rekursiva konstruktioner av sprรฅket. | Den lexikaliska 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 token i ett kรคllprogram. |
| Den tar emot indata, i form av tokens, frรฅn lexikalanalysatorer. | Den ansvarar fรถr giltigheten av en token som tillhandahรฅlls av
syntaxanalysatorn |
Nackdelar med att anvรคnda Syntax Analyzers
- Det kommer aldrig att avgรถra om en token รคr giltig eller inte
- Not hjรคlper dig att avgรถra om en operation utfรถrd pรฅ en tokentyp รคr giltig eller inte
- Du kan inte bestรคmma att token ska deklareras och initieras innan den anvรคnds
Sammanfattning
- Syntaxanalys รคr en andra fas av kompilatordesignprocessen som kommer efter lexikal analys
- Den syntaktiska analysatorn hjรคlper dig att tillรคmpa regler pรฅ koden
- Mening, Lexeme, Token, Nyckelord och reserverade ord, Brusord, Kommentarer, Avgrรคnsare, Teckenuppsรคttning, Identifierare รคr nรฅgra viktiga termer som anvรคnds i Syntax Analysis i kompilatorkonstruktionen
- Parse kontrollerar att inmatningsstrรคngen รคr vรคlformad, och om inte, avvisa den
- Parsingtekniker รคr indelade i tvรฅ olika grupper: Top-Down Parsing, Bottom-Up Parsing
- Lexikal, syntaktisk, semantisk och logisk รคr nรฅgra vanliga fel som uppstรฅr under analysmetoden
- En grammatik รคr en uppsรคttning strukturella regler som beskriver ett sprรฅk
- Symbol fรถr notationskonventioner kan indikeras genom att elementet omges av hakparenteser
- En CFG รคr en vรคnsterrekursiv grammatik som har minst en produktion av denna typ
- Grammatikavledning รคr en sekvens av grammatikregel som omvandlar startsymbolen till strรคngen
- Syntaxanalysatorn behandlar huvudsakligen rekursiva konstruktioner av sprรฅket medan den lexikaliska analysatorn underlรคttar syntaxanalysatorns uppgift i DBMS
- Nackdelen med Syntax analysatormetoden รคr att den aldrig kommer att avgรถra om en token รคr giltig eller inte


