Analiza sintactică (sau parsing , slang parsing ← English parsing ) în lingvistică și informatică este procesul de comparare a unei secvențe liniare de lexeme (cuvinte, simboluri) a unei limbi naturale sau formale cu gramatica sa formală . Rezultatul este de obicei un arbore de analiză (arborele de sintaxă). Folosit de obicei împreună cu analiza lexicală .
Un parser ( slang parser ← engleză parser ) este un program sau o parte a unui program care efectuează parsarea.
În timpul parsării, textul sursă este convertit într- o structură de date , de obicei un arbore, care reflectă structura sintactică a secvenței de intrare și este potrivită pentru procesarea ulterioară.
De regulă, rezultatul analizei sintactice este structura sintactică a propoziției, prezentată fie sub forma unui arbore de dependență , fie sub forma unui arbore component , fie sub forma unei combinații a primei și a doua metode de reprezentare. .
Orice lucru care are o „ sintaxă ” se pretează la analiza automată.
Cel mai simplu mod de a răspunde la un șir de jetoane de intrare nevalid este să închei analizarea și să afișezi un mesaj de eroare. Cu toate acestea, este adesea util să găsiți cât mai multe erori posibil într-o singură încercare de analiză. Așa se comportă traducătorii celor mai comune limbaje de programare.
Astfel, gestionarea erorilor de analiză are următoarele sarcini:
Cele mai cunoscute strategii de recuperare a erorilor sunt descrise mai jos.
Când se întâlnește o eroare, analizatorul omite jetoanele de intrare pe rând până când este găsit unul dintr-un set special definit de jetoane de sincronizare . De obicei, astfel de jetoane sunt delimitatori, de exemplu: ; , ) sau } . Setul de jetoane de sincronizare trebuie să fie determinat de dezvoltatorul limbajului analizat. Cu această strategie de recuperare, este posibil ca un număr semnificativ de caractere să fie omis fără a verifica erori suplimentare. Această strategie de recuperare este cea mai ușor de implementat.
Uneori, când se întâlnește o eroare, analizatorul poate efectua o corecție locală asupra fluxului de intrare pentru a-i permite să continue. De exemplu, înaintea unui punct și virgulă care separă diverse instrucțiuni într-un limbaj de programare, analizatorul poate închide parantezele care nu au fost încă închise. Acest lucru este mai complex de proiectat și implementat, dar în unele situații, poate funcționa semnificativ mai bine decât recuperarea în panică. Desigur, această strategie este neputincioasă dacă eroarea reală a apărut înainte ca analizatorul să detecteze eroarea.
Cunoașterea celor mai frecvente erori vă permite să extindeți gramatica limbajului cu producții care generează construcții eronate. Când se declanșează astfel de producții, se înregistrează o eroare, dar analizatorul continuă să ruleze normal.
Etape separate de dezvoltare și construcție a traducătorilor pot fi automatizate și efectuate de un computer.
Iată câteva dintre cele mai cunoscute instrumente de dezvoltare a analizorului [2] :
Vezi și comparația generatoarelor de analiză .