Ce este analiza sintaxei?
Analiza sintaxei este a doua fază a procesului de proiectare a compilatorului în care șirul de intrare dat este verificat pentru confirmarea regulilor și structurii gramaticii formale. Acesta analizează structura sintactică și verifică dacă intrarea dată este sau nu în sintaxa corectă a limbajului de programare.
Analiza sintaxei în procesul de proiectare a compilatorului vine după faza de analiză lexicală. Este, de asemenea, cunoscut sub numele de Parse Tree sau Syntax Tree. Arborele Parse este dezvoltat cu ajutorul gramaticii predefinite a limbii. Analizatorul de sintaxă verifică, de asemenea, dacă un anumit program îndeplinește regulile implicate de o gramatică fără context. Dacă se satisface, analizorul creează apoi arborele de analiză al acelui program sursă. În caz contrar, va afișa mesaje de eroare.
În acest tutorial, veți învăța
- De ce aveți nevoie de Syntax Analyzer?
- Terminologie importantă a analizatorului de sintaxă
- De ce avem nevoie de analiză?
- Tehnici de analiză
- Eroare - Metode de recuperare
- Gramatică:
- Convenții notaționale
- Gramatică fără context
- Derivarea gramaticii
- Sintaxă vs. Analizator lexical
- Dezavantaje ale utilizării analizatorilor de sintaxă
De ce aveți nevoie de Syntax Analyzer?
- Verificați dacă codul este valid gramatical
- Analizatorul sintactic vă ajută să aplicați reguli codului
- Vă ajută să vă asigurați că fiecare acoladă de deschidere are un sold corespunzător de închidere
- Fiecare declarație are un tip și că tipul trebuie să existe
Terminologie importantă a analizatorului de sintaxă
Terminologii importante utilizate în procesul de analiză a sintaxei:
- Propoziție: o propoziție este un grup de caractere peste un anumit alfabet.
- Lexemă: un lexemă este unitatea sintactică de cel mai mic nivel al unei limbi (de exemplu, total, start).
- Indicativ: Un indicativ este doar o categorie de lexeme.
- Cuvinte cheie și cuvinte rezervate - Este un identificator care este utilizat ca parte fixă a sintaxei unei declarații. Este un cuvânt rezervat pe care nu îl puteți utiliza ca nume de variabilă sau identificator.
- Cuvinte de zgomot - Cuvintele de zgomot sunt opționale, care sunt inserate într-o declarație pentru a îmbunătăți lizibilitatea propoziției.
- Comentarii - Este o parte foarte importantă a documentației. Se afișează mai ales prin, / * * /, sau // Gol (spații)
- Delimitatori - Este un element sintactic care marchează începutul sau sfârșitul unei unități sintactice. La fel ca o afirmație sau o expresie, „începe” ... „„ sfârșește ”sau {}.
- Set de caractere - ASCII, Unicode
- Identificatori - Este o restricție asupra lungimii care vă ajută să reduceți lizibilitatea propoziției.
- Simbolurile operatorului - + și - efectuează două operații aritmetice de bază.
- Elemente sintactice ale limbajului
De ce avem nevoie de analiză?
O analiză verifică, de asemenea, dacă șirul de intrare este bine format și, dacă nu, respingeți-l.
Următoarele sunt sarcini importante efectuate de analizor în proiectarea compilatorului:
- Vă ajută să detectați toate tipurile de erori de sintaxă
- Găsiți poziția la care a apărut eroarea
- Descriere clară și precisă a erorii.
- Recuperarea după o eroare pentru a continua și a găsi alte erori în cod.
- Nu ar trebui să afecteze compilarea programelor „corecte”.
- Analiza trebuie să respingă textele nevalide raportând erori de sintaxă
Tehnici de analiză
Tehnicile de analiză sunt împărțite în două grupuri diferite:
- Analizare de sus în jos,
- Analizare de jos în sus
Analizare de sus în jos:
În construcția de analiză de sus în jos a arborelui de analiză începe de la rădăcină și apoi se îndreaptă spre frunze.
Două tipuri de analiză de sus în jos sunt:
- Analiza predictivă:
Analiza predictivă poate prezice care producție ar trebui utilizată pentru a înlocui șirul de intrare specific. Analizorul predictiv folosește punctul de așteptare, care indică următoarele simboluri de intrare. Urmărirea înapoi nu este o problemă cu această tehnică de analiză. Este cunoscut sub numele de LL (1) Parser
- Analizare descendentă recursivă:
Această tehnică de analiză analizează recursiv intrarea pentru a crea un arbore prase. Se compune din mai multe funcții mici, una pentru fiecare nonterminal din gramatică.
Analizare de jos în sus:
În analiza de jos în sus în proiectarea compilatorului, construcția arborelui de analiză începe cu părăsirea și apoi procesează spre rădăcina sa. Este, de asemenea, numit analiza shift-reduce. Acest tip de analiză în proiectarea compilatorului este creat cu ajutorul utilizării unor instrumente software.
Eroare - Metode de recuperare
Erori frecvente care apar în analizarea în software-ul sistemului
- Lexical : Numele unui identificator tastat incorect
- Sintactic : paranteză dezechilibrată sau un punct și virgulă lipsă
- Semantic : atribuire de valoare incompatibilă
- Logic : Buclă infinită și cod care nu poate fi accesat
Un analizor ar trebui să poată detecta și raporta orice eroare găsită în program. Deci, ori de câte ori a apărut o eroare, analizorul. Ar trebui să fie capabil să o gestioneze și să continue analiza intrării rămase. Un program poate avea următoarele tipuri de erori în diferite etape ale procesului de compilare. Există cinci metode comune de recuperare a erorilor care pot fi implementate în parser
Recuperare mod declarație
- În cazul în care analizorul întâmpină o eroare, vă ajută să luați măsuri corective. Acest lucru permite restul de intrări și stări să analizeze înainte.
- De exemplu, adăugarea unui punct și virgulă lipsă vine în metoda de recuperare a modului de instrucțiuni. Cu toate acestea, proiectantul de analiză trebuie să fie atent în timp ce face aceste modificări, deoarece o corectare greșită poate duce la o buclă infinită.
Recuperare în panică
- În cazul în care analizorul întâmpină o eroare, acest mod ignoră restul instrucțiunii și nu procesează intrarea de la intrarea eronată la delimitator, ca un punct și virgulă. Aceasta este o metodă simplă de recuperare a erorilor.
- În acest tip de metodă de recuperare, analizorul respinge simbolurile de intrare unul câte unul până când se găsește un singur grup desemnat de jetoane de sincronizare. Jetonele de sincronizare folosesc, în general, delimitatori ca sau.
Recuperare la nivel de expresie:
- Compilatorul corectează programul prin inserarea sau ștergerea jetoanelor. Acest lucru îi permite să procedeze la analiza de unde a fost. Efectuează corectarea intrării rămase. Poate înlocui un prefix al intrării rămase cu un șir, ceea ce îl ajută pe analizator să continue procesul.
Eroare Productions
- Recuperarea producției de erori extinde gramatica pentru limba care generează construcții eronate. Analizatorul efectuează apoi diagnosticarea erorilor despre constructul respectiv.
Corecție globală:
- Compilatorul ar trebui să facă un număr mai mic de modificări posibil în timp ce procesează un șir de intrare incorect. Dat fiind șirul de intrare incorect a și gramatica c, algoritmii vor căuta un arbore de analiză pentru un șir asociat b. La fel ca unele inserții, ștergeri și modificări făcute de jetoane necesare pentru a transforma an în b este cât mai puțin posibil.
Gramatică:
O gramatică este un set de reguli structurale care descriu un limbaj. Gramaticile atribuie structură oricărei propoziții. Acest termen se referă, de asemenea, la studiul acestor reguli, iar acest fișier include morfologie, fonologie și sintaxă. Este capabil să descrie multe, a sintaxei limbajelor de programare.
Regulile formei gramaticale
- Simbolul non-terminal ar trebui să apară în stânga cel puțin unei producții
- Simbolul obiectivului nu trebuie afișat niciodată în dreapta :: = a oricărei producții
- O regulă este recursivă dacă LHS apare în RHS
Convenții notaționale
Simbolul convențiilor notaționale poate fi indicat prin încadrarea elementului între paranteze drepte. Este o secvență arbitrară de instanțe a elementului care poate fi indicată prin încadrarea elementului în paranteze urmată de un simbol asterisc, {...} *.
Este o alegere a alternativei care poate utiliza simbolul în cadrul unei singure reguli. Poate fi inclus între paranteze ([,]) atunci când este necesar.
Două tipuri de zone convenționale notaționale Terminal și non-terminale
1. Terminale:
- Litere mici din alfabet, cum ar fi a, b, c,
- Simboluri operator precum +, -, * etc.
- Simboluri de punctuație precum paranteze, hash, virgulă
- 0, 1, ..., 9 cifre
- Șiruri Boldface, cum ar fi id sau if, orice reprezintă un singur simbol terminal
2. Neterminale:
- Litere majuscule precum A, B, C
- Numele italice minuscule: expresia sau unele
Gramatică fără context
Un CFG este o gramatică recursivă la stânga care are cel puțin o producție de acest tip. Regulile dintr-o gramatică fără context sunt în principal recursive. Un analizor de sintaxă verifică dacă un anumit program îndeplinește sau nu toate regulile gramaticii fără context. Dacă se întrunește, aceste regulatoare de analiză de sintaxă pot crea un arbore de analiză pentru acel program.
expression -> expression -+ termexpression -> expression - termexpression-> termterm -> term * factorterm -> expression/ factorterm -> factor factorfactor -> ( expression )factor -> id
Derivarea gramaticii
Derivarea gramaticii este o secvență de regulă gramaticală care transformă simbolul de început în șir. O derivare dovedește că șirul aparține limbajului gramaticii.
Derivarea cea mai stânga
Când forma sentențială de intrare este scanată și înlocuită în secvența de la stânga la dreapta, aceasta este cunoscută sub numele de derivare din partea stângă. Forma sentențială care este derivată prin derivarea cea mai stânga se numește forma sentențială stânga.
Derivarea cea mai dreaptă
Scanați derivarea din dreapta și înlocuiți intrarea cu reguli de producție, de la dreapta la stânga, secvență. Este cunoscută drept derivarea cea mai dreaptă. Forma sentențială care este derivată din cea mai dreaptă derivare este cunoscută sub numele de formă sentențială dreaptă.
Sintaxă vs. Analizator lexical
Analizator de sintaxă |
Analizator lexical |
Analizatorul de sintaxă se ocupă în principal de constructele recursive ale limbajului. |
Analizatorul lexical ușurează sarcina analizatorului de sintaxă. |
Analizatorul de sintaxă funcționează pe jetoane într-un program sursă pentru a recunoaște structuri semnificative în limbajul de programare. |
Analizatorul lexical recunoaște simbolul într-un program sursă. |
Primește intrări, sub formă de jetoane, de la analizatori lexicali. |
Este responsabil pentru validitatea unui jeton furnizat de analizorul de sintaxă |
Dezavantaje ale utilizării analizatorilor de sintaxă
- Nu va determina niciodată dacă un indicativ este valid sau nu
- Not vă ajută să determinați dacă o operațiune efectuată pe un tip de jeton este validă sau nu
- Nu puteți decide că tokenul este declarat și inițializat înainte de a fi utilizat
rezumat
- Analiza sintaxei este a doua fază a procesului de proiectare a compilatorului care vine după analiza lexicală
- Analizatorul sintactic vă ajută să aplicați reguli codului
- Frază, Lexemă, Token, Cuvinte cheie și cuvinte rezervate, Cuvinte de zgomot, Comentarii, Delimitatori, Set de caractere, Identificatori sunt câțiva termeni importanți utilizați în analiza sintaxei în construcția compilatorului
- Analiza verifică dacă șirul de intrare este bine format și, dacă nu, respingeți-l
- Tehnicile de analiză sunt împărțite în două grupuri diferite: Analizare de sus în jos, analiză de jos în sus
- Lexical, sintactic, semantic și logic sunt unele erori frecvente care apar în timpul metodei de analiză
- O gramatică este un set de reguli structurale care descriu un limbaj
- Simbolul convențiilor notaționale poate fi indicat prin încadrarea elementului între paranteze drepte
- Un CFG este o gramatică recursivă la stânga care are cel puțin o producție de acest tip
- Derivarea gramaticii este o secvență de regulă gramaticală care transformă simbolul de început în șir
- Analizatorul de sintaxă se ocupă în principal de construcții recursive ale limbajului, în timp ce analizatorul lexical ușurează sarcina analizatorului de sintaxă în SGBD.
- Dezavantajul metodei analizorului de sintaxă este că nu va determina niciodată dacă un simbol este valid sau nu