Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă

Proiect
10/10 (1 vot)
Domeniu: Calculatoare
Conține 43 fișiere: doc, cpp, h, exe, txt, dll, hm, grm, rc2, ico, plg, clw, aps, dsp, dsw, opt
Pagini : 130 în total
Cuvinte : 34863
Mărime: 1.40MB (arhivat)
Publicat de: Iulian Petre
Puncte necesare: 10
Profesor îndrumător / Prezentat Profesorului: Andrei Ababii

Extras din proiect

Analizorul sintactic este o componentă obligatorie pentru orice compilator. Pentru a obţine un product soft (program) trebuie să creăm un program executabil. Pentru aceasta avem nevoie de un limbaj de programare, de exemplu, un limbaj destul de răspândit ca C++. Într-o fereastră obişnuită poate fi scris un cod în pseudolimbaj care va fi tratat şi prelucrat. Pentru a înţelege propoziţiile scrise avem nevoie de un vocabular şi reguli cu ajutorul cărora vor fi tratate cuvintele introduse de programator. Aceasta se realizează cu ajutorul analizoarelor sintactice.

Rolul analizei sintactice constă în transformarea şirului de atomi lexicali într-o descriere structurală a şirului, dacă şirul este corect, sau generarea unui mesaj de eroare, dacă şirul nu este corect. Descrierea structurală este de obicei un echivalent al arborelui de derivare.

O situaţie des întâlnită este cea în care analizorul sintactic în loc să construiască în mod explicit arborele de derivare, pentru fiecare pas în construcţia arborelui, declanşează anumite acţiuni asupra bazei de date prin intermediul procedurilor semantice.

În principiu, există două strategii de construire a arborelui de derivare: strategia descendentă în care arborele este construit de la rădăcină spre frunze şi strategia ascendentă în care arborele este construit de la frunze spre rădăcină. În ambele cazuri construcţia este ghidată de şirul de la intrare. Corespunzător acestor strategii vom avea analizoare sintactice descendente şi, respectiv, analizoare sintactice ascendente.

O altă clasificare a analizoarelor sintactice este bazată pe existenţa revenirilor. Deoarece modelul sintaxei limbajelor de programare este gramatica independentă de context, modelul analizorului sintactic va fi automatul push-down nedeterminist. Este normal deci ca în simularea funcţionării acestuia în cadrul unui program, să prevedem posibilitatea încercării tuturor alternativelor de continuare a analizei. Abandonarea unei alternative necesită revenirea la situaţia anterioară încercării ei. Asigurarea în orice moment a unei singure posibilităţi de continuare a analizei sintactice permite realizarea de analizoare fără reveniri, deci analizoare eficiente.

Pentru analiza sintactică se utilizează gramatica independentă de context – gramatica , toate producţiile gramaticii sunt de forma: , unde , În lucrarea prezentată se utilizează gramatica independentă de context fără -producţii ( -producţii).

Presupunem că există o gramatică cu un număr de reguli respectiv mic. Atunci construirea analizorului sintactic poate fi nu atât de grea. De obicei numărul producţiilor este destul de mare şi construirea manuală a analizorului este practic imposibilă. De exemplu, în limbajul C++ sau Pascal numărul cuvintelor este mai mult de 1000, iar al regulilor este mai mult de 5000.

În acest caz apare necesitatea automatizării construirii analizoarelor sintactice. Cum s-a menţionat mai sus pot fi utilizate 2 metode: analizoare sintactice descendente şi analizoare sintactice ascendente. În lucrarea dată este elaborat un generator de analizoare sintactice ascendente bazate pe relaţii de precedenţă. Această metoda nu este cea mai avansată, dar oferă posibilitatea construirii automate a analizorului şi în acelaşi timp este uşoară şi înţeleasă.

Dezavantajul acestei metode în comparaţie cu alte metode mai avansate constă în faptul că nu în toate cazurile poate fi efectiv tratată eroarea. Adică la apariţia erorii nu întotdeauna poate fi găsit locul şi denumirea ei. Un alt dezavantaj al acestei metode constă în folosirea iraţională a memoriei calculatorului pentru tabela relaţiilor de precedenţă.

Avantajele acestei metode sunt rapiditatea construirii analizorului şi verificarea şirului de simboluri. Al doilea avantaj constă în uşurinţa (în comparaţie cu alte metode) construirii analizorului.

1. Instrumentariu

Construirea generatorului analizoarelor sintactice este realizată utilizând limbajul de programare Visual C++. Acest limbaj dă posibilităţi avansate programatorului, deoarece el este orientat spre obiect şi în acelaşi timp este orientat spre eveniment. Folosind componentele standarde şi nestandarde este elaborată o interfaţă foarte comodă pentru utilizatori.

Programul dat dă posibilitatea de a obţine o informaţie fără greutăţi, deoarece în orice moment de timp utilizatorul poate obţine informaţia necesară despre corectitudinea gramaticii introduse, despre vectorii terminali şi neterminali, poate arăta conţinutul tabelelor “PRIM-ULTIM” sau de precedenţă. Pentru a obţine comoditatea aceasta sunt utilizate clase standarde CDialog (Fereastră de dialog), CEdit (Edit Box), CButton (Buton), CTabCtrl (Tab Control – pagini speciale) şi componenta care nu intră în pachetul standard Visual C++ 6.0 – componenta ActiveX MSFlexGrid destinată afişării tabelelor. Această componentă utilizează clase adăugătoare CRowCursor, COleFont şi CPicture (sursele acestor clase ale componentei ActiveX ale puteţi vedea în anexă).

Preview document

Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 1
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 2
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 3
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 4
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 5
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 6
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 7
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 8
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 9
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 10
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 11
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 12
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 13
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 14
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 15
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 16
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 17
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 18
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 19
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 20
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 21
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 22
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 23
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 24
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 25
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 26
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 27
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 28
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 29
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 30
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 31
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 32
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 33
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 34
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 35
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 36
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 37
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 38
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 39
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 40
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 41
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 42
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 43
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 44
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 45
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 46
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 47
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 48
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 49
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 50
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 51
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 52
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 53
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 54
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 55
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 56
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 57
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 58
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 59
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 60
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 61
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 62
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 63
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 64
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 65
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 66
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 67
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 68
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 69
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 70
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 71
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 72
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 73
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 74
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 75
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 76
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 77
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 78
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 79
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 80
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 81
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 82
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 83
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 84
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 85
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 86
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 87
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 88
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 89
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 90
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 91
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 92
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 93
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 94
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 95
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 96
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 97
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 98
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 99
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 100
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 101
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 102
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 103
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 104
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 105
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 106
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 107
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 108
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 109
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 110
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 111
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 112
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 113
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 114
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 115
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 116
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 117
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 118
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 119
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 120
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 121
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 122
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 123
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 124
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 125
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 126
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 127
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 128
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 129
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 130
Proiectarea și implementarea unui generator de analizoare sintactice bazate pe relații de precedentă - Pagina 131

Conținut arhivă zip

  • Proiectarea si Implementarea unui Generator de Analizoare Sintactice Bazate pe Relatii de Precedenta
    • COMPILATOR
      • COMPILATOR
        • DEBUG
          • COMPILATOR.EXE
          • MFC42D.DLL
          • MFCO42D.DLL
          • MSVCRTD.DLL
        • RES
          • COMPILATOR.ICO
          • COMPILATOR.RC2
        • 2.CPP
        • 2.H
        • COMPILATOR.APS
        • COMPILATOR.CLW
        • COMPILATOR.CPP
        • COMPILATOR.DSP
        • COMPILATOR.DSW
        • COMPILATOR.H
        • COMPILATOR.NCB
        • COMPILATOR.OPT
        • COMPILATOR.PLG
        • COMPILATOR.RC
        • COMPILATORDLG.CPP
        • COMPILATORDLG.H
        • FONT.CPP
        • FONT.H
        • MSFLEXGRID.CPP
        • MSFLEXGRID.H
        • PICTURE.CPP
        • PICTURE.H
        • README.TXT
        • RESOURCE.H
        • RESOURCE.HM
        • ROWCURSOR.CPP
        • ROWCURSOR.H
        • STDAFX.CPP
        • STDAFX.H
      • LAB1.GRM
      • LAB11.GRM
      • LAB17.GRM
      • PROBA1.GRM
      • PROBA2.GRM
      • PROBA3.GRM
      • PROBA3B.GRM
      • PROBA4.GRM
    • TEORIA_F1
      • ANEXA.DOC
      • TEORIA_F1.DOC

Ai nevoie de altceva?