Sunteți pe pagina 1din 86
SIMONA MOTOGNA ‘Deserieea CIP a Biblio. Naina a Remini ‘MOTOGNA, s. ‘Metode de poeta» compiluoueor/ Simona ‘Motogne.- Cl Nepoce : Eaiturs Abuse, 2006 "Bbloge ISBN 973-650.172-8 62.00163:004.4722(075.) Referent io. nit Dr. loin Mircea Boia ‘ecules de Matt Informatie ‘Universite "Babey Bol Cha Napooe ™ Creer sete aia Alb Dieetor etd Smrends Deegan ‘Tekmoreactare computeith SD Spec Deign ope ‘SB'Speciat Design Tipsct EBITURA ALBASTRA ira este acrediaté de CNCSIS (Consl Neional al Carer Sti in {vital Sopesiog) eu mumdnl 1142 din 30 nie 2003 geste recomandat Consuls Naps! de Astrea Tirlor i Diplomelor verse, Copysght ©2006 ‘Toate depts aspreaesie eri aparin 22. Cata de Btu’ Abas) ‘Reproducerea integral seu parla «textual su sear in aceasth cst ‘te posbld mua ou aardul prea a srs l Case de Baar Alba’, CUPRINS PREFATA 1, INTRODUCERE LA. Coste un compllator? ... « 1.2) Istorc—limbajede'programare gi compilatoare + + 18. Spocifcarea unui limbaj de progremare 2, ANALIZA LEXICALA 21. Detectare i clasificare : 22. Codificare . 2, Modelalsnalizoruul lexical 23.1. Bxpresi regulare 23.2. Automate finite 24, Tabel de simbolusi 2.4.1. ‘Tabele do disperse « 25, Generator de anal lexical - lee 25.1. Formatul fiiarului de speciicatie 252. Mod de functionare . . 2.6. Relat dintre analizr lexical gi analizorcintactic @ ANALIZA sINTACTICA a intactc descendent cu revit. - ‘Modest anallzorullsntactic descendent cu reves a2. Knalizr sintactie L(K) «= 3.2.1. Gramatici de tip IL) EIB Analnorlsineatie (0) ‘323. Construiestabeul de analiskLL(0) | | 3.2.4. Functionarea analizorului sintactic LL(1) 325, Call ner FIST 9 FOLLOW pa tse bocleene 43. Anatzcae sitacioe ERG) 331. Gramatie de tip LRG) 3.3.2. Anslizor sintaetic LR(0) 433. Analorsinaetie SLR ‘3.3.4. Analizor sintactic LR(1) B35. Analizorsitacic LALR 3.4. Studiul comparstiv al analaoareor sintactice 3.5, Coneratoare de analik sintactick ‘35.1. Generator de analié sintacticl deacendent& - Eigen 352. Gonerator de anslisi sintactcl aecendents-yece |. ANALIZA SEMANTICA, 41. Scopal s instromentele analiza sematice 42. Arborele de sintax abetractt 43, Tdentifcases 44, Verficares tipurlor 45. Gramatici de atribute 45:1. Evaluator de atribute 4.5.2. Clase speciale de gramaticl de atrbute 48. Metode manuale cece : 46.1. Grafl oval de control 462. Interpretaresimbolick 46.3. Beustii de Bux de date GENERARPA CODULU! INTERMEDIAR 5. Cod intermediar ‘52. Cod cu tei adrese : 5.2.1. Reprezentarea codulul cu tee edrese 5.2.2. Trecerea la cod cu trei adese-e arborelisintectie |. OPTIMIZAREA CODULUI INTERMEDIAR, 6.1. Graful de ux al nul program 6.2. Optimize locale 63. Optimizaren ciclurilor - GENBRAREA CODULUI OBIECT. 7A. Generare codului pentru calelatoare ev scumulator : 172. Gonerare codului pentru calelatoare eu regigti 73. Alocares regigtrilor . 734. Alocarea regstilor bazatX pe colorareagrafurlor 7.4 Seloctarea instrvtiunilor 74.1. Algoritmul lui Sethi ~ UDtoan 15. Forma codului obit 0 2 2 98 98 99 102 105 106 109 ud nd 2 us 18 wi wat vs 126 S129 134 134 137 139 aa a us 1d us 150 152 155 8. TRATAREA ERORILOR, 8.1. Trotatea erorilor in analiza lexical 82, Teatarea erorilor in analiza sintacick «|< 82.1. Tyataros eroilor in analiza sintactck LL(0) 82.2. Tratares erorilor in analiza sintactieS LR{L) BIBLIOGRAFIE as7 158 159 2460 160 164 PREFATA ‘Unul diate cele mai dinemice domeni,informatic, 9 ajuns 8 fe con- siderat asta o sting in sino, eu subdomonii variate, at6t Voretice, cSt {9 practie. Timpul « demonstrat c& fn momentul in care putem elabore ‘on model metemetic eau algoritmic penta o anumitk preblem’, gansa de ‘so rezolva gl in plus do e gis osoluti oficiont, erste consderabll ‘Metodelo de proisctare gi algortmi din constructia compilatoarelor coglindes fidelevolutiaInformaticll. Este de remarcatfeptal cl unee ide fa reprezontato asemenea inovaie la timpul lor inci au rémas standarde timp indelungat (doukzes, uneor chiar teizaci de ani). Pe de altS parte, ‘paritia de noi Lmbsje de programare, nol arhitectrl de eslculatoare, nol sisteme de operare au evut fecare in pertaefacte asupra compilatoarelor. Carton de fap se dorogte efi un ghid n tudiorea acostui domeniu, find util celor eare dorese #injeleag proiectarea g funetlonares ual compl Istor, considerate cunostiinfe do bez8 necesareorickrui bun progremator. Jn plus, en poate & ult studenilr de la secile de Informaticd, Matom- atid ~ Informatie si Caleulatoaze care urmeseX un curs pe aceast tern. De ce? Existh suficionte motive pentru a ne pune aceastiintrebare. Sper ca cititoral sgl regkseasel ecopurile in cel putin unul dintze aceste argu: ‘mente 4) Constructia compilatoarelor reprezintto ramuri fundamentali ain- Jormatici (si in plus, woul diate primele domenit care ex primit soest title), doterit unei structuriri judiiosse probleme, dosevierii unui ‘mecanism solid pentru algoritm g foloirit de utilitare (istrumente, gen- leratoace) ori de eéte ori o posi Structuraroa se ofr, in primol rind, la sopararea dintre ansli gsin- texk: compilatorul analizeasl datele de intrare, construisteo reprezentare semantic a lor gi sintetizoacd apol datole de igre. Structurarea ponte fi considerst gi pe un nivel urmitor, analiza gl sinteza find divizate fn fazele compilir Astfl, un analizor lexeal sau Sintactic pot f flosite cu succes pentru mai multe limbaje sau masini, modifieind dosr datele de intrare. ‘Agortili cei mai performanti pentru fosele de analizi au fst construlti 7 pe haze sezultatalor din teorlalimbajelor formal, asiguréndu-se mocanis- ‘nul formal. Folosires expresilr regulare ia analiealexieall, espectiv a tramaticlor ndependente de context in analiza sintacticd sunt eale mai Hustrasive exemple 2) Constructia compilatoarelor are o pliabiltate foarte larg: Reach sormlé Ia prima vedere a acestei tematic ax fi: "Bw nu voi serie nico- atk un compilator. De ce eX mi Intereseze acest domeniu". Tohnicle 4% slgortzall propril constructiet complatoarelor sunt foloste cu succes fh alte domeni- prolucrarea fyierelor HTML, XML, conversia ierelor, verfcarea corectitudinii expresilor evtmotice, intorpretareafisirelor de comensi gimulte altel. Orico informatie care are o structuré co poste 4 decors prints-o gramatick poste profit de algoritmii din construcia ‘compilatoarcler. '8) Constructia compiatoarelor imbundifesteexperienfa de programa- se: implomentarea diferiflr algoritm din fcele compilatllnu ese chiar 0 problemi trivial: alegeresstructurilor de date potrvite g implomentarea, ‘fcent s algaritmilor ajuti la acumularea uael experienfeInsemnate de rogramare. In plus, un programator este, de fapt, doar un utilizator a) unui com- pillator. Studi scestui domeniu, inelegeres mecanismelor "ascunse" de bles de apfeavea une combina de taste sau a mouse-uli va permite ‘unui bun progremator ek evite unele situa, glseaset ugar rezolvarea lel erori de compilare sau chiar de execute sis foloveacel le maximum posible nba Structure elit cuprinde opt eapitle, eave urmenai structurarea pe face a un complletor, mot pentru care aceasth ardine ar trobui urmetd in parcurgeroa csi Fiecare capital eat ase structurt Inet parneste de In nofiuni de beak gi algoritmi fondamentali corespunsitorl fel re spective da compiler si continu cu exemple i stu de ca2, pentru o mal ‘bund ingelegere. Capitola 1 presint& structure generalk s wnui compllator, implsiren pe etape soperaillor exeeutate go scurtd prezentare relate! dinte com Pilatoare gi inbaje de programare, stat din punct de vedere cronologic cSt fal moduli in care un limba) trebule desris pentru a putes implementa {in compllator destinat li. CCapitolul 2 descrie prima fae a procesulul de compilare gi anume, snsliza lexials. Sunt preventate actiualle urmérite de analiza lexical, rmodelele matematice ce se pot folost gi, in incheiere, generatorl de analins lexical lex ‘In capitol 3, analira sintactig, sunt presentate eAteva metode de snsli cintactiel, incepind eu oea mal simp contiqulind cu cele mai 8 cfilante. Flecsre metods este descris prin elgoritmi care pot freativ wor {mplementesi si prin exemple. fn inchlore sunt descrse dous genaretoare de analisk sntactici. Capitol 4 este dedicat snalicel semantice, spesifcéady-se actiuile ‘urmiete gi presontindu-se prinipalele modalti de efectuare & scestel face: gramstici de atribute, iaterpretare simbolies, respect eousil de fu de date ‘Ganerares codululintermediar face oblectul capltolulul §. Sunt deserise forme coduluiintarmodiar, puadadu-se accent pe codul cu trei adreve gi fs reprezentiilor ecesuia. ‘Acest capitol este urmat de capitol 6 destinat operatilor de opti rizare a codulul intermedia, in care posibilitiile de optimizace sunt stu: diate din punct do vedere al costulu lor Capitol 7 prezintt ultims etapa din procestl de compilare, gener area codului obiect,discuténdu-se despre cerinjele de care depinde forma programului obit, modul fn care noesta este generat in funefie de pal caleuatorulul t despre optimietrile ce s pot eplica pentru o eompilare sat fic CCapitolul 8 descrieerorile care pot apirea in timpal compllill, scssten find clasificate in fonctio de faze In care apar, puténdu-te ate alege ‘iferite stratagii specifics pentra traces eroilor. "Experienta acumulaté in predarea cureurllor de limba formale gi com piletoare a sectia de Informaticy a contituit wn punct de plecare slid in flaborarea acestel ofr Generaile de studangi cu care aim lucrat aau fjutat of structure gt sk corectae materiale, Dorese «8 mulgumesc in primul rind domnulul Cornel Tests, de la care am invitat notiunile de teorls compiliit gt care de-a lungul tap lui am sprijnit gt Indrumat conseevent. ‘Mulfumizile mele se indveapt spre domnii profdr. Florian Boian st Miiton Frentiu, pentru spel, ‘ncurajrile sl aprecievle relative la acest manuscrs. Adreserreeunogtints mea colegilo prof. dr. Horla Pop g ais. ded. Adziana Tarts pentru aj torul dat in redectarea gl corectarea menuscrsul Simona Motogna, i 1. INTRODUCERE 1.1. Ce este un compilator? Limbajele de programare sunt de o mero diversitate g total diferite de limbajului caleuatorulul. §t totugi un program seri intr-un limbs} ‘execare de programmare poste A execvtet pe ua calculator, Acest lueru fe expliek prin faptul eX progremul este tradus fa limba) masinf, care poste f executat. ‘Translator est un program care primind es intrare un program sers niin enumit imbaj, momit program sursi, produce ca Zesultet un program fntr-un alt limb, numit program object eau rezul- fet, conservind eemsniSeatia programului sural. Dack programul obiect fete tn cod magia sau alt limba) apropiat de Timbsjul masinf, atunei {fensletorul ae mumegée compilator. in accasté faz, un compilator este cn "cutie neagré, deoareze mu avem detalii despre traduceresefetivi = programulu sure In program oblect (Sigur 1.1. program | compilare program aura obiect Figura 1.1: Proceeul de compllare privit ca "cutie neegrt* Procaul compli este complex, astfel Incét nu ¢ normal abit din net de vedere logic cits din punct de vedere al implementa sf fe com Siderat un proce intr-un singur pas. Programul suri necesito secvenis de transform In forme intermediare pins ge ajunge la forma coduln! ‘gin sat a unui a limba). Aceste transformisi pot fi clasifcate Ia douk ‘mari catego, cx fn figura 12: + partes de anal const in procesizes programului sursé in vedere. ‘eterminiritstructurllr lexcale gl sintactice din program, precum n si a semnificatiet ecestora, objindndu-se o reprezentare abstract, Independentl de limbaj, a tuturor acstar informa > acenstk repreaentare abstractl este apoi preluatt de partés de sin. teal care ace ca soop generaren programului obieet Ia functie de caracteriticil ecectula i ale calculatoruei pe care este destinat sh suleze cod asociat Forma Program intermediaed >| SA soalicd ee Pro ‘et igura 1.2: PBrfile do analie gi sinteat ale unui compilator Cele douit pint represintS, 1a rAndul lor, procese complexe care se ‘desfigoar tn mal multi pas, cu parcurgerisepetate a repreaent&ril progr. ‘mululsurs8, Pagitfundsmentali, sumit\fazele eompilér, cotespuedtori rocesului de compilare sunt descr a ura 1.3 gi au urmtoares semnif- cae: 1. Anoliza lexicali separ caracterele din progrannul sure in subsirurh 4grupate logic. Progroml sured este privitca ua git de cazactere in care we dolimitesst subsiruri numite atonal lexical, representand: ccuvinte chee, operator, constanta,identifcator! st separator 2, Sirul do stomi lexical eave apoi prelust de analiza sintacticS, al ‘frul ro ese dea determina entitle sintectice (declaratil, expres, instructiuni), de a verilca corectitudines sintactick a programa gi ‘nea afrmstiv, de construi arbarele de analiz8sintactic, ce con Stituie o reprezentare ochivlentt a programulul sur, care specifica entitle sinactice gi relaile dtre ele 3. Analiza semantic porneste de le arborele de snala sintactick entra extrage informatit relative la variabile, tipul, expres gi pentru a verfca consstenta folosirl Jor. Rerulttul acetal face este frboreleatributat de sintax’ abstract, de fept, arborele de anal ‘mbogitit cu anumite atnibute, 4, Generarea codulut intermediar va preluera acest arbore inscopul obfinerii uni forme simple de reprezentare a programului, care con- fine doar insiructiuni cu format stabilit, care Iucresat eu operant 4 vanlabile din progrem. Criteria principal pentmn slogerea codulul » | sr - dese ena Paes a Aon core ‘mss odo od meri opine Progen "oe Figura 1.3: PSrtile componente ale unvi compilator 18 Intermedior esto de afi cit mal ugor de generat cod maging pentru caleulatoare e8t mat diverse gi const aproape exclusiv din expres sinstructiuni de control. De exemplu, o instractiune de clears este fnlocuitk en teste, etcheto gi saltur 5, Optimizarea in sine nu este 0 faa obligatoie in procesul de com- pile, ea find argumentaté de ecient: programulobiect va fi mai nic gi execufa lui ae ve foceTntr-un timp mi scurt, Operate de optimizare se pot aplicaatat asupra codululinterme- dar oft gi asupra coduluiabiect, dei acest fal so poate efectua fm dau locur in procesul de compilare. Se poate amfina optimizarea, pentru codul obiect,inserind In cea faa gi operatii de optimlzare specifice(alocarea repigtsilor, incfrcarea gi salvares informatie din ‘egigt). Considerentul avut in vedere la sbordarea aloes. fost Ge a apliea optimizarea et mai repede cu puting&. Ideal ar 8 6h ‘existe dow etape de optimisare: a codului intermediar si codulut biect, dar tn acest caz prooestl de eompilare va dure mei mult. Op- timiaazea este in eeen{%, un compromis inte efcienta programas biect gi durata compilii 6. Ultime faz a compilti, generarea de cod object const in alo- area gi gestiunea reigrilor,alocaves vriabilelor in regitg trans- Tataree instrucunilor din codul intermediar fn cod obiect. 7, Datorité complexittitentititlor cu care Iucreaai un compilator, cexisté dou componente cu rol important, dar care nu intervin in Suocul de date trensmis pe parcursul fselotcompilé, gt anume: + Gestiunea tabelei de simbolur - care confine mal mult rutine pentru cresres, accesres gi actusliazes informatilor legate de numele simbolice din program. Table de simbolurt cste creat in fara de anali leccal gi folsit fa toate cele- latte faze ale complicit: Se pentcu aflarea unor informa, fe tunele edmputl sunt completate dear in faze mai avansate ale ‘procesului de compile. © Tratarea erorilor - const intro biblioteck de rutine care per- mite tretarea speciGek a erorllor de eompilare eorespunz3tor faa in care apar. ‘Aceasta eate 0 prezentace generic a compilatoarlor, fns8 exist 51 luneleeazuri speciale care e abst de ls aceastl implire pe faze au par- ticulasiaeaat Kmbajul obiect. Molte programe suat incadrate tn familia, compilatoarelor datorit functionlitat lor. u Interpretorul este un program care executt actiunile specificate de reprezontarea semantick in loe i le re-exprime intro forma intermediar ‘De aceea, se spune cf un interpretor nu croeaa® cod obiect, ei "simuleask™ ‘excouyia programulul instrucfiune cu instructune. Exist usele avan- tale ale folosirii nu! interpretor, ca: portabilitate misit, © mat eficent& rmodalitate de tratare a erorilor si securtate mai bunt (unul din prinei- palele motive ale succesului imbajului Java). Principslil dezsvantaj 1 reprezinth timpul mare de executie. ‘Asamblorul este un compilator pentru limba} de asemblare. Pre- procesoarele sunt, de fapt, translatoare care tradve programe dintrun ‘snumlt limbo tn alt limba), de obicei, imbajul ezultat avind un compi- Iator eficiant. Mult limbaje "experimentale™foloseau preprocesoare care transformau progremul sursfin program C, Un "eross-compilator" este un compilator ezident pe un calculator "gazd8” seis pentru genera cod object destnst unui al caleulator ‘Tehnica de a crea compilatoare prin instrumente de generare a pro- ramelor a fost iniiati de Brooker ga. [BMMRG3] gis evoluat consis- tent de-a lungul timpul,aleStuind o clas aparte numiti generatoare do compilatoare. Cle mal semnifcative exemple sunt: generares unui analizr lexical din specifica bazate pe expresi regulore, generarea unul snelizor sintactie pe baza unel gramatici independente de context care sk eserie sintaxa gi generatoare do cod din desrieri de stribute, ‘Avantajele folosirii acetorinstrumente pot f remumate in urmitosrele ceacterstc 1. Tatrarea pentru on generator de programe se face Ia un nivel mal Salt de abstractizare. Programatorul va specifica mal putin, re- sponsabiitfile find preluate de instrument (un beneficiu important ‘pentru uncle expecte ale compiliil, cum ar fi tratereaererilo). 2, Posed o flexibilitate gl adaptabllitate micitk. Modified Kiba} eoesitf chirabiei minimale 8. Programul gonerat poate fl adugit cu,cod propriu sau inchs (din Diblioted), oferind posbilitatea de »coustrui ua analiza spevalizat. 4 Deserieres formalX permite generares mai multartipuri de programe. ‘De exemplu, 0 gramatick ssociat unul limba) fn soopul de ® genera tan analizor sintatic, poate fi folesité i pentzu genera un editor dependent de sintax. 5 CD GTR et dna, tnd aoa pata 15 1.2. Istoric — limbaje de programare si compi- latoare EBvolutiacompilatontelor este stds legate limbajele de pregramare side calealataere. De acooa, nu putem trata compilatosrele Tn afsra scos tui cadru. Pe mist celimbajele de programare au davenit mai puternice, mai sofisticate, puteres lor de ealeul sa mfrit, a aprutimperies neces. tate "trecuceril”acestora itz-ua limba) aproplat de imbejul masin8 seu fnte-un ale limbaj de programare cunogeut. Pe de alt& parte, putarea de calcul a ealeulataralul a permis deevotares uncr imbale s\compllatoere ‘mai eficiene. Vom Incerea si amintim momentele importante ale acestui dlomeni, fri «sven pretenfiecX am inclustoste rezultaele importante Primul compilator apArut este cel al imbsjului Roréron. Primul com- pilstor Fortran a reprezentat un punct de refering fn istorie compile- taelor, dooarece la aces dats calculatoarle aveau memorie foarte mick, frau incee, jr aistemele de operare eras foarte primitive, condi in care rogramaea in limbaje de asemblare prea singura optiune reall. Fortran 2 fost considera primal limba) de nivel fast, iar eampletorul produces. cov ficient (esetoda de optimizare a codulti propus de acest compilatar 8 resisat timp de 20 ani). Compilatoral fost proiectat si Implementat Inte 1954 gi 2087 de o echipl de la TEM, condust de John W. Backus [Bacra) Primm iterpretor este ereditt limbului Lis, in 1962 (MABEL 6G ack adiugim la aceste doué relizri importante aparitislimbajulst ‘Algo, in 1960 (JN61), consideret primul limbaj de nivel fnalt eu 0 sin- tant structuratd gi sistomatic defini, putem spune ck acoasti perioad’ dle inceput a compllatoarelor reusit ek impun nigte modele gt princpit fundamental ‘dees de coustrul un compilator pentro un limbs) de programare fost adoptati cu mule suoors gi majoritatea principllor de proiectare a cm pilatoeralor au fost deavoltate in perioade urmBtoare, 1960 - 1975. Acest progres a inlvenjat gi deavoltarea limbajelor de programare, permiand fiefnivea unor constrict complexe gi extinderi ale difertalor limbaje. Folosirea limbajelor de nivel Saale in seriarwa cunypilatoarelor fast Jmpulsionali de apargialimbajelor Peseal iC, a clror compilatoare au Tost Implementate ia aceste limbaje. Tot in aceasti perioadX a sccut inmpoctanta sintezei codulo in favoarea analiza codului. Resultstele obi ute in teori Linbajelorformale at due spre elaborares uncr tahnici per formante care putea f plicate cu succes in partea do analiak a codilul, in special la analiza sintactcs Timbojul Pascal, define in 1970 de prof, Nicholaus Wirth (BTH Zarich) 16 [WirTia, Wie?1h, a aptrut ca cel ma de succes sucoetor al limbajulul Al- gol. Popularitatea si eficientalimbajulul ve datoressiurmitosrelor tei pesformante: « compllatorul care produce un cod intermedia slplu pentru o masini ‘virtual (nutlt P-cod), In loes8 ganereze cod nativ pentru o masin’. particular gi un ester de operace particular, asigurindu-coastfl Portabilitate limbajulu + intespretorul pentru P-cod nu necesita un ealeuletor mainframe mare ‘i costistor, putsnd rule gi pe tn ealelatar personal (UCSD Pascal = University of California, San Diego) [UCS}; + lensazea mediului Turbo Paceal de citre Borlend, care representa un compilator rapid leftin gun mediu integrat de dezvoltare pentru caleulatoare personale [Bo]. Limbajul Pascal a influentat profectares gl evolu multor alte limbaje de programeze: N. Wisth a fost implica ints-o ceri de proivcteulterionre ‘care aveau la bask Kmbajul Paseal (Module-2, Simula, Smalltalk, Oberon, (Component Pascal) dar gio serie de alte limbaje de In Ads la Visual Basic. Tlmbejul G a foot elaborat intre 1960s 1973, im paralel cu deovoltaros sistomului de operare Unie, end e-au pus bazale imbejulu. Schimbies majore ale Limbajulul seu produs tne abia intre 1977 gi 1979, cind a splrut prima deserere detalatS a limbajului ia “The C Programming anguage" [KRA8), Tn sficgt, la mijlocul decenivlu 80, limbajul a fost ‘ficial standardize! ANSI. Pant la inceputul snilor "80, deql exstau die ‘yeree compilatoare pentru o dvetsitate de platforms gssteme de operare, Timbajul era exclusiy ssocist cu Unix. Mi-am permis #X tnchel aceasté sourtl preventare a Iimbajulul C, eu un eltat epertindnd lui Dennis. ‘Ritchie [KRA, woul din oameni! implica in deavoleares limbsjull inc de la Inceput (1969), el&turi de Kersighan: Inire 1979 -1980... serierea nucleului (Kernel) Unie 2 C ‘neva dat sufcientilSnevedere fn utltaten si aficienfa libofulet pentru a recoda wtiltorele gi instramentele sistem sf pen fou ele transpune, api, pe cele mai interesante pe ale plat forma..C a devenit un sucees la un nivel care a frecut orice ‘pteptare © 2 troia'perioad®, din 1975 pink tn present, so poate caracterze prin faptul of exringle progremstorilor se Indreptau spre compilatoare ‘profesional: efciente (in geneceze de cod gi flosre),sigures, de prefer, ‘cu interfetegrafceplicute, pundndu-se accent pe calitateacodull generat. w In anit "90 au aplirut un mumir mere de compllatonre gi inatrumente de desvoltare de complatoare (generatoere de analiak lexical gl siatatic8) ¢ parte a prolectulal GNU sau inigiativ suse deschioe (open source), care permite citirea efactvd a codului unui compilatar. ‘Trebule mengionate alc i directile de dezvotare a limbajelor de pro- gramare. Aparitia unor paradigme nol, spectice (logit, funesional, die tuibuitf orintaté obiect) a infuentat gi deavoltarea constructiel compli toarelor prin aptimizaren snumitor faze particularlzareaaltora i functle de ceracterlstelle paradigmel: invocarea la distany8 a funfilr,slocarea ‘i dealocares sutomati a datelor, manipulare ister, unificareaclawzelor (Pentru mentions doar cétevs). 1.3. Specificarea unui limbaj de programare Limba ele de programare represintl, de fapt, nota pentru desrieren nor ealcule. Un limba} de programare ideal ar trebui 38 posede pro- -rieti de descriere gi mplementare a problemel, dar practic este dificil de indeplinit ambele conditi: 0 implementare ecient ne conduce spre tan limbaj de nivel salcut, fn timp ce descrielle e realizes mai ugor in Iimbaje de nivel tnalt ‘Specificarea unui limbaj de programa cons « sintax’ ze tape importante: + semantics; + pragmatic& ‘Ca prim component a unui limba}, sntsxs repreaint un set de regu cara permit rAspunsur Ie intrebiri de gen! "Se poate face aja sau" se face?", Din punetol de vedere al seopului nostra crearea unui compilator ‘entra un limbaj de programare,sintaxa are rolul primordial In primele fave ale procesului de compilare,fapt ce justiicS importanta pe care bo cord, Setul de roguli corespunaitoare sintexei unui limbaj trebuie descri. folosind un alt limbaj de desciere, mumit mztalinda. Foloscea unui lim- ba} natural, de exemplu, limbs roma sau limba engleat, ca metalim- boa} sre deravantajul de 8 fi ambiguu, find posbile diferte interpret, ‘Studiul formal al sintaxel apleat uno! limbaj de programare staregistrat ‘ua progres notorin in anil'60, end a apiut speciicarea limbajului Algol60 (Naur, 1960, 1968), care folosea o notaie simpli elegant& cunoecut sud ‘numele de Backus-Neur-Form (BNE) [Naud ‘Backus-Naur-Rorm flosegteurmfzoarele obiecte: 1B « simboluri de bask (primitive) sau simboluri terminal, in general ‘cuvinte cheie, operator, separator af limbsjului «+ variabile motelingistice- simbolut! neterminal, a cSrorsemniicti cotespund construcfilor Lmbajulu ge noteaa% intze parenteze un- aghlulare <>; (prin deine egal) g | (alternetive). ‘Bxomplul 1.1. Numecele tatregl pot i descrise in BNF ast: + conective metalingvistice som | 4 | = << intrep-forasemn> = | < intrep_fora.semn > = ohio [BNF nn permite definerea unor condil de context ge uneoti greoale pentru anumite descrieri Bete slcazul examplului, unde dia motive de simplitate am omis conditia ce prima cif sf. fie nenull. Pentru & sport ‘ujurinia de a citi aceste descrieri, pentru s elimina recusivittes unor de Gini gi pentru a nota mai ujor alternative similar, Beckus-Naur-Form ‘fost gupus mal multor extinder, Cole mai importante extensl sunt cea datorati Ini Wirth (1977) (exteniefalosit in specfcarealimbejelor Pascal gi Module-2) i standardul bitanic EBNF (1981) [EBN). [otafilefloste in EBNF de citre Wirth sunt «© neterminalele eunt serise oa gl euvints (fir paranteze unghiulre: Tntregfaresema in loo de ) + terminale eunt notate inte ghilimele, de exemplu "BEGIN® (si de ‘obioei cu majuscule) + [este fost, ca in BNP, pentru « nota altermanta + porantescle rotunde (gl) sunt foloite pentru e:note gruparea, * porantesele drepte [st] noteeai aparitia optional (ero ott sa 0 dst) a unui simbol sau grup de simboluri 19 «© acoladele { si } noteartrepotaree optional (o dat sau mai multe fr) © una einbol sav grup de simbolur, © sstaflest fn loeu Tul = 1+ punctal «exe folsit ca sfrst da regult © (*) sunt folosite pentru comentarit © «,seeventa vid, poate fi deers prin notaia [] + spstie sunt, in general, nesemicative ‘Exemplul 1.2. Numerelotntrogi descise tn notetie EBNF: Tntreg = Seman Intrepfaresemn citra{ lfra) be nae jae 16" | |e poo Standacdul britanic EBNF sre urmttoarelecaractetistc: - slementele unei descrer sunt seperate prin virgul ~ descrieile se termi eu"? ~ sptile sunt nesematfictive Exemplul 1.8. Doseriorea unel declare de variable fn limbajul Pascal prin urmitoerea reprezantere grafic. he =H ‘Figura 1.4: Declaratia de variable fn limbajul Pascal O alt modalitato de a descrielimbajele de programare se baseesk pe ‘reprezentare grafied, potind 8 intlnitk sb eub denumitea de diagrams 20 de sintexk. Au fost folosite la inceput pentms a defini sintaca limbajelor Poocal, Module-2 5} Fortran 77 gi au avantajul dea ugor de infles, nei als pentru incepitori si nespecilst “Hulilesintactie ale imbajulut eu forme unor dlagrame de fr, eile posible reprezentnd secvente posbile de simboluri. O astiel de diagrams se parcurgeincepind de Is stanga gl urmiegte 0 eae care poate incorpora, Verminale sau neterminale, care au scopul de a realize transferal spre alte iagrame. Uncle roprezenisi grficefolosee terminalelescrite tn cere ‘i neterminalele in drepeunghiuri pentra s face o mai clark distinct intre lementele limbajalui st construcfile cave trebule desrie. a 2, ANALIZA LEXICALA Analiza lexical, co prim’ fax a compllii,trebule a "transforme* ‘programul sure privitca un text pentru prlucri lteriare. Programul ‘Sursk eate privitca un text in care dovim of Identifcin anumite entitii (etectare). Apoi, am vrea sh impli acest enlity gau atorl pe cate ‘gov (claificare) gin final le notim into form mat simp (endiffeare). ‘Agadar putem prvi analiza lexieall ea peo procedurk: ‘hile (mol exit earoctere nec in sui) do detectare(atom); elasiicare(atom); codiaretam} ‘end while 2.1. Detectare si clasificare ‘Spleen de Ta casul une proposiit (eevents) din limbajul nstura, de examplu limba romén8: "Ana are mere." Analizoral lexical ar trebule Hi detecteze urmitoncele: exist frei emtititi (cuvinte): Ana, are, mere; in plus, separatorul Aintre cuvinte este" * (apatin); © Tncoputal gi sfrgtul scventel- litera mare, respect Apoi, analizoral lexical exeouth clasicarea cuvintslor din secventd, ‘vind ca rezultet urmitoareleasocer: Ana - substantiv, ere verb, mere ~ substantiv. Dac propoaitis arf fost “Toana are mere.*, din punctat de ‘vedere al analizorulvi lexical, rezultatul arf fost aproape idente: nu exist poste confine esracterul "* cel mult o dst in earul constan- telorreae ‘Prime elf este nenulf, exceptind constanta 0 seu numerele sub snitare, de exemplu 0.56. 8. Cuudnt rezeroat: "i, "elie", "for te 4. Operator: operatori aitmeticl (44-,%/»-), operator: rolaionali (< (eee) operation logit (22). 5, Separator} {5} 22 ‘Analigorl lexical eae capabil sia decalecorect tn prvinge detectsit si clasfci n unal din urmétoarele moduet: 4+ Cea mai simpli abordaze ar fi consderares une! strategi de tip selectic multpl, care eX incece pe rind potrivirea cu fecae cla. Nesam putes gind chiar la o imbundtitie asfel: dack priml ca- recter este iterd tunci atom] poate & doar identifcatar sau cuvint Tezervat, dack primul carecter este cfr atunei poste & doar con- tenth Pentru closele cuvintelor revervate, separstorlor gi operatorilor se teoteazd apartenenta Ia mulfimes respective. Pentru clasee ident Featorilor gi conatentalor eae necesar sf se verfice repectarea cr terllorcorespunsitoare, care sunt dascrse prin expresitregulare; «© automate finite - pe care le vom presenta in paragreful 2.8.2. 2.2. Codificare fn.practicd, o modalitate da a imbunftit\eficenta compilatorulu este ‘de 8 micgore spatial ocupst de atom lexicli. Fiscirui atom lexical 152 tegeori un cod, care reprezint& un nomic tntreg mic gi cere astel ocups tai pujin spayiu dees atomi lexeali format din unul sau msi multe 4 cceractere. Tabelul urmitor prezintl o estfal de codificare partial. in realitte, care atom lexical are un cod atagat Projectaren unul compllator impune, dup cum 8 mai preciaat gi in capitol precedent, o echivelonk intre formela intermediate construe intrefasele compli. Aste, programa! sursk trebule sX se poatl re- constitu pe basa rezultatul analizel lexicale. Pe de altX parte, fase urmitoare - analiza sintactcS - are noveia doar de informal sintectice. De exemplu, pentru un stom lexical "x", anlieorulsintacie trbuie 8 tie eaten identiicator In acest scop, analia lexical va furniea doar aceste informa, esate etal ind depuse intro lists "specialé", numitf tabela. de simboluri (7). Acestetipuri de stow lexical suat particulare pent fecare pro- ‘gram tn parte st doar ele vor f depuse in tabele de simboluri. Orgeniearea ‘tabelet de simboluri precum si opershile care se execut’ asupre el sunt de- srise a paragraful 2.4. Bste totus importants gtim eX un nume simbolie (identficator, constants) apare o singurd dat in tabela de simboluri Astflrezultatal snslizeilexiale, numit forma interné a programu- tui (PLP), represints 0 secventX de pereci, in care print element este cou eotespunsBtor, iar al dailea elemental perezhi il represnt& poritia 25 din tabela de slmboluri (In practic, un pointer spre poritia respoetv8). Pentru clelaltetipuri ds stomi (cuvinte rezervate, operator, separatari) a doles cfmp se completes cu 0 valoare inexistentl in tabels (de oblce Osan), ‘Exemplul 21. SE considerim urmltosres seven de program supust analiza lexis: i (emma) f= 9) Porma intern corespunstoere ete God Atom || Posite in TS fir n : 10 1 2 3 1 as 1 16 u far tebele de simbaluri va confine tel empurl: pe prima posite x, apoi 1h lar pe ultima poigie = Putem ef rafintm acum algoritmul corespunaitar analize lexiale ast- fet: AlgoritzaulfunctionexaX in urmltoral mod: dupi coun atom a fost de- teotat (detectare(atom)), se incaare clasifcare Iu, prin cee tre instruc ‘un if. Se observ cf e tenteaak Intl apartenenge stomulat la elementele lmbefului (cuvant revervat, operator, separator) pentru 8 nu feceo clasi- ficare eronatX: orlee cuvint rezervat respect defnitia unui identifieator (contine doar liter). © alt observatie importenti éste eX se folosexe Instrucfimni conditjole eu dovi. slismetive, continyarea clasficitre- alisindu-ee pe o ramurk else. Aceasti sbordare are dous seme: se implementesal concitia es un atom o8 epargiak cel mult unci clase gt permite detectarea erorlor lxicale, cazuile in care un atom nu poate fi laafcat ‘Dupf clasficarea atomului, procedura genFIP(cotoc) va completa forma intern a programului cu codul stormuli cod st locatia loc din 6 OUTPUT: FIP, TS, exer, ‘while (mai existé caracterenectite in program eure8) do sdetctare( ators); if este cuvént rezervat sau operetor sau separator then ‘ge0FTP(cod 0) lee if este Identifcatar then indice = pos(stom,TS); _genFIP (cod identificator, indice); else if oite constantt then Indice = pos(atom,7S); ‘geaFTP (cod constants, indice); else ‘mesa}:"Broarelexiala la atomul", atom end if end if end if end while tabela de simboluri (pentru atomil care nu apar in tabeli). Functia pox(ators, TS) va reburna pontia atorau atom din tabela de sizbol 18 astfel: dack atom existl in 7S so va veturne posiia pe care se afk (chutace), dacd mu este gait se va ingera atom in 1 (adBugare). Asti ‘mabele opera asupratabele de simboluri sunt implementate sub un unic apa 2.3. Modelul analizorului lexical Conatruires unui model pentru analiza lexical se bazeaoK pe douk observatil importante din teria limbajelor formale. fa primal rnd, Jex- cul oriefru limba} (natural sau de programare) poate fi specifestprint-o ramatick regularl, Gramaticlle regulare sunt simple, ujor de iateles gt exist algoritmt efciengl corespunzitori lor. in al doll, rind, clasa gra- taticilorregulare este echivalontt cu cen & expresilor agulare gi cu cea ® automatelor finite: pentru orice gramatic regular exist o expresiare- agulard care oi descre limbajul generat de grameticé gi exit8 un automat fit echivalent 2.3.1. Expresii regulare ack consider clasa identiieatorlor, o gramatic corespunatioare este 1 < litera > 4 AlaZlolle © + | C colfonum> + | < cifra> | < epecial > + ojo 1 FPolosind expresillerogulare vom putes deserie ecare clack de atari lexical, Pentru acessta, vor reamint ce este o expresie regular Definitla 2.1. (AU72] Find dat un alfabet B, expresitle regulare peste ‘est alfabet se defines inductivastfl: © ¢ este expresia regular corespunaétoare multimil vid 1 cate exprsia regular corespunsitoare multimil ce contin secvents vide 1 este expresia regular corespunattoare mullimii (a} + daci a $16 sunt expres! regulere, corespuns&nd respectv malizallor Ag B, stunt a+b este expresin regular corespunsitosse multimil AUB (countune); = ab este expresia regular corespunadtoare multimii AB (con- eatonare) ~ a este expresia regular corespunsitonre multi A*(Inchidere reflec transitivs) CCaselor de stom lexical le corespund urm&tonrele expres regulre: 1. Constonteintrogi, fed semn: cifranenula = VENI NEY TEL! cifra = cifrancnala +! intreg = cifranenula cifra’ +cifra ( constant intreagl este feo socventl de cfte din care prima exte emul, fe eft). 28 2, Wntiicatori itera EB RO alah special = 11H dentificator = litera(itera + oifra-+ special)” (un identifcator este 0 socventé de caractere alfanumerice sau spe- cial, din care prima ete obligatory liter) 3. Cuvinte eaervate rrezervat ~ if! else! +! for de! + 4. Operatori: operator 4! Ia eg el AI oh ee pd were. 5. Separetori separator = (4 4 EY Analiza levicalé poate & privth asfel: pentru fecare atom lexical de- ‘tect se incearc& potsvires cu o expresie regular. Dack atom respect 8) print (i)\n",jytext "angie id > 8" lon printf" (Fs)\0", yytmet,"Tdetiestorj; {CIPRA}+(LITERA}+( rit 9 (5) a", Ytaxt, "Tdentifleator incaput eu ea”); } o—psrGen}® ¢ rink" (Fs) Seda", yytent, "Constanta intro” } Neale raul ()\e", yytaet*Caractar necunctcut”); ca el(yytext); a ae, char rey, (Carer oars, arte» 0) avin = fopoe ee"): dyin = foe “test, a ryoutmtopen(* ee" , mete 2.6. Relatia dintre analizor lexical si analizor sintactic Folul analisel lexical cate asemitnator eu os al anaitelsintactice: de- tect, clasficare, tradcere. Separarea analize lexicale de analian si- tactick eae justiicata de urmitoatele especte: 1 Separarea conduc leo proictare mal eficientt a eel iti (prin- ‘Splul prolectirii modulare) 2, Preluerares girl de caractere necesitl operas! ce consumis mit ‘imp (preluatea textului de pe suport extern, accesul la fecare car factor, ebutari in tabele, eto), spre decosbire de calalalte fae, ast, Pentru 0 analicd levicell ecient ce va prefera un limbaj specie acestor operat de prelucare de caracter, iar pentru celelalte faze limbaje de nivel inalt. 3. Specifcarea atomsilor lesiali este foarte simp, ex poste 6 expr ‘mati printr-o gramatick regular, simplifcénd procesul de anal, {In eadrul acestu: proces se va simula un automat Snit gi an unnl push-down ea in ebdril analiza sintactice. 4, fn urme analiza lexicaletextul este "curigat® din mai multe puncte de vedere: ‘+ mumrul atomilor lexical este, de raguli, mult mal mic deest ‘namirul earaterelor textulul; «© se liming epatileinvtileg lte caractere coreepunaitoare alin- Jee textual eure + se elimink comentarille, 5, Asigurl portabiitetes algoritmull de compare. Jn proiectarea compiletoareor, interdependenga dintre cele dou faze duce la implementarea uneia dintre urmitoarele decal: , « analizor lexical independent de analizoral sintactic- un pas soparat al procesului de compilee, legitura find realigatS printrun fier sau zosi de memarie ce congine reultatele analizel lexical; + snalzor lexical comandat de analizorul sntactc- ea outing a ana- lzorulaisintactic, find apelat ori de cite. ori analizoral sintactic are nevote de un now atom, ANALIZA SINTACTICA Aalizasintactict se defines Ia mod cel mai generel, cand proce sulde structrare a une sscvenfe tn raport ev nlgte regu. Esta denumire everied IntSnitt in foarte multe domenti: linguistics (analiza textelor, ‘radvoer) informatick (oonstructia compllatoatlor, descrierea boaelor de ta, infeligent® artificial), chine, pentru & num doar eStev, a fac a procesuui de compllare, alia eintacicS ve poate defini ca ona component care areca Intare secvents de atom lnxicl i determin ‘dach sceasta este corecth din punct de vedere sintsctc, cea In care oe construiste arborale de analis sintactcs, ‘Aczast defntie sugerasatelamentele de care vom aves navoi in acae- tf fs limba] de descrer « soventslor vali (orets) | © 0 matodl pentru a dlstinge inte seovenie corecte gl incarecte, dent o instrament! flost in snaliza lrical, gi anume i= AU SUBE suicient de puternice pentru a exprima con ‘Sanger Pe care sintaxe. unu! limbaj le impune ssupre atomilor. De cove, analiza sintactcl se bazeas% pe gremsticlindependente de context, G= (W.D,P,5), in care [AUT ‘+ D- alfbetul gramaticli va cuprinde elomentalelimbajul (stom); 1 N’- mulmaen de neterminale ropresins intultiv constructiesintac- ‘ioe ale limba ‘© P- multimea de producti epresintt regll de formere constr lorsintactice, unde produeile wu forma A + 0, A. € Nya € (NUE), ‘© S- simbolul de stot, sorespundeintuitiv gener unui program in libel ales Astfsl,probloma determinirii coretitudinil sintactoe a secvental de tom! lesielt 2» reduce Ia a verfen dack o anumitS sacventé wc 2° apartine limbejului: w ¢ L(G) [AUT2|. Funetlonares analive sintac- tice poste fi descrist prin intermedi aytomatelar pusk-dows, datoit “4 chivalenjel lor ou gramatiiindopendente de context. Deg reprenit wa Instrument metematie puternie, automatele push-down eunt relaiv com plore, greu de reprezentat st manipulat. Din acesto considerente, pentru ‘nalizarele sntacticeprezentate vom ocol defini exactS a automatelor corespunaitoare prezentind o form simplicat’ lor are cantne set ‘nforinafile necesae in analia sintactid,simplifednd stdtrepresentarea tg fancfionares lor. ‘in funefie do srotega leas pent construetn arborelsi, anlizoarle sintactoe se clas i fll urmBtor: pach i eta hme SS cicaneraaia (Ce ums de posit a un pasa constructs ~ scuply: exh mal mule posibliti are oe iu tn conaiderare, ‘be aloge una, dac8 analiza nu sa termink eu aucoes, uncle ovine gc fae o alt alegre; ~ tins (a predict: In un moment dato singurk alge este fast Casiicares color mai cunoseute tipuri de, snalzoare sintactioe este recentatt in tabelul urmitor: escent aaeandeat Tossa If descendent FeVRUT [ esendent cx rene Tn 0 Ge procdense i [SD an ‘Analizorulsintactic descendent cu revenn este foarte simplu din punct de vedere al algoritzauul i singurarestrictieimpust gramatili ete mu fe recurivs In stings (eliminaren reeursivitit In stngn se poate realiza aplicind un lgoritm simplo). Din pBeate, datorth reewsivitii,efcienje lu este scfcuté gi nu oe apliek pentru gramatici mari. Analizorul sin- tactic ascendent cu reveniri are eceleai principli, diretia de coustruire a srborelu difers, dar este mule ma. pusin eunaseut. Algoritzlt line’ sunt cei mai perforant gi cei mai des foosgi in ‘inplemendszes compilatoarelor pentru Limbaje de programars: 45 + auaizr sntactis LL(k) este o sroviaro ponte LeftLeft(Stingo- Sténga) x semnik:secenf de ntrae ene cit doe sléng sre Azeopta gt xboree se construe flosnd divi de stinges « analzor sintactc bazat pe relat de precedent - este clas de algo- ‘tml eare lureasi pe gramatil de presodant¥, dar restrichileecestor {ramaticl fac inefcentéaplicarea lor pentru limbaje de programare; sunt algoritml foart efcinsi pentru verificareacorectitudial sintac tice e expresilor aritmetic; «+ analizorsintactie LR(k) este a abreviere pent Left-Right (Stinga- ‘Droapta) st somanifick: seevente de intraro ase citith de lo. sténga ‘pre dreapta gi arboree se construleste folosind deriv de deapta; ‘ste o clas de algortmi avind aceasistratnge, dar care difer& prin unele detli sss optimist, induadnd: LR(0), SER, LR(2), LALR. ‘Arborele de anal sintactiec mu eave o structurt wjor de manipula. De acoea, se flocase urmtoarele doud alternative de resutate, pe baza clrora arboree poste f complet eoostrut: 1, sul desiviclardiecte sucesive care formenadervarea $3 w: Say ap 08 Og =P, 2. fn conditile ta eare produce gramatict sunt numerotate, sirul mu merelor de producti flosite la Gecare pas de devivare in $= w. 3.1. Analizor sintactic descendent cu reveniri ‘Sinceroim of simulim analia sintactick descendent pentru a infloge care sunt situa gl sejiunile care apa in construcfia erborelui de analizé sintactic prin acesstt metodi. Vom considera gramatica: G=({S}. abe), {S— aSb5laSlc},5) sl escvente: w= aacke Figura .1.0}-b)contineaosste situati iar pentru ficare erbore, nodal curent este cel incercut. Fiind un analizorsintactic descendent vom incepe ‘construiea arborelui de la riding (Sgure 3.1-))- Avdnd ua simbol netar- ‘minal ca nod curent in arbore, treble construtidescendeati lui, conform tunel reguli de productle « gramatici. So observa c& noterminalul S va ples de mal multe oi in arbore. Pentru puteo serie un agoritm, aver nevoie de un "jablon" dup eareaplickm produce petra ua neterminel, sf vom considera o ordine inte produesile pentru acelgineterminal si vom aplica intotdeauna productil tn aceast ardine 46 » » a ® » 5 » Figura 8.1: Analiza sintactcl descendent a seevenfel oacke a Ponizu exemplul nestru, fie prima productle § —~ oSb8. fn momen- tul in care am construt descendantii nodului neterminal, nodul cureat se schimbi, devenind col mal la stings descendent al lu, fept ilustret in figute 3.1.8). Nodul curet ese a, wn simbol terminal. Pentru acest cs, ‘yom verifies dack el poate fece parte din frontularborelu,adick dack se ‘otrivee cu simbolul caren dia seoventa de intrae, care in acast moment ‘ste primul simbel. Bste vorba de acclagi terminal, ceva. ce Inseam cl ‘putem continus.cu conatrucjia arborelul: simbolul curent din sacventS este 1 dole simbol (toto) gi nod eurent devine eelnal Ie dreapta,adick S, ‘dupS eum se obearvl tn Bgura 3.1.0). Aver din nou simbel neterminal, construim subarboree corespunator, ‘dul eurent devine oe! mat le stings desoendent, cn figura 3.1.d). Nodal ‘curent eats terminalulo, care se fotriveste cual dolls simbol, deci pute. favanca tn construcfe: simbolul curent din secvenfi este c, nodul curent cate S (Ggure 3.12)). Aplicim din nou expandares nodului 8, nodul ‘creat devine a, situato tustratS in igure 2.1.1). Ta aeost oss svem 0 repotivire Inve nod] eurent care exte a si simbolul curent din socvent Cate extec,c€e8 ce blochessd temporar construtia arboreal. All Inter ‘ine stuafia de revenie: tebuie si ne intosroem In pasul precedent gis vetfcim dack putem face alté Incereare de a rescrie S,adick dack exist Al productle pentru S._Rispunsul este afirmatiy st construim subar- borela coveepunaitor lui $ pe basa acssel producti, ce in fgura 3.1.9). Din aou avam 0 nepotrvire, yor reveni gt vom Incarca producti S —»¢ {in construct euberborelui pentru $ (Bure 8.1.8). aii deja decrgt se ape cu succes pnd In arborele de derivare din figura 5.11). in aceeets sizanie rontul va coniine mal multe simbolur decir cecvenja de snalizat, deci, ever din nou 0 situate de Ineucces de ‘moment, Pentra ultimele nodusi neterminale considerate am epuizat posi Diltiile de reeriere, cosa oe impune ca revenitea ek se fack eu un nivel, sai aus in arbore, la primul nod care confine S pe nivell 1, unde vor splice altSincereere de construire a suberborelu, ea in figura'3.14). CConstructia restului srborelul nu mai ridick alte probleme in afaca situailorexpliata gi iustrato in figur, astfl ein final vom obtine ar- botela de anali sintacick din figura 3.1), care indi’ fatal c& secvenja ‘este accsptat de gramaticl, cn alte cvinte analiza sintactieS so tsrmink 3.1.1. Modelul analizorului sintactic descendent eu reve- ‘Automatul push-down covespunattor anslizrulu sintacto descendent co revenc poate fi caracterizat de urmtoarea configurateSerST| (a8) unde «© reprint stares automatului gare una din posillsle valor = q- stare normals; ~ r sare de revenire; ‘J reprerintposifia simbolulutcurent din secvenfa de intare; © «resto confinutulstivel de luc, care memoreasi modul in care se obtine arborele, © 8 esto continitul stvel de Intrare, epreventind partes din arbore are uo fot inck dexvoltat. Confiquropin ifn este (q,1,¢, 5), caracterisiad automatul prin: ste- +e normal, primul simbol din sacvent, stiva de lucru vii gl stiva de Intrare confine simbolul de start. Confguratiefinall eee (tn + 1,a,¢), auieS automatul este in stares t,o fot detectate tote simbolurile cin soovengS,inclusi al n-lea, des indicele este n+ 1 gi arboreleeete complet construt, [ft mine oma dns wlio rami (ote 1. Expandare: are loc atunci cénd virful stivel de intrate este un ‘eterminal si const tn resrires (expandarea) neterminslul rex pectiv: (vise, AB) — (@.i,04s, 0) unde A— yeh. sunt productile neterminslulul A, iar indicele 1 stagat in momentul expand Indio foptul ea foct Lust in con- siderare prima productie pentru A (ia ordines prestabilts), Aces: Indice este util pentru a si la un-moment dat, pentru un saumit neterminal, cae produce a fst felosit gi care 9 mal poate feos. 0 2, Avans: se reslizeanl atunci cind viol stvel de intrae coincide ex ‘simbolul eurent (al es) din seoventa de intrare = (a.f,0,048)|~ (0,44 1,201, 6) 5. Insucces de moment: se constati atunci cid sibel terminal in viefl tive’ do intrre gsimbolul curen din socventa de intrare irk, Se marchosod aatfel tecerea Ineo stare de revere: (a,i.0,28)] ~ (4,0,06),0 6 0: 4 Revonire: reprezinti situatia cind ¢ necesar si relacem partea respite unel produc care mu fast bine alass (visa0, Bl — (41,2508) 5. AltA Incereare: represinté "iegies" dintro stare de revenize s consti din mai multe stuai posbile: inercarea unl alte producti ‘entra un acelal netarminal (1), sau rimlnerea in stare de revenire entra a reface partea dreaptl a produce (2), sau situatia de froare, cfd antliaasintactick se termini cn rapuns negeiv: seoven- ‘ta nu este accoptati (3). Acoastl ultimE situatie apare atuncicénd simbolul curent din seovenge de ntrare ete primal simbol, netermi- nalul A este simboll de start gi au fot incercate toate prduclle pentru el (astiaAsinet44a8) deck 3A — 9540 (ied WB — { (isa, AB)in coz contrar, ou oxen (e.fa,p)dock | EROARE wi 6, Succes: repreant terminarea cu succes, acceptarea seeventel de clare gramatiol (.n+1ae]-(on+lad ‘Algoritml 4. deseria analiza sintactcl descendentK cu reveni pe ‘bens modelule prezentst anterior, Cit timp snelisa nu ea terminat co suoces sau nu g-a ajuns fate situatie de eroare, configurafia creat de ‘terminé acfiunea urmétoare, in primol rEnd ia funetie de stare ~ stare ormali. (inte § - 23) sau stare de revenire (line 2444). ‘acl stares este normal atuncivirfulstibe esta lat i considerare: pent un simbol naterminal in varful stivel vor aplica expandare (linile 9-12), iar pentru sibel termine, ve verlGok deck eorespunde ou saboll ceurent din seoventa de intare (lina 14) si abun se plick evans (lnill 15-17) altfel co apie insucees de moment (linia 19) 50 ack stares este de sever atunclacfiunea este devs de visful tivel 2 pent wh sienbol terminal in vérfulstive se eplicSrovenire (Unie 26- 28), sar pentru un simbolneterminal se plik alt incerare (line 20-0). (Cand nicl o alt incercare nu se mai poate alica, anata va Intra Sato stare de eroare(nlle 36-36). Dac s-spsrcure toatl socvonta de intrare gt stares exte normals stunct anata va ajunge In store de terminae (inile 67) ‘Am precast cl im azul in care programml supus analiza este carect din punet de vedere sintactic, este nacesar sb rtinem si modul tn eare ‘te conatrut, anume arborcle de anal sntactict sau o modalitete de ‘eprezantare lu, In casul accept socvengl,coafinutalseivel « diz ‘onfiquraia finalk poste fprelucrath pentru a cbtine siul de product {olosit. Algoritmal 3.2 proceeesskstive a si peatra fecarenelerminal va refine indicele (nurarul produce!) pentcu acl neterminel. Exemplul $.1. Considerind din nou gramstica dole inceputulparagrafu- Ini, @ = ((S}s {a,b,c}, (5 ~ 0588, + 05,5 — ¢},$) aplctin algort- ‘mul de mai sus gi vom jie uemitoareasoovengs de tran in analiza Sntacticl dascendent cu revenii a grului de intrare aac. ‘Pentru focare transite vom specific intre parantezorotunde ce actiune os plied (de exemplu: (1) semi fapeul e& Is soest pas de analiak se aplich.o aciune de expandare) (4.2.5) Fy (4,2, 52,4505) Fay (9,2, S20, 508) ty (2 2054, 058508) A fa Sadie S685) tah Sasjasy ASRS) Hy th, Sadie aSBSBSHS) Hy (3 825 5s, aShSTS) Fy (8, 5108i05s, aShShs) Fa (03, $1081055, 08HS) Fe ff SiSiady0 HSS) ey (5, 53a5:25.0, 585) Fay (4,5, SiaSiaSschS,aSbSb5) Fy (6.5. SsadhaSeehSh, aSbS6S) Me (5, SaSiaSsehSa,aSb5) Fey (6,5, SjaS;aSicbp, aSBSHS) Hey (05, SiaSaS4ebSn 85) Fy U8 ‘SpasyaSacbSye,b5) Hay (66, Fred eSychSye, 68) He (5, SiashaSiebSs, 68) Hea (6,5, S.adhaSsehsy, BS) Ha (5, SiaS.oSuch, 958) Fea (by 6, S:05,0846, 8588) Fa (6,3, S:81093,cbSb5) My (6,3, S,aS;0, SbS68) Fa (62, Sash, aBbSb5) ra (,2, 05,0508) rey (612, $:252,a565) Fey (3, $1050, 365) key (0,3, 5108428, 58508) Fe (6,8, Siasyas,0B8Sb5) Hey (0,3, 5.053085, 055) Fy (3, SsaSi08%, 2588) Fa (4,3, Si08205s, 85) Fay (a SieSa0S5c, 8) key (4,5, S.aSz0Sseb, 3) rc (8, S:aSna84ebSy, 0568) ky (,5,S,aShaSve 854, 0568) Fe) (G5, S1aSuaSvehSs, aS} Fo (8,5, SiaSyeS3cbSs, aS) es) G5, SieBiaSachSs,6) Fx (0,6, SiaSaaSrcbSee.2) ro) (3, Siasrasyebsyo,2) si ‘Wigeribanal Bi Descendent revert i INPUT: Gum aves. & OUTPUT: mesa) (acceplace ou ay), sir-prod amas 18 3 { confguraie iia) 4 while (2 9 and (e 4 ¢) do sag then & Gms) and (= m4) then 5. eke | ifvarf@) =A then w posh Ar); (Se A +7 prima produce a Jul A) b oneshy wena); ® Hf vorf(B) = 34 then re 45 push iS on » 4 porta); push(Ba) SEA + aj41, dack Ay 0 fost ulti folosith then 1pop(a, Aj) push(a, Agya)s Ene if Get) end (AS) then one op(a, A); pueb(B.A) then mesa}: "EROARE" oo St mes: "Socvenfa esto accoptati” Construir.sit-proa Aigeriemeal aiepred ="; ‘while nat vida(a) do if vila) € V then siz-prod = Indice(vef(a) + sir prod end if pop(a}; end while Am subliniatsituaile mai complicate caro epar in alagere trenatil cate oe aplick Ia un moment det: Snsuecesul de moment urmat de o altk Incereare, repectiv insuccaul de moment urmat de revenie. In acest nz, configuratia abtinatf dup inauccesol de moment, datorth faptalat cf vdnful stivel de Iucru este un terminal, nu permite o alth Inoereare Astfel ci so ve aplica o revenire,reeonstituind partes dzespt a, ultimel roduefi splat, coe ce specific de fat, revenire pe un nivel superior Sn arborele de analiat. Peniru construireasirului de produc folsit vom preluera confinutal stivel de Iuera din ultima configuraiie: SvaSzaSschSyo, obfindnd 1,2, 3,3. Analizor sintactie LL(k) Analizorl sintactic LL(k) (ASUS6] se esracterlzeso prin fapul c& fm ovis retranscrsre aleperenproducfiel este wn determinate pastes cia (a! = 03.) «© simbolul do retraneris (A); © predict de lungime k acg2-. 4 dup cur so obsorvt gin alegerea produchiei A+ 9 in figure 3.2 Predijia de lungime kroprezintt urmtoncele simbolui cre er t2e- bul generate din configurata curent4. Pentru acesta oe introduce o functie FIRST, [ASUBG), car calculeat prilek simboluri es. pot abline prin “erivii suceosive intro snumité form propoaiionals FIRST, : (NUD) ~+ POY) FIRST:(a) = {wwe Ta 3 us, {primete I simbolur ae Tui a) kava S whl <4) 83 a a. a. 1 ili igre 82: Construasborell prin anabin snack LLL) 3.2.1. Gramatiei de tip LL(k) Definitia 3.1. [AUZS] O gramatick G = (N,3,P,S) este de tip LL) ‘dae pentru ovleare douf derivi de stanga: 1. $3 wha see uha9 of 2 Suda sruwred wy; stl incdt PIRSTs(o) = FIRST) avem e& 6 Defnifia poste 8 reformulatl astfl: pentru orice form propositional twAa, primele ksimabolurl derivablle din Aa dafinese in mod unie produc- fle care oe poste aplice lui A pentru a obfine o derivace @ unui cuvén secvenf de simboluri terminal) care ncepe cu w sso cootinul cu aceste ‘simboluel. Assastl conditis este uneori dif de verfeat sin majortates ‘azurlor ce face apel Ia urmitoareateoremi ‘Teorema 8.1. [AUTS] Conditia necesaé si sullcientt pentru ca 0 gra- Inatie sk fe de tip LE(k) este en pentru orice pereche de produetit dis. fincte ale aceluisi neterminal (A B.A» 7,8 #7) 88 fe verifeatt condi FIRST4(B0) 9 PIRST (ya) = 0a ast! Incét $ % wha. 86 | Analizorul sintactic LL(1) Considering caaul in eave prodicia ete de Iungime unu (= 1) se cobfine un elgoritm efiont de'snalzisintecticé i anume énalizoral sin tactle LL(1), care se earacteriaast prin faptl cf la facare pas: + sim iibolu A neterainael ltuat cel msi la gtnga ta forma proposition sali ‘predict. - urmtorl simbol de pe banda de intrare, ‘determin fn mod wnle slegerea unei producti“! a} ‘Teorema 8.2. [Ser] O gramatick este de tip LL(2) dack si numai dack pentru fecareneterminal A ex produtll A ~+aa|.[m) FIRST (ax) APIAST4(a3) = Osi dacdcy 5 e, FIRST (aa) FOLLOW(A) = 0, Vi, Tis Dup& cum sugeressé teorema, o situatio mai specials. apare atunci ‘And pranal simbol din reserierea lui A, FIRST(A), ete secvenfa vit ‘Analizind arborele deja construit, se poste observe cn acest eas tebul ‘i lulim in consderaresimboul cao se obtine di coea ce Yurmeaab" dup3. ‘4. Pentru aceasta 2 introduce o noud funehis (AUT) FOLLOW : (NUE) + P(E) FOLLOW(#) = {w € BIS afyw € FIRST()} ‘Pentru a construl un analiza sintsctie LL(1) ave nevole de predicile care pot apie pe parcursl annie’ gi care se memoreatS Int-un tabel, omit tabel de analisd LL(1). 3.2.3. Construirea tabelului de analizi LL(1) CCateulal elementelor din tabel dopinde de valorle finctsi FIRST. Pentru a putea deere o metodk de caleul a Iul FIRST avem nevoie de ‘urmitoares proprette Observafit (6100) + Dack Ly, La sunt dovs limbaje peste alfbetul D,atunel: 12 @ La {ule € Z,y € Layzy = w,ful $1 sau 2 + FIRST(aB) = FIRST(a) @ PIRST(8) FIRST (Ky. Xq) = PIRST(X) ©... FIRST) 55 Kigosttenal 33 FIRST INPUT: G OUTPUT: PIRST(XIWVX Ee NUE for VaeB do Filo) = fo}. 620 cd for Tmo; FA) = (ale € B.A oem Az € Ph; (iniialeare} repeat fom its for VX do Tf Fi au fost ealelate VX © NUB then {deck 3Y,,Fi-i(%)) = 0 tun so poate apice) RA) = Rafa) U GASH WERE Rih)@...0R AC) end if end for until F(A) = F(A) FIRST(X) = ROO)VK NUE Exemplul $.2. Fle gramatica @ = ((5,4,B,0,D}.{, unde P aste: SBA As+BA ase BoC cape Cae p>(s) Daa shah PSh Aplicind algoritmal obtinem: 1.6), F(D) = {oa} ), IS) = WAKA) = (a0), F(B) = 8,710) AUS) = WAMA)= {6.0 UB) = (G0), ALC) = (> AD) = (Gah (F,(S)nu oa putt caleladeoarece FB) mu ee caeaat) FAS) = {Ga}, F(A) = {0,6}, Fa(B) = (.0},FX(C) = {e.6, FAD) = {a} so PAS) = {Ge}. F(A) = {0,9 FCB) = (Goh Fl) = tee Fl) = (Gah Dupiicum oe observ din teorema 3.2 in cau fn care ¢ € FIRST(A), pentru un neterminel onrecare A, vom aves nsvoio de multimea FOLLOW (A). Nu esta neoesar of construim mltimile FOLLOW de In ioceput, ck, ‘doar in timpul cofstrusitebeluui dacksituetia de met sus epare. Algo- ritmol 3. desrie constructia muljimll FOLLOW. ‘Rigoritmmat $4 FOLLOW INPUT: G, FIRST(), VENUS OUTPUT: FOLLOW(), VX e NUD Wx € N~ {5}; {naliare} (4 {cormpunatioesimboluu $ flo n aalied} for A+ aby € P do if e€ FIRST(y) then PB) = F(B)UF(A) lee (8) = F(B)UFIRST(y) end if (yx ew OW € NY, ‘Tabelul de analis LL (2) trebuie of cupid actual posible und in considerare simbolul eurent X € NUE 4 preditile posible u eT. Astiel vom avea un tabel dimensional, care ve contin ee olnie pentru Seca simbol din gramatik (terminele gi neterminale) gi ete o coloank entra fener preditie posibilk. fn plu, oe adaugh un carecter special, de ‘bios! nota 8" (VUE), al ebrul scop este 58 marchozosfrsitul secvente SL clrua ise aloe linie gio coloan in tabel. Bfectul acestui simbol in {ea de anallek propriu2is este de elimina verificirile de stivl. goal Regulile de completare a tabelulul sunt: 1. M(Aya) = (a4),Va € FIRST(a),0 # «A — a productie ta P eu ‘num MM(A,B) = (o44), dack © € FIRST\@),¥b € FOLLOW(A),A +a roduchie im P et mumrul 8 2. M(a,a) = pop, oe D3? 3. M(8,8) = 206, 4, M(xja)serr (roars) in esate esau Pentru gramatica din examplul precedent, construtiatabelulul de ana- li LL(1) neceité sf calcula multimilor FOLLOW pentru neterminalele Ag C, deonrecee € FIRST(A) sie © FIRST (C). Aplicares agoritioul FOLLOW oe poate observa fn tabelul urmieor: F FOLLOW] S| 2 hd 4/26) bo BY Finsraur(sjur4 | {+)<) | F@UFC) to b | riasriqu run) | (+r) ‘Tabelul do analist LL(1) pentru gramaticn din exemplol 3.2 este: + + It as 5 BAT BAT AL FBAZ 8 a = BOE DOL Clea spes at a D Or ae > | pon, Pep C Pep 3 Bae = Pop 5 rc $.2:4. Functionarea analizorului sintactic LL(1) Putom descie acum: 1 factions analiza sintactick (1) dupifmodelal uni sutamet poste dows, avénd ce daze de inter: grems- Sie Hinbajuhi, tebela a (a) soeventa de analaat A tomatal pask-dowa sre’ Hssdi do intare, momitd stil de intra, 0 ‘inde fucra,unitaten contalt al eel eomportament este deat prin ‘anal go bandl de igre (AUTS, Sr87). pop reprook operat de scotare din svt, tm nest cas seve api pentru douk sve daa pena rm 38 (CIGNA we dane ca un pt (0.2), 8 sonre anita Sree fe rere fate dhe, rofaniade Gonna nial (0, 9) emi atl bd dn sracothin tnt of ala, maa sino, sede issn ameter sg dee # fast 8 (aS taal geet, and i at i ‘eurtn git (yr) een nga kis ive dente, caf ae ie tr th inves edu Dc Se turbo cope el vee seus ote Bieuiatt “univ eis lor 2. push -operaia de punere fn stv (er Aan) F (we, Ba. x), dock (A.W) = (Bie de fap, native de cre efetuesad urmitoaele operat: se scoate ‘Adin tv 9 pune fa sti 2. pop ~ operaia de scoatare din stiv8, se eliminé vésurle ambelor tive (dae ele eninci): (ur,co8,) + (2,08,1), dack Me) 4. tranny de acceptare, deck sa obtinut confguretia finals, notet B.S.) Face; 4: tn cael carat exon, notatk er: (0288.2) + er. CCorerpunsitortrensiilor de mai sus, analiza sintactic8 DL2) se face conform algoritmului 35. Pentru gramaticn conslderat Ta exemplul 3.2, considerdnd productille ‘namerotete fn ordines in care sunt date in exempla, pentru eare aver construit tabetul de analie’ LU), analiza soventei a (0+ a) se face {elu urmitor: (22 (0+0)8,58,4) (20 (¢+0)8, BA8,1)- (a (a-ba)8,DCAB 10) F (G2 a+ 6)8;aCAS, 148) (o(e-+a)8,CAS, 248) (o(e-+2)§,«DCAS, 1485) F (a+ 0)8, DEAS, 1485) F (0-+ 08. (S)CAS, 14857} F (0+), 59 ‘Aigoritzmal 33 Aaa sailbi INPUT: tabelul de anslisk LL(2) 04 conflict: + produce gramaticlt mmerotate; « srovenje de snaliant w= 0102.0 OUTPUT: este cau ns decventa acceptat; deck da, sul de product ovr ta eccep seul de producti alfa = wS; beta go trun; ‘while go do if Bava (bet op(beta); usi(bet pash(p) ele if M(yaf( beta), varfalfa))=pop then Spi s))=(b4) then "ace" then, -writo("Seoventa © accept” rine) se ‘wrte(*Secventa nue accept end if S)CAS, 4857) (a-4 a)f, BAYCAS, 148571) F (a+ 0)8, DOA)CAS, 148714} F (9-4 of, oCAJCAS, 14857148) F (e-+ 2), AJCAS, 14887148) + (€+ 0)8,=| 2). [aid Bh ‘Se observ el dack construim mlfimile FIRST pentru cole dout prt dreapta de produce corespunattoare lui 8, intersctia este nevi, dec scesstl gramtick nu osto de tip LL) si nu ve poate aplica analizssin- ‘actick LL(I}. Presupuntind ch acassts conditie nu se veri la Inceput se trece In etapa urmitonre de constructie 8 tabeluli, le completarea elle! M(S.f) vor aptren dou valor: GE... 1) sh (vee .., 2) Se poste face urmatosres observa important pentms implomentare Observofie: La proiectates unui enaizer sintactic LL(1), dack nu ve vetifck condifa relativi le gramatick atunci constructia tabelului so face verfcfnd sf mu existe dou valor distincte pentru 0 aceeasi poz. Intra ast deca, elgortmal mu va patea fonctions pentru cl ee distrus proprietatea de wnicitate e alegell productiei gi trebule emis un mess} carespunaitor de eroare. Produce gramatici sa pot modifica prin urmitoral artifiiu s fac- toriaeeak prefitsl comun din esle dou producti gi se introduce un nou helerminel pentru restul pry dzepte. Producile noulu noterminal de- ser partea diferitS din produce inifiale. Grematica din exemplul 3.3 devine: <>},2,5), unde 6 G = ({S,C.ERL,T), {ifs then,elaeidconst, de producti sunt: () Sif C then roe (@)T elser WC ERE (6) Boia (6) Bs const (R= (9) Roe (raid Calcul multimit FIRST are ce rezltat: <>} PS), ume Grerr| Se obeurvé ok « € PIRST(T), deci trebuie caleulin mulyimen FOLLOW penteu neterminalol T. Tinsnd cont de feptul cf algoritmul FOLLOW se bazeari pe studierea pirtlor drepte ale producto, sin- ‘gura productle fo care apare’T in partaa dreapté ext prima productie, pe ‘ultime poztio, deci se posta conclusions e& FOLLOW(T) = {¢) ‘Tubelul de analisé LL(2) va rim acum si analindim secventa {f2=7 hen z:=1. S.a efectuet analiza lexical a acesteisecvont gi deci intraren pentru analizorul aiztatie (1) cate: {fidetd then id-meonst, Tranitlecorespunattoere sunt (fsdaid then pe (ide then i:=const,C then TTS,1)-(it=id then id-sconst$,ERE then 198,14) (d= then id:=const8 jd RE then 178,145)H(=Id then id= 1 then 17 81457} nat then ITS,2457)+ (i then id-mconst8,B then TTS, 2457) hen demconst then TTS 14875)+-(Chon icons then ITS, 14575) (ds=const, 173 14575) (demconst d= ETS, 145759)h (sconst8;= BTS,145750)¢ (const 578, 145759} (cont8 const TS, 1457696)+(8,78,1457506)+(8 3, 14575962) (8,8,14575962)F ace. Dei seeventa este acceptaté -=const, $8,<)H(\fidsid then id:=const6ifC then ITS, 3.2.5. Calculul functiilor FIRST si FOLLOW prin ma- trice booleene {In [Boi83] se propune o metoda slternativk pentra calelul funefillor FIRST si FOLLOW care se bazeazk pe slgorimi zeletivaimpil de uera ‘ex matrice booleene. Vom incercas& prezenti suecint aceasti matods, ‘irk so argumenta (pentru detali,[Boi83)) Functia FIRST’: NUD — P(D) esto transformett intr-ozelaie binarks QCPIRST a dack si sumai dack a € FIRST(X),WX € NUD,¥a € D. Pentru a putes aplica aceasth matod vom face o scurth introduoere a ‘mutricelor booleene, ca metodt eficentS de reprenatare a relailorbinace 1a operailor dante aoypra lr. Fie po velajiedeinitl pe Ax B. Atonei My notenrk matrices saociets relate p, defintd sotiel: Vi= 1,|4j,¥j = 1,18] af deck by men { oa Gavdosl ml pe cre sunt dente resile dermis siunee matrceor Compunereerlior corspande ful booleenmxtrielor cla sor nears boolean are cx rent toto mete boolean, ete eb slngoramodicare cae va tebi sho face ni ural a matriclor aS: dach > 1 atune a, Matrices corepunattonr ahi transitive o* wun zl ca cule optic elgrtmnli Warsbal[AUTS)] algortanal3.) 63 ‘igoritmal 3.6 Warsball INPUT, id -mistrices corspanaStoare elatil p OUTPUT: R-matriceacorespunsitoare relate if Cd i) = 1; end if end for end for lend for fnchideres reflexiv-iransitivi p a unei relat presupune c& avem 0 Inchidere p* sf im plus a p a,Va € A, deci pentru a objine matrices oo- respungétoare M- vor splice elgortml ui Warshall si vom seta ele rmentele de pe diagonala principal la valoares 1 ‘Pentru determineses relatiet FIRST sunt nocssare + construlzen mulfimit Nes + construire relator auliare FIVE si PT, ‘Mulyimea Ne = (A € NIA * e) oe caleuleast pe base algoritmulut an. ‘Rigoritmel $-7 Caleal No INPUT, G = (W,5,P, S) eramalled independent de context OUTPUT: Ny No= (Ald +e); Relatia FIVE (lest Nonterminal without ederives) oe definete in flu! surmitor FNECNXN:VA,BeN AENEB 34-1 088 € Prov € Nipson: cy ‘Similar, relasia FTE (First Terminal without ¢-derives) este: FNECNxD:VAENYaeE APNE 0 63A~ a08 € Pra € Nigien ‘Atunck Miner = Meno: © Mpre: fn mod ssomtntor, vom gsi orelatie de caleul peat relatia FOL- LOW: VA € N,Va € DU {e),A FOLLOW a duck si numai dack a € POLLOW(A). Pentru aceasta, sunt necesare urmitonzele relat aux lie: © UNE (Lest Nontorminal: LE CN x. VA,BEN,ALNEB 34+ 088.8 © Nopitn! © BQN (EQuality Nonterminal): BQN CN x VA.BEN,ABQN B $30 aABBY.B € Nezstoni © BQT (BQuality Terminal): BO. Nx E VAEN,Vae 3A BQP a 4 30 oAf07,8 © Nizetoni ‘Atunel: Mrouuow = (Muns+)" 0 ((Man © Merasr) + Msar) 3.3. Analizoare sintactice LR(k) ‘Analizasintactick ascendentl construigte arborela da anali sintec- Lick Inoepind de la frunae gl avanstnd gpre icin. Strstega de construc- {Hose baseaci pe reducerea socvenei do intrare la simbolul de start al gra- ‘atic. La fccare pes, forme propositional intarmediark esto comparet’ fu partea dreuptt a unel producti din gramaticl. Dack gust identice stunci este fnlocuitl cu parteastangX a produetiel respective. Deci, un al {oritm efcont, care la un pas si determine in mod unic actiunee, tebuie ‘{garanteze of mu vor exsta mai multe potevir fare forma propociionals intermodiaré gi productilegrematici. Se observ cl aplicind o astfel de strategie construct. arborelul ve bageack pe derive de dreapta. ‘Analizotele sintactce ascendeate lniare se bazesek pe age. numite ‘metodé deplasare-reducere! (Ser87. Acest model se repeat la ans ‘oarelesintactic bazate pe relat de precedent si LR. Motoda ce bezeari pe un automet pushdown g are urm&toarul prneipiu de funetionare: de- plasarea- simbolurile de pe benda de intraie sunt introduse in stiva de Iacru;efind se obtine in vérful stivei de lua o forma proportional ider tick cu partes dreaptt a net producti se aplick o reducere- se inlocuogte caged ora 65 in tiv aconsté parte dreapt8 (numité mang) cu partes sténgt cores ‘punsStoare, Accoptares secventel preeupuine ca stiva de intrare ofa vid far stiva de lueru 88 contin doar simbolal de start al gramatic, Cerac- teratcle de baat ale metodet deplasarereducare se pot sintatiza tn: «© configurata eutomatulu este un triplet (a 6x), unde: este conti- rtul stivel de luern, ff este confinutul ative de intrare gt este Denda de fire, care va confine girl producjilor foloste; pentra mai bunk Infelegee & fonctions snelizorul, stiva de Iueru ‘confine simbolurle in rdine invere ("cu fala spre" stiva de aera); + transiile posibileintam astfl de analzor sunt Si mums de patra: Aeplasare, reducers, accoptare gi eroare. Putem spun c¥ eficienga unui algorim deplasarexeducere so bezeasi pe gisivea cit mai epidi s mangei, 8.8.1. Gramatici de tip LR(k) enumirea de LR(k) provine de la modul in care so destigoar analiza sitactick sb anume: «+ secvenga de inrare este parcursé de la stings la draapta (lef) © oe aplick deriva de dreapta (right); «+ urmitoarele k simbolue de pe benda de intvere sunt luste in consi- ‘derave pentru Iuares nei deci nice (prodiie de fangime &)! ‘Dac considerim automatul pushdown corespunsitor acetal analizar sintactie atunel putem spune el fn orice moment ecfunes este unic de- terminat de: simbolul din viful stive,simbolul curent de pe bands de Intrare side predicla de ordin ke Definiia 8.2. [$er87] Dack intro gramatict G = (W,5, P,8) avem $3. du = af, unde a € (NUZ)",A € Nw € *, atunel ores pref al secvengel af Se numeste prefix viabil in C. Definitin 8.5. (Sor87] Blementul de analii LR (l) se defines ca f- ind [A au), unde A —» a e o productle a gramatiel, w © E* si descr stadiul In eare, vind In vedere productia Ao, a ost detectat 4 (ae fn vif sive) si se agtonptk fe detectat 8: 94 Aw ae 700 -FIRSTs{u) velabil pentru prefix vibll ye: 66 ae Analizoarele sintactice LR(k) lucresal cu gramatica imbogitité: G = (WU {S)}.5,PUS > 5),5),8" ¢ N, pentra a evita ca simbolul de Start 98 apard in partes dreaptE a unc producti. Se observ cB cele loud gromatiet sunt echivalente (genereaat acalsi limba) st In aceastd ‘ov grematieg 5 nu apare i partes dreaptlo nic une producti. Definigia 8.4. (Ser87) O gramsticé C = (W,2,P,S) ete de tip LR(K) pentru i> 0 dick din 1, S' Sey aA shu, Bu; 2. 8 Sue Be ora oy; 3. FIRSTy(u) = FIRST(y) recut cha B,A= Boy. ‘Pornind de ln defini elementului de analish 6 considerim un em particular [A> au). Semnificatia acestul element de analiot este oS (98 & fost deja detecat in arbore gi astfel -ar putes reduce subarborele fu frontal ale neterminalul A. Astfel, am determines ednd (in oe stare f sutomatull pustedown) a= poste face reducerea gl care este manga, Ded, ad se ajunge intro stare ce conte element de anal de forma [A af.,u) ectiunea va fide reduoere, altfel va i doplasare. Deosrece starea automatulul decide acyiunea, ca va fide asemenen depust In stiva de Iucru. Configuraiastvel va fi Seine X80. Xmen unde Xm este simbolul din viral stvel, Sar este stares curentl eau tommatului. Cale douk elemente impreunt cu predictia de lungime k var determine comportamentul snalizorulu, earactelsat prin: © sctiunes care ce ve efectua sh tronzitia In alts stare ‘De aceon tabelele de analis LR(k) au dou componente: de actune 5 4 deplassce, aumitd "goto Care sunt gi cum ge determin acoste sisi? Pontru o rispunde s& considerdoaelementel de analiat [A — a.238,u] care, conform define, impliok ‘S Seq yw ta 1086 gh uu= FIRSTi(wo) valabil pentru prefixul visbl ya Deck in gramatickexistho productie BS atunciclementul de analick [B -+-4,x] are, de ssemenea u valid pentru pref viabil a er $3 yAw +4, 10BSw +e yadpw. ‘Acessti observatie sugereafaptl cf elementele de analizk corespun- ‘toare unui acelagi prefix viebil ar trebul grupate intro mulkime si ck ceasté mule carsctrizaeat un pas al snslize, deci va forma o stace, ‘Mulfimes care va. contin toate elemeatcle de analind corespunatvrye unl prec viabil a forma @ stare « automatul ‘Starea infill este cea care corespunde prefcul! vid (Ick nu ea ciit imi de pe bond de intraze), deci vacontine elemental de snaliat [S" ~» ‘Sul, Stares fnslé, corespuraktoare scoeptisit une secvenfe, va trebul # conjni elementul de analizé [5° ~ 5,8] pentrw = impune o actiune do reducere la, iar proditia este vid, adi I ricina erborelul, coe ce corespunde construiril complete a arboraui de anslik sntactck. ‘Toate analizoacalesintactice LR au acetecaractaritici generle. Modul de ealeal al stiilr automatuls gi construcia tebelull de analsl vor fi particularizate pentru diferite jpuri de analzoare LR, si anumne: LR), SLR, ER(1), LAER. Prezentea fcivui anaizar va urme pes: * prezentarea clementulul de anol; + construires mull de tc # construirestabelului de analiats «© fanctionarea analizorul 3.3.2. Analizor sintactic LR(0) Blomentul de analiet UR(0) ace forma [A > of (pedis Bind vide dapare din clementl de anal), cen oe inven ck yom plea Drlocipile nein intactice LR de detrminar v sung Gplsae 9 {oducts dar Bro jinem seame de predic (ce sibel urnesi pe Senda de inrare). Constructia muljimit de stir: Dop cum anim preiato sare este © maline cate conte toate element de anlizkcorespurastoare unui pre vai. Vr nota climes semester de nai (0) Yo flo o functie de inchidere patra constui acest’ mulfine rastueg) clanire: P(E) ~» Pia) care are umitcarele do proprietitiimportante, pe ase core. vom share agora! 2.8 1. Te P(Es)sT ¢ elosure(t) 6s 2, cosure(F) = JU {(B + [A + 0.26] € 1), conform observtie, fin paragraful anterior. ‘Tigoritmal 3.8 ClosarelRO INPUT: Feleient de anal OUTPUT: C= closure); 1 repeat Tor YA a.BA) €C do Tor ¥B+77@P do if (Bo) ¢¢ then = CUB 4] end if ‘end for end for until C nu se mal modifies Pentru determine sts cum so deplaseask automata dnt. stare fn all stare, coe co Insemni se prooeseazd un simbo, vom feos 9 func motets goto {ASUS "10: P(E) x (NUE) + P(E) Duck [A> aX) este un element cin stazen 24, procera Il X Iopmao8 Xa fat detects gf paren neprelucrlt a confne doa: 2, es vom ajunge nto nowt stare care va contineelementel (A ~» 0X 5} sets, X) = closure(((A + aX. AA ~+ 0.0) € 3). Stilo sutomatulu formeazo eolecie eanonct + colectie- pentru eX trebule sk caleulim toate posibilitile de "de- plasare* ale automatului: pentru toat sive» i pent toate sim Dolurle gramaticsi X € UE vom ealeule goto(s, X); » eanonick- peat ok dack print-n esleul gots, X) obfinam o stare 4 eje existent, ea nu va mai f adiugati la‘colctio, in schimb trebuie momoratk acess tran & automatului: goto(s,X) CColetia de sti se construleste dupi algoritmal 3.9. {8°,5, A}, 0},P, "unde producti sunt Bxemplul 34, Fie 48 Sah Anta o ‘Rigoritwwal 9.9 CoLaaioRO INPUT: G- gramaticsimbogi OUTPUT, G eoecis cannie de ett Comb; dlosure( (iS }) = CUlei repeat forve eC do fer vx € NUS do He gal 2) 0 a at) £6 then gta, 30) eat fend for end for ‘until € nu ge mai modliiek Ane 40 = closure({{S’ — SI}) = ((S' + Sj,[S— aA} iitializarea} Pentru constru got(s, X) va trebui si cfutin fa stares sun element de analish care sf confing ** Tnaintes hui X. Construim elemeatul de analia8 cu dup X gi aplicim algoritmul de Inchidere: gotolso,§) = clorure({S! — 8} = {{5' + 8]} goto(ep,a) = elosure({[S —+a.d]} = ((S -+ 0.4), [4 bl.) _gto{so,8) =O oto(s0,¢) getolss,X} ve NUE sa = geal losure({{S-» aA)) = {(S + a}} Se = gotoen,8) = lorre({(A+bAl}) = ((A-+ 5.4), (An bahia oh gotten.) = ctowure({{A-~}) = (A) etl.) = losre({(A+6A]}) = (1A ~» 5A} patosy8) = 54 soto(sae) = 55 70 C= {50,51,80,85,54,85;56}- Automatul are 7 str Figure 88 descr automata fini corespunsitr tranitilor detenai- sete de funtis gto, Figura 33; Automatul de generare al preicfilor Constructia tabelului LR(0): Tabelul de snaligs LAO) va contine ‘hte olinie pentru facereatere,o coloank pentru actione (pentru o anumits stare aciunes est nick denarecemu se fine cont de predict), arin partea Ge goto cétoo coloank pontru focare simbol al gramatiell Xe NUE. “Rogulile de completare tabelull se bageuad pe colecia de sti gt pe reaultatele funtiel goto 1. dack [4 —+ acl € &¢ abn actune(ijmsit 2. duck [A —» 8} € si A y 5’ atunei actiune(i)= }, unde 1 - mama ‘producfiel A+ 8 3. dack [S! + S] €'5, atunc) afiune(mace; 4 Gack goto(saX) = 35 tune goto, X) = 35 T= ah dopa 2 ented $B nh in a NR ASSN RSENS n 5. staren infill a snalizorulul corespunde misjimil in colectie care contine [$+ SI; 6. toate clelalte valor = eroase. ‘Tabelul de anal LR(0) coreepuncitor grematctl din exemplul 34 ste ‘ayrane | ga, Obeervati 4. Din starea de acceptare nu exist deplasare: dack s e stare de ac captaze, goto(s,X) = O,¥X € NUE. 2, Deck intro anumitl stare ¢ atiunes ese de reduoere,etune pentru ‘saree rexpoctivs gotols, 20) = 8,¥ € NUE. 5. Potem acum argumenta de ce se Iuereask eu grametica imbogisii ‘presupunem ch Inerim evo gramatickabigmits consider urm- forul exempa: = ((5},{0,8,c},(S— aSb5, 5 ~},5) Stirile de scceptare ar tebul st Be eale care contin elementale do snalisk [5 —» aSbS) gi [S + c], dar aceste stich sunt gi cele co- respunetoaye acini de reducere. Astfol se creas2i un cont intre accoptare si roducere, care poate fi ujor evita folsind gramatica Iimbogate gi admind ca stra de cecoptare doar cea care confine clementol de anal (S'S! 4, Dack gramatica nu ete de tip LR), stone tabelul de enalicé va confine conic, care so claifiet in © conflict deplasare - reducere: clad o stare include eleruente tie enaliat de forma [A+ af] gi [EP , c008 cn ar implies dou actuni pentru aceasti stare; n asa © conflict reducere - reducere: efi o stare include elemente do ali deforma (A> af} i [B ~+ fn cere afiunenexte de reducere, dar so creeackconfictrelativ la productia cu care face reducarea Analizasintactied L(0) nu oe poste efecua deck tabelul contine confit, Functfonsren analizorulué sintactie LR(O): Anslizrul sintactic 1.8(0) ese un anaizrsitactic de tip deplsare- eduere, in cae configu rafle au forma (a,x), unde a stiva de lucrs, cu capulstvet inepre 7 ai confine 0 succaiune do sist gi simbolurt din gramaticl, 9 e sive ds inkaze,confinéad eecveage de analiza, iar x exe banda de iepire ‘a continesirul de product fest tn drives eecvenfe din simbolul de art ‘Confguati niitest (Ssp wir conigurea inal corespunsi- toore accptiri secvenfa st (aan 5,7). Se observ folosiressimbetalui special § ¢ NU pentru delimtarea celor douk stive, cain casul anal sorulai sntectie LL(). ‘Tanai se defines in fell urmitor: 1. deplasare: dact acfiunen corespunstoare tl 4m din vail stivel ‘delucru este deplasare si simboll din virulstive de intrareeste a, stunci:simbolul a; este mutat din stiva de Intrare In stiva de Iuert 1 noua stare dia vlrfl etivel de lueru va #5 = gots, 04) ($5001 by 24-1. 098)) F (85021 --- 2 msmdi85 0443 ac acfiune( sm) =5 5 Gto( mya) = 855, 2. reduoere: dack setiunea corespunaitoare siti sy din virful stivei de Iuera este reduoere cu products ¢, tunel se eaut% Inoepdnd cu ‘vrful stvel de lucru, partes dveapta. a producjet expective; se zoate din ativi gi ge introduce in stv patea stinge a productieh, 1 dupl care so calcuosc4 starea in cate o-a aunt valonren functieh goto pentm starea din vAefl tive dupi scoaterea mansei sy #1 Dartea sting a produce ¢ gl se dopune In stv; tn final a act lizearé banda de este cu producia¢; tnd cont de fatal ek avers ‘un analizorasceadent producti se feloses in dervare in ordine in- vers fat de cum sunt dotoctate; de acoea, adéugarea pe banda de fepte oe face In fa (800. timy 5-8) + (S89 2-2 pSnpABj 06-98), sdacdtactune(S)= 6, t ~ numirul productiel A — B= Smaps $i 9080(G mp A) = 55, anf), a 3. acceptare: (834, 8,4) = acc dack actiune(i)=acc; 4. eroare, in collate eazuri, Analiza sintactic’ LR(O) fumctoneast dup algritmul 3.10. (Consider gramatica din exempul $4 pntru care am constr deja {abel de onal LR(0), dori nals serene "abc. ‘ive doles | Siva de fatvae | Banda de tare [ Ac\ionea 30 ‘abbot eplasare 5082 boos Aeplasare Soa2b4 be Aeplasare sosmbaba | 08 ‘eplasare, Soazbdbacs | $ 3 reducere Soazbabaas | $ 23 reducare Soabaas | 223 reducere Sox2aa |S 1228 redacere 0st, 5 aveeptare Exemplul 8.5. Fe gromatice G = ((5',8,T,F hs {414 (,)oid const}, PS), cu urmBtoarele producti Sok BoB+Tir ToTerlF B= (E)jidleonst care 6 des Intnit in desererea sntaxellimbajeor de programare pentru generareaexprasilorartmetice (am cansiderat doar ceaul expres arit- ‘etice care contin adunarea g Inmuljrea). Construindrmulfioea de tet corespunaBtoare acetel gramaticl obfinem: sa = closure({{S' + }}) ={[S" + 5], [B—> B+T|(E—+.T), (P24 FLL FLIP > (BY) IP A LF const} f= gotolea,B) = closure((S! -+ £.)) = {[s" + BB 8.47) ‘Observim ca completareatabelulu de analisk LR(0), pentru starea 441 vom avea confit; primul element de anslizt impli actiune de 2c- ceptare, iar al doen actin de deplacare. Ca urmare, acasté gromatich i este de tip LR (0). u“ it tea — cence q 4 / \ ; | ‘igoritanal $0 AnakaiaRO “Npur ¢ tabelul do anelis LR(0) fr confit; ‘+ producile gramatill mumerotate; 1 girl de enlisat 10a Anny unde dings = 6. ‘OUTPUT: cate sau mu svovente nsceptatt; deck da, glrul de producti Hf actunletere)=r ¢ then ceauta-prodlt,pd.pe); pop(pa); ‘tamp:=varf(etiva); ush(ps); ppush(goto(temp,ps));, out-=tout, lee if ectiune(stare)=ace then ‘write(*sucoes");write(out); terminare = true; endit if actiune(stare)=err then’ wie erate") termine = to endif endif endif sent terminace 5 s Gramaticile de tip LR(0) sunt destul de restrictive si de acess, va fi necerar sé elaborin un algoritm mai performant, fn care sé Yinem cont de predic. 3.3.8, Analizor sintactie SLR. Denumies acsstui snalior provine dela Sitnple LR(I),sdiek un ane sor ER, In eae predicta ete de Iingime 2, simplifat. Aceastsimplif- care se Vaneau pe urmftoaree idee: predict va luatl in consderare in ‘momeatul fn care ee face o reducere, tn rest analiza] functionsesk ea g1 (a) (DeR) ‘Care este benefcil acestei mstode? Dec ne imaginsa tabelul de anali2d SLR pentru o anumit& gramatiet gl gem cont de preditle, azunel pentru o stare in care ee efpetueack reducers, pe linia reppectvl am putea ‘sve: relucere cu producta ¢ dac8 predict ete a gi reducere cu productia, 1 dack prodichia este b, eee ce Insoamnk cS atl se poste elimina ua confletreducere- reduoere dint-un analizr sintacic LR(0). Blementul de analisk SLR este identic cu cel LR(0}. De asemenes, ‘constructia multimii da stAei este acsees. Vor obfine aceagicolectie ‘snonic. Diferengele intre cele dout analzonreaper Ia construct tabelo- Tui de anal SLR gi Fanetlonarea analisasl Constructia tabelulut de analiz& SLR: conform caracteristici defn tora aceasta’ analac sintacticraducereace face finda cont de urmtaral timbol de pe banda de intraze eimbollimedisturmitar), coon ce ne indie faptul oX va trebui si folosim functia FOLLOW (aceeasi functie flask Tn cadculanalizoraluisintacte LL(1), a eSrui define gi mod de esleu! sunt date in paragrafl 3.2.) ‘Tabelul de anal SLR "mogteneste" unele caracterstict dela tabelul 1LR(Q): vom avea cite olinie pentru focae stare gar trebui 6h. aver cite 0 coloand pentra fecaresimbol din gramatick X € NUE i partea de goto, artes de acjiune a tabelului SLR ar trbul ak confind edte o eoloan’ pentru Scare prodctieposibilé.w ¢ U (8). Sobers ck pentn Bocare ‘Simbol ternal al gramstici ar trebui sl ge eloce cate doul coloane, c2on ca ar duce la.o gestiune ineficient a spatial. ‘tem imbunitiji acoost situoye flednd urmAtoeres convene: pen- tru simboluriletarminale, pls de tabelcorespunaitonre ctiuni i de- plasiri se unified. Cu ete cuvinte pentra fecare sibel terminal; oelula ‘e tabel ve confine dupi sctiunes csrespunattoare sti xespective g-va Toarea faneiel goto, Tinfnd cont de oboervatile 1 gi 2 din paragrafut provedent, patem deduce faptel o& functi goto ve ferniaa valoi dare ia stirile care coreapund deples%i, Asti), ceasth nlfleate de coloane mi sea 6 creeat confuaii in constructia tabelului “Regulile de competare a tabelulu! SUR sunt: tune! acfiune(u)=s, Vu € D: Dack [A+ af) €s 2, Dach [A > 8] € 5y,A sf 5 stunci actiune(iu)=r 1, unde | este uml producti A, Yu € FOLLOW(A) 4, Deck (9" +S] s; atunel acione(8)=ace 4. Deck goto(siX) = sy atl gototi,X) 5, Stare intial a analizoralui eorespunde multimii din eolectie care congine [5 —.S} 6, Toate collate valort Obeervatit: 1, Gomparind ou construct tabelul de enaliot LR(0), segue 1,2, S sunt ugor modifcata ar regulle 4,5, 6 rma dente 2. $k presupunem cXintr-ostarejacfiunea eate de deplasereigctolj.0) =6. in acest ex, celal (,0) a confine doors (otiunea). Datorits feptulul ch deck se ajunge in aceask stare, automate} coreapunattor smnalzarul ge blocheesk (au se mai poste deplas ia al stare), are vens 98 refiem doplsnrea pent 0 astel de stare. De actea, regula 1s» aplic in fall rmitor 2 Dsck [A — axa € oy stunctactune(u)es, Yu € , pentru care dgotoiu) #8 3. O gramaties este de tip SER das nu confine confit Bremplul 8.6. Fie gration G = ((5',5,T,), (+, (,)i8.cos!),?,S, cu urmtoree prod (variant simple: remot are geneoo. expres artmetice, generSod dvr adn) Soe Eat EOE? T(E) raid mt ‘Aplicind algoritmul pentru FOLLOW obsinem: FOLLOW(B) = {+,),e) ” rf FOLLOW(T) = {the} closure({{S" + ))) = {{S' +B), (8 4.7), 5 +7), (oH) df — camstly = goto(so,) = closure {iS + BI, EB. +7)}) = (18 +B), Bo n+T} goto(sy,) = closure({{B + T}) = (5 TI} etl eid) = love ((P-i}) = (KP — i} tot{sy const) = closure({(P— conet]}) = ({P — coma) gotls,() = losure( (QP (B))) = (t+ (ET, E> E+ T(E (Bd -+ cone) goles, +) = elorure( (|B B+ T)))= (16 +21, = (By), {Psi fF cons = goto(ss, B) = closure({{P + (E.)|,{E — B.+T}}) = {0 (8), 8+ B47) -gato(ss,T) = 335 goto(ss, () = $5; 90t0(S5, id) = ots, const) = 8 goto) = cosure(((E + B47) = ((B + B42) _goto(s6, () = 85; goto( 26, id) = 83; g0to(9, const) = gotler,)) = closure({{2 + (B)}}) = (P+ (B).} gotolsr +) = 86 fe [id [oon Bf st 5 c T z 3 G 5 6 7 a a ‘Se poate observa cK dack am fi consideretanalizorulsintectie LR(0), a i ND SSA AR AN i RN am fi avut conflict in starea s;, intre deplasare gi acceptare. ‘Funefionarea analizorului sintactic SLM este ssemiinStosre cu cea anallzoruful LR(0), eu dou miei modiesis + conuiilor de executie a actunil de reduesre se adaug condita de verfcar a prodictic: adick reducerea va ava lo doar daca tabel vem actiune(sn,u) = rf sta ete virful etivel de intranes # acceptare: ($si;n) = ace dact actiune(i,8) = ace (etiva de io ‘rare cantine doar simbolul 8) FPolosind tabell de analiad SLR pentru gramatia din exemplul 8.6, cfectuin analiza cecvenge!id-+ const ‘Diva de Tueru_| Ste de intrare [Hands de 1aire | Actes 7 deonst eplasare soias -feonst$ 4 reducere 02 eonsts ia redivoere ‘S081 ‘feonstS 14 Aeplasaze S0E1+6 const 14 deplasire SOEL-+Gconsta | § 14 reducere sorL+eTs | 8 25a reducere ‘081 8 2gae ooeptare 8.8.4. Analizor sintactie LR(1) Analizorul sintactie LR(1)folosayte wn sinbol (predicta este de lunge 1).pentru a lua o decisi [ChsB7, Spets]. Se obtine astiel un algoritm taal putenlc, deoarece se micgores2kposibiitatea de aparife a uni con- Act. Analizoarele sntactice LR!) represntXo ope efcenté de imple- mentare pentru complstoarele eae. Studi acertui snalizor seve face ‘comparatiy cu metodele LR prezentate anterior. Blementul de analiz’ LR(1) are urmitoare formal [A — 0,8, confinfnd o produce s gramatici A ~+ of imbogiitk ou panct sf un Simbel u es predicfe gl are urmitoarea semniGeatie: a ae sf in vavful stivel de luer, iar prof secvenel image poste f deriv din fu Constructia multimii de stiri LR(1): Stile anelizorulu sunt, e& ‘nceaulanalizorultsintactic LR(0),spesicate de multi de elamente de analizh. Functilefoloite in construcle, closure g got, trebuie adaptate corespunzitor formel elementului de analiak. ‘Puneyia de inchidere closure ve i calelatl foloind wrmitosrele dow beer 0 1, Ce clasure(0). 2, Considerim elemental de anal [A ~+ «8,0, care are urmstoarea somniicatie: S San thw bar 70BB gh = PIRSTSu) ‘alabil pentru prefxul viabl ya. Vom folosi o produofie pentru B {in deriviil ulteroare, fis ex B — 5 gl vom obyine: Sa thw 65 JOBE ae 7060 tel elemental de analia [B+ 7] a valabl pentru prefix ail 7a. Care exte predict corespuncdtoare acestul element de fnelics? Prim abol care urmessk dup& J tn forme proposiional Sanume FIRST (fu). Darin aces lr de devivii - presupus dejo SKFTRS?(w) = o, oblinknd predictia PTRST (fo). Deci, vom aven ‘urmitoazea regull de caleul pentru closur, aplicatl. in ‘algoritmal 31h VIA ~ 0.86.0) € closure(©),VB +8 € PB + 4,0] €elosure(C) pentru Yb € FIRST(Ba) ‘Aigoritsaal 8.11 CloswreoRT INPUT: L-elemeat de anal FIRST(X)WX € NUD; OUTPUT: C; = eosure(l; G= repeat for VA a.BB,a) €C; do for VB 7. P do for vb € PIRST(Ba) do if [B > -.8] ¢ 0; then G= CUB mt} end if end for end for end for until Cy nu se mat modifies ‘Definiiefonctsi goto se actulizesi in ‘goto(s, X) = closure {(A + oX-B,all[A + XBya] €8})- Pentru calcul coletii canonice de stat LR(1) modifickm slgoritmal corespunatiar de la LR(0) (elgoritmul 39), objid algoritaul 3.12. 80 i ' i e a rcv i amin StS NLRB “Aigonimnad 3.15 CoLataAORT AUNPUT: G- gramatice inbogtiak OUTPUT: C- coletia eanoniek deste at 9 = dlosure({5" —.5,8)}) GU leo repeat for Vs € Cx do for Vi ENUB do ‘Tepotols, X); HT eOmdT EC, then Ge GUT end if ed for end for ttl Cy nu ge mal modick ‘Bxenmplul 3.7. Fie gremation @ tule sunt sas SAA Asad ant pentru care dorim si ealeulim colesta de stir. Vom eves nevoio do ‘aloarea functit PIRST pentru neterminalul A. Se oboervi ugor 8 FIRST(A) = {0,8} (5175, A}, {a,8),P,S!) unde produc- sa = closure({[S' — 5,8) = {[S' + 6,8), |8 + -AA,8), [A> 0A,a}, [Av A,B[A— yo} (A 4,0)) ‘i analisim constructis sti so, pent e nfalege mecanismiul de cal- ‘ul al predigilor din stStle LRA). niga coletia cu [S' ~+ 8,8] Aver un element de analizt eu punct inaintea neterminalulu S, deci vor ‘adluge elemental [S ~+.AA,4J, unde 1 oe ealuleasd ca find FLRST(S) (upé in partea dreaptd a productiei $” ~+ $ nu mai ever nimic, iar predicia In reepectvul element de analink ete 8) ‘Lukin acum in considerare elemental de analici [S — .AA,$]. AAvem pune fnaintea lui A, deci vom adiuge elemente de anal corespunzitoare at productiilor lui A, iar predictia este FIRST(AS) (dup& A, in partea dreap- (8 urmess A). “PIRST(A) = {0,0}, deci vor adsuga pentru fecare productie cite un element de anal cu predictia a, rxpectiv b: [4 — ‘aA, [A+ .04,8] 5 [Ab 04-0) 3, Dack [S' — 8,8] € a atunci actiune(i,$) = acc. 4, Dc goto(su.X) = 5 atunel gotott,X) = 3. 5 Stare ijl» anelorllcorespunde malin dn engi ese 1 = gotlea,) = clovurel{ I" + 8,8)) = (15 = 8,8) compte + 8A by = gotelse A) = copure( iS 44,8) = (IS AAS) [A= aA8),[A 5,8)) 55 = gatls.e) = dosurel([A + 0.Aeh[A 0A.) = (A-voAgl(A-raAtj{A— ahehlA 0A. (a balla» da) cq = soso) clonwe({(A~ byoh{A-2 5,99) = {A+ baa}, [A 6.,6)} poo.) = OX e NUD (vor considera doar multimile nevide in continuare) soto sy,A) = clsure( {8 ~+ AA.)})= (9+ AAAS) setter) = cloare (A A.) = [A 2A], [A~ aA, 8}, [A+ 2,8]) g¢tolsa,8) = closure( (A+ b,$]}) = {14 + 6,89} fetal, A) = closure {A> eAnah A AB) = {A eAyohiA 04H) 6, Toate celelate valort = eroare Pentru gremstica i colecta de tri din exomplul 87, tabelul de analiod 1R() este: s]e z Functionarea analizorului LR (1) este similark cu cea. a anslizoruul gotos.8) = #9 . SUR goto) = 84 i Principal dezavanta} al acestel metode ete cela se creat un = gotose,A) = closure({lA + =A “uma mare de stl, fap car v poste observa gi din exemplal wrmblor, go = getose, A) = cosure((lA—oA4$))= {IA 0AnS]) are um atin calcul o gramatck fone rich, ere genereaat dost ot se,0) = $6 of cxret oitmotice baste pe adanare inte identifcator. ‘Se vor obtin, gots) pentru acest gramatil de dimensunt redo, 16st. Constructia tabelulut de analisk LR(1): Tabelul LR(1) aresceasi {format ca gl tabelul SLR, iat completaree lui se face pe beua urmtoarelor Bxemplul 8.8. Fie grematica @ = ({5',2,7,),(+,()id},P,5), 0 |] wndloarle product regal: SE 4. Dack [4 -+ 6, € stuns actiunei,n) = 9, ¥v € , ou doses BoBsT cbvervtie cain eanultabluli de analisd SLR, gi anume of nn so par vor completa dest celulle de tabel pentru care got(i,v) #6. 4 roe) Toia 2, Dack [A+ 8,2] € 54 x atunel actinmeliyu) = rl, unde este ‘numaul producieh A+ B. FIRST(E) + FIRST(T}=(1d, ; 82 ‘Mulsimea de stiri LR(1) este: = dloswre(|s'~ 8,8) = (6-1 -5,9}. 18 — +75), (B+ B47 4),[E 18,6 7,4), de, [0 st} E)8h (7 (2). 4} = geolte,B) = davurel{(S +B, 8),(B + B+7,8), (5+ 547,4)= (9 8,9, E473), ee +T 4) gto(e,.T) = closwre( (E78) 8 7.4) = {UD id] (P — s,4)) = goto(so() = closure {ET — (6). 8) {0 — (2), H}) = AIT = (8) 8) [2 (2) HE B+T, E> 7), (B+ B+T,4),[6 + 7,4), (2 = ad, +] (0 d,)), (EDI coure({{B—~ B+ 7,8), |B > B+ 2,4))) = {E> B+ 7,8), (6 + E+ 7,4, (0 id,8],(7 + (E),8), Wd, (4) = gto(sa, 8) = dosure( (0 + (B.S) IT ~ (Btls [E> B.+7,)j 2 B.+7,4)) = (IP (6),3), PE), B47 MEET = goto(sa.7) = {[8 + 7)) [BT 4)) goto(s4 id) = {(P ~~ iy 41} petals sure( (T+ (5), +h (P(E) = (= (8) 400 (5) 1B (B D4] |B TIT» de HT 44) [P 8), 4.0 + 6).4} = gots.) = {[B > BTS, (BB +P, 4) goto gotolss, () = (8). 8) = (B+ iovare({\E—» E+ T(E ~» B+ 4 EE TYE EST a(t 8) 40), E> B+T+h i | {BIE {B+} gotolen,B) = (P(E), +h + (E) VoelB B42))) Bo B+74)] otal.) = 31 ‘Tebelul LRQA) este: actiane Ne [ad a as = ra Aalisa LR(L) s secventel i+ (bid) se doeBgoes in past urmBtori as [Side hee Sie ae tre] ‘agian © meade ‘deplore s0ias Havas educare sora Haas [3 rescere soe Hidtias | 23 opiate suElss (enas 23 eplaare S0B45(4 avis 23 eplaare SOBI45(48 4) 23 recucere S0BL43(407 as 338 reducers SOBI+5(488 a8 2828 deplare SOES(@ESH2 | is 2323 Aepleare moples(apsriiaa | 8 2323 reducere woELss(aee412T24 | 18 32828 edusere SOBL45(485 58 132528 | deplasare soeis(po2 | 3 132323 | vetucwe SOEL}ST10 5 4132338 | vehuewe ‘SEI 5 14182323 | sexaptare 8.3.5. Analizor sintactic LALR. enumire acestulenalizor repaint oabrevere pentru Look-Ahead- 1LR(0), ar principiul de foneyonare are le bank urmitoaeleobserasii (unr {a primul rind, tn mulyimes de sti LR(1) exsth. multe elemente ssemintonre, Deck em ignora preleleatunet multe ate arf egal ntrun element de analio’ LR(G) do forma (A+ au}, A+ a8 numepte nuclew, far u reprexint predictia, Nuclele elementelor de snalick LRG) repeeaint’, deft, elemente de analiss LR(0). ‘A doua observaie se remarck in urmilogres situatie: fe douk sti aig. Staren 5, confine un elament de analiak [A — o.,u, coea 2 ‘ya determina o reducers eu productia A — or (actif = ¥ t,t find ‘ural producti!) i apo, autamatal va ajunge din stares Into stare Sou Staten 5, contine un element de analieé [A ~+ a. cae, la rfndul 1h, vadetermina reducare cu eceaay producti A+ (ectiuelx] ==) Si apol analze va ajunge into stare sq, m tajoitatescazurior iferish eS ‘Tota, pare relstiv bar ca dupS.efeetuares reduceril cu o aceeagi producje'sf se ajungk tn ate diferite Aceasttsitualo se explck prin faptul ef reduceren este deisé de tabel, iar etarea in tabe tne coat n prima rind, de preictie simu de producti cu care se face reducers. Hise = pa ile 86 “Analizorulsintactic LALR propune "ak se privease Inainte Ia acjiune si apol la preditie" gl, prin urmare astil de stiri si ma fe difereatiate: 8 Biss ar trebui ok roprainto o singurk stare o., In cave predicts sk uprind toate predicille posible din stile uniicate ‘Starea unifical s,y va conte elemental de analsk {A —» auf, fa cave caracteral'/' este flosit pentru separares predictor. ‘Principiul LALR (LLH71) const in unificeres tuturr etirlor LR(1) care eu acelagi mlen, eu predicfile corespunaitoare, cu restrictia de a na se cxes conficte, ‘Consirucje unul analizr sintactio LALR urmeast aceiaglpasi ce orice anollar ER(E), putinduse alege una din variante: 4. Se pleact de a mulimes de aici gi tabelul LR(t) sl 9 constriaste rmulfmea de stir gi tabeinl LALR prin unificares stiellor LRG): pentru Becare stare; 90 verifick dack elementals de analik din «61 ¥ = Lf ~ 1, at soelagl nuclen gl mu oe creoazd conficte. Atunet tt stares, cht st staren soe inlocuese eu starea 5,5 peste tot In ‘abel (inelusi fo partes de got). 2, Se construiagte dizect mulkimes de sti LALR prin edeptarea algo- tml LR(1) ast: ‘Acestalgoritm dirt do eoleeticst@riLRA prin faptl e& nainte de & scliyga 0 stare la colecte verifcS in ine 11-17 dack nucleeleacestel sti ‘hu apar fa alt stare precedenti. Funct epalnuclee(T,s!) are scopul de ft returna true, deck exlst fo corespondenté biunivocd inte nuclele din sve 7 gi’ [gi nu ae creesel conficte) si flee In cea contrar. Deck rezltatul este fue, atunelelementale de anslis corerpunzltoare din s! unt modiicate astiel nob! eh conink predigile din stares 7, operatic realiaat& fn algoritm prin apehl modificas',2) din lina 16, Doar deck fe construogteo stare T cu nucle diferite eau conliia de evitare con- Alctalor nua fost indeplinitl so adaug® stares T'la colecia esnonic8. ‘unetionarea enaliorulal LALR este identek cu a nalizoruui LR(2). Bxemplul 8.9. Considertad grmetia din exempll 38, muljinea de svi clelati i tabelol RQ) eorespunetor, alos prima strategie de consrucie entra LALR. fa primal rnd vom deterine tke care pot {ocion gobearri in coleia do sti LR(1) urmtoaele pees de te eu mele dentce: (2,7), (88), (48), (613), (10,14), (1,15). $0 observ 6 mumiral de stk se reduce simian loc de 16 str} avem doar 10. Figur 3. iustressé automatul rust din fosiunea stiilor. Tel de anak LALR ert (5 colecieseWiLALR, 2 OUTPUT: Bet; & 4 = losural[S +5, CU {so}: 7 * ec, do & for vx €NUE do % , Dngoto(s,X); wif (4 Blanal ¢ ) then un fing = tras; a for Vs eC, AT do 1 if egal.nucee(T.s) then rr smodifia(eT) lg = flo; 16: end it 6 ‘end for rc if fag then we Gur w end if endif 20 end for 2a end for 25 until C; nu so modifcs a Spr Tha asf apa oo a ig) asl -3f3,8) | 5{4.9) (10,14) cas] SLB Par tia] appt fist pe BAT Taea| ex} ra iloesoete ws pbicceaetnmiats cows Or z Avaaatis © Figura $A: Automatul de generare a prediiilor dup fveinnea strilor ‘Rxemplul $10. Fle gramatice G = ((S',S,A},{2,8},P,S°) unde pro- acto sunt: ss SAA Anas Ane pentru care dorms calculi colectia de stiri LALR. Vom avea nevoie do valoarea funefici FIRST pentru neterminalul A: FIRST(A) = {0,3}. 1 = dosure({IS"— .5,8))) = (8 + 5,8],(8 + -AA,S). [A+ 0A,c}, (A 0A,th [4 bye A— 0) osure({[S" = $.,8]}) = (15 8.,8]} losure({[S + A.A,S}}) = {[5 + A.A,S}, [4 .04,8),(A— 4,8)) goto(8o,0) = clasure({[A — a.Aa] [A 2.A,8]}) = {A+ @.Aseh [A ~+ 0.48) [A 04,0) [A+ 04,8), (A—> a), [4a 84 = gots) closure({[A + ba} [A ba 8]}) = {lA ba 80 fa d,0) etl ss, X)=ONX NUE goto(sn, A) = closure({{S -+ AA. S})= {[S + AA, $1} _goto(22,0) = closure({iA + a.A,$))) = ((A 0.4, S), [4 24,8),[4 3,8) ‘vem acelagi nucle en 2, det oy devine: sy = ((A-+0.A,0/0/8),[A-+ 04,0/4/8), (A+ 8,0/0/3)} goto(so8) = elosure({(A +8, ]}) = (4 8 8)} Aver acleai nucle ea gn se, decks devine = (Ado) Se = gotolss, A) = closure({(A + aA.,0/6/8)}) = {[A + aA.,0/0/8), goto(ss,0) = 35 goofs) ‘Tnbelul de snslisk LALR corespunator ete: ame Bote. : 2 [> [S_Isya Thee bos Tz T me zs a 5 3 [ss [ot 3 apa feo 3 = oe be 3.4, Studiul comparativ al analizoarelor sin- tactice ‘Putam In acast moment #8 tragem anumite conclu relative la metod de anallad sintactics pe eare o vom slee pentru a scrie un compilator pentru un imbaj de programare. Este evident ch acesta va trebul ales inte «© enalizr sintactie LL{1), dack dovim o ali sntactick descendent; 90 + familia analizoarclorsintactice LR(L), dak dovim o analis sintactics ascendent’, Un aspect important pe care trebule eI ui tn considerare este lagat de escifile impure de metads de analissasupre grametill baju, Blimineres conflctelor nu este fatotdeaune wor do realizat gi de aceva se ores evitarea lor. Ces mal putin restrictive clesé este cea a gramaticilor ERG), dav analiocul eintactio ae alte desavontaje, asupra clrora vor event, Figura 8.4 iustreas incusiunes dintretipurile de gramati!Iuate fn considerate in analiza eintectlok. Se obearvl cf mu existé 0 corelaie fvidentk fate gramatici LL(1) si gramaticile LR(K), 0 gramaticl LL(1) poete si fe LR(1), LALR, SLR sau char LR(0), dar oricogramaticd LL(1) fate LR(). CG Figura 9.5: Relata dintze difrite clase de gremstil In functie de metoda de analisi sintacic8 iferengele importante dtreesle dout mari clase de anslizoae sintac- tice se pot sintetin tn modul de construire al exborlu, tpul de deivlst foleite gt somnifcatia tabelelor do anal’, dupK cum se observ gi in tahell rmitor 1 Tr a | warts howe | —“tcendont anda deri de stan i respi co ‘Produchia oc] Selle (dplaare/rausas) I expandare starea relat ZRelativ la snalicaree sintacti LR(2) putem evidentia urmitosrele evesbii + ER(0): elementele de anal u jou in consdarare predicts; cx urmare, reducerea poste fi elactuatS doar in sti singulare (care congin un sigur element de aneli). Se gnereask multe conte. SLR: foloueste scsleagl clement de ansliak ca gi LR(Q), dar fn mo- ‘mental reduceri se jaw in considerare anumite restrict: se aplieS productia A ~» Q pentro predicts u doar dack w © FOLLOW A), ‘Astfel se vor elimina unele cazur de confit care epérosu In LR(O). enereask confliets putin, dar prea multe sri. ‘© LALR: unlfick stile ZR(1) corespunsiteare woul aceluagi uelou [Ext col mai des folost algoritm, inclosiv de ere generatoaree de nal sntecie8. 3.5, Generatoare de analiza sintactica up com am menfionat gin paragraful 25, analiza sintactic8, & ind un algoritm general valabil, poate & implomentat gener pontra i ‘multe tipuri de limbaje, furizind gramati de descrlere limbajulul ca ‘un parametru al acestela. Color dout mari clase de apalioaresintactice, ‘ascondent si descendent, lo corespund diferite incre de generatonre a tomate bazate pe modelul analiza sintactice LL(L), respectiv LALR. 8.5.1. Generator de analiai sintacticd descendent’ - LLgen Cel mai cunoscut sutiizator generator din aceast clash esto LZgen (Amsterdam Compiler Kit), care are ca intrare 0 grametick de speciinre ‘woul limba}. fn cat in eave noaaetS gramatick na este de tip LLC), LLgen este capabil s& splice anumite transformi pentru 0 aduce ia forma cerutk si produce ca rezultet un program C care realizeezi analiaS 2 LR(1): este un algoritm performant de construire a still, se siotacties doscendent® po bows algritmulul LL{1). Principalele earacte- ‘ine alo acetal generator pot sitetiate ine + operatorl pentru repeite In specifica gramatiilimbajull; «+ teatarea avanaati a erorllor: + control asupra aefiuilor semantice prin inserarea do cod C produti- Jor; rezolarea dinamick a confletlor. Bxomplul 3-11. Vom considera ca exempt un interprotar de expres ssitmetice simple, flosind gramatica: G = ((B,7,},{6,+,*,), 02.5), thde produtle sunt: Eo 5+TIr TITerP Po (Ble Suaxa fiir de opeccail permite floseeaperantesor drepte (fh sh) pentru repel produi, lar ile produc au atagt cod (,cupcne inte acolade care are oll de actiune somatic: Sn momenta Jn ere analiza va folosiproducsareepectiv8 se vor exeuta instructive twociats ‘token DIGIT, cin = ine + fine + expr ‘\n! expr: term! term |= term: factor ('¥! factor |» actor = 'Cespe'y | pier sain + il Fineint&} expr (ee) “Ww {print f(a" ses) 98 cxprlint + o}fint i) terme) (74 termite) (oct Is Aermint #8) fecior() a fectrt tf Ie festor(int 6) CeaminY | DICrT (of =yylvat;} nterfaja LLgen cu snallzorul lees este asuratt impliclt ast: se Javock yyles() pentru a obline urmétorul atom - "valoarea" unui atom poate fi storatf in crce variabiléglobalé (yylual) de orice tip (impli find, int). lend) C LLgen genereseko funcie uilztor (parse) Trtarea erorlor se res Jizeaséinvocdnd o functe LLmessage(), care ipcearct inserarea de atom lips sau ghergerea de alam nedorgh %start parse, main; LLmessoge(int class) { site (las) { case -L-print( “expecting BOF, ") 4 case 0: prntf"deleting token (%d) \ n' symb)ibreak; (defeults /* push back token LLeymb */ printi(inserting token (Ed) \ nse); brea 3.5.2. Generator de analiz& sintactic& ascendent& -yace Generatorul de anclist sintaclc$ cel mal fest este yace [LMB92, {1Y, JohTd), apirut ca gi un utilitar al sistemului de operare Unix pe a ileal anilor 70 (in mejortatea cazurlor, lex st yace sunt foesite ‘impreund, documentaile sunt comune g1 exist o bunb compatbiltate folre cole dowk programe). Yaoe esta un genertar de enalodsintactich LLALR gia fot fost eu sucaée tn multe proecte de compllare gt converse, ‘exitind diferite versuni actulizate. Dintre aceste marti 38 mentinima bison (produs de GNU), care remedical un neajuns al wtilltarvbl orig ral bison genereasl cod standard ANSI C, spre deossbire de yace care tenereaal cod C. “Aplicind acseagi strategie ca gi lex-ul, yace folovepte un Ber de apeci- casi care are de obicel extensiey, cu urrntosren serchurk ssciune declaraii ¥ seco rogul ale gramatici 9% sectiune cod C Bxeculia acestul filer de specificati areca rezultat un program C eu snumee yfohc care realizeaat analiza sintecticS. Sccfiunoa do declaratis cuprinde atét declarait C euprinee intre 2300) dares pec yz, Sxoen de detarai © pate cuprinde: + definitit de macro-url g declaraiti de Funct gi variable care sunt foloste in afiunle corespunaétoare egullor din gramatic 1 ‘Plnclude” pentru a folsi doclaraile dintrun figler header. We Atather Coaer Caplin 93 ‘Sectiunea declaratii yacc se construleste dup urmBtoarele reguli: + contnedocarai care deine simboluletersinale, neers; + se peck procodents operateilor + toate pure de atom excl trebuiedelarate(excoptie atom a. racter ea +" sau), Simbolurile neterminalstrebui declarate deck trobuie speifeattipul de dete foloit pentru valosres somantick Soctiumes de rogull ale gramaticls confine una sa mai multe regu slegramatil eorespunaKioarelimbajula, implicit prima regu din fsierepecificind simbolol de start, cu urmétoates form goneralé: rezultat : regula ~ componente. | regula2 — componente. unde rerultat este neterminalul pe care acastif repul I descr, ir eompo- nente reprezint& recerierea netermizall respectiv, cee ce earespunde unor product rezullat — regulal ~ eomponentelregula? ~ componente. Yntre componente pot fi Inserate acilunl cave determink semantiea re sul {instrucyiunt C} 3 care determin executia respoctivelor instructiuni C ia momentul folesirtrogli da producti cris este asocitX in analiza sintactc. ‘Sectiuinea de cod C: se copinek In efisital Ssierului analzoruli Sintaetc, find locul eel mai convenabil pentru a inera tot ce so doreste a enuligorul sintactic, dar care au trebbie of apark inaintes defi Ia, perse lex(biltetes generatorulul yace a datoreag gt faptulul eX nu lmpune ‘estriol asupra gramatici de specficare a limbajuul. fn eazul In care 9 ‘reezl'un conic, el este rezolvat automat, dup urmitoarele princi: « Tntrun conflict doplasare -reduoere se va preferaintotdesune acfiu- roa de deplasare (so incearek determinares calei msi lungi mange posible); ‘ Intrun conflict reducere - reducere se va prefera prima regu in fordines in care sunt crise in sectiunee de cegul. 98 ‘Beemplul 3.12. Vom considere, dia nou, ‘exemplul interpretorului de epee aritmetio, dar, In aoe eas, vor Incr ou gromatica sini ‘nts, ye permifind sb specfickm priritatoe opersteilr. Fier de Speellcail corespunattor gramatici @ = ({B},{e+.+,),(h2 > E+ BIB + Be, 5) ate: Siiaken DIGIT Site 4 Su Fine: expr {printf ( Md", $1;) exp: expe! 4 expr {88 = 81483;} I expr expr (58 =81+53;) | "Cenpr'y’ (88=83} | prorr 1% CCodul C corespunattor Sctrei produc cuprinde aciunes samantick cvalunres expresil rezultat $$ pe bata subexpresilor din partes dreapt ‘producti, relorite prin 8 concstenat cu indcee simbollul din pesten respi. Strategia LALR asigurd feptul ef in momentul In care ae face 0 educore manga (simbolurie din partea stangk st implicit parametri cores ‘puntos! lor) este cuncecutk gl deel valonres parametrului corespunaltor ‘sii drepte poate fi caleulat. Yacc asgur’.o bunk compatibilitate cu ler In eontinuare cu oeellte faze ele compile. Funcjia yylez() poste f apelaik de ete yace s, tn plus, define 0 functie yyerror() pentra a detecta erie sintactce, care oate fi redeinitS de uilizator. Pentru afolosicale dout utlitare seevengs (be comensi este: § tex sspascal.txi $ yace wd sepascal-y $ cc lex.yy.c y.tab.e ~o exec -1f1 S.fexecceestt unde exec este numele grub executabil care va realize analiea Iesealk 1 sintactc, ir testi este namele flerulo care eontine program sured supus analize or 4. ANALIZA SEMANTICA 4.1. Scopul si instrumentele analizei semantice = ‘Pornind dele arboree de aint sbtract analiza cemanticl eectues- 2 mal multe aefiuni producind ca gi renultat o formé intermedi care ‘50 roprezintl ca arbore atributat seu program rerultt (In eal transla. toarelor ‘Actiunile care e exeoutl pot fi clsiiate in: + verifcarea proprietor entltiilor de program; + vorificarea de ti; * identifcarea operate; nee transformis, Instrumentele care pot f floite tn acasté fea a procesulut de com. pile sus © gramstiel de atrbute, + metode manusle si constau, in principal, in anumite operaitspelate pentru nodule din arborele de sintaxd abstect, 4.2. Arborele de sintaxi abstract’ ‘Arborele de anaio sintatiek este o structurs de date care reprint ‘modul exact in care diferite fragmenta de program pot f obtinute conform regullrsintactice ale limbajululconsidret. Forma exact aerborelu, aga cum esto o2 nocesard gramatcilimbajulul, mu eateTntotdeauna cee mat convenabili forms pentru prelucriileultetioare, in primul rind anslizs ‘semantic, gi de acoea se foloegt arborele de slntaxk abstracts. ‘a realitate, arhorele de snalicsintacticl contine pres multe deta st ramuttneineresante,astfelc& arborele de sintaxd abstract® este 0 struc- ‘uri mai eficiont8. Difereata dintre cei doi arbor esto de ordin practic (G1 ma conceptual), lar detalile depind de decile uate in proietarea compilatoruli 96 ‘gxemplul 4-1. S& considerim expresia beb—4+ave. Figura 4.12) gontine trboele de analy sintactcK, iar 4.1b)arborele de sitant abstract co- espunslon. NY ™ Figura 4.1: Arborole de anali sintactcl (e) gi arborale de sintand, abstract (b) pentru bb —a¥ave Slmplifctrle sunt posible basindu-ne pe urmltoarele oboervatit [eBuL02}: ‘nicl 6 infuens& in timpul execute; de exemplu, declare de variabil,declarafi de constante; ‘+ amunite construct siotactice (ca identiicator,expresie, factor, ter ‘men) sunt trviale, scopul lor find acela dea tzansmite valoare gi mu necesar of Be renute. 4.3. Identificarea Faso do verficare tipurilortasteasé dack programul satistce nigte condi dependente de context, $! anume deck programa! flosete corect tipucle limbajelui, dack expresile care apar in program sunt coreste din 99 ‘Punct de vedere al folosirii tipurilor [ASUB6]. Sarcina verifictril de tip (2 ‘ite de s asgura ck ores folsie a unui identieator are o declaraie co respunaitoare a aceuiidentfcator side a verfca dec8 contextal Tn care spe identifestoral este perm Giicesidentifcatorilor ete necaser verti ipurlo. O constructle su peate fi considerats corecti din punctl de vedere al flo tipurilor decit dup ce tipurile componenteler au fest determinate. De exerply, ‘pentru'ca.o intructiune da atribute sk fe core, tipuslleexpresieh gt ‘arihile!trebuia sk He cunoscute g, mal ml, a8 fe echivalente. Pentru {determina tpul varlabiel va trebui af im cum a fort doclast dati. atorulrespectiv in program. Apesiile un idontifestor eclsict tm: deinire'yfolosire™. Apaigin do dainire const in decarareaIdentfcatorlal, lr toate collate api sunt considerate de flosre. Tentificarea poats 6 exocutat8 complet say per{al In timpul analizel sintatice. Depinde dack aparitia de foosire = ‘nul identifcator poate & plaset inaintea aparitie de deBinire sau au ack sintaxa limbajutul impune ca toate aparitile de definie (Ge fet, Dlocul de declarai), si preceadt aparitile do folosire, cum este carul limbajulut Pscel,stunciidontiicarea so poate execute fa timpal enais! sintactie. Alefl, eum este cazul lmmbajulut C, care permite declare Jn Interiorl programuli,printreinstruyiun,idontifiearea complet ests pesibilS numa Ia pasul urméter. In ambele cazuri, in momenta proces, Apatite! de defnio esto necssark mamiocazeaiaformatilor legate de tip, faze se face prin completarea pentru identfestor © ckmpuli asocnt fh pul, din tabela de simbolur ‘Potem spune c& proces de identifcare const din douk ratine: + procesarea apartilor de definire a identifcatorllor - care va trebui sf completeze fn tabela de simbolurichmpurilecorespunaitose tipulul (co tipul determinat din declarati) gi valor (cu valoarea initials Jmplloit nu cea impust de declcatie); «© procesarea apariilor de folosir a identifcatorilor - care va verifies act tabela de simboluri confine informaile necsare (de tp si ve- loare) une aparii de flosc, sctualizind eventual uneleinformetii din tabelé Tin wale jel vs a caiera tana ip aps are, inn gone Balok ota ck Uinta dene eelared is mooie Sse inn ara ous mg (9 ae, we) 100 Construirea tipurilor Limbajele de programaredivid tipurla in dou categoil principale: primitive: Taoeg (ln, Integer, real (ral, oat), caracter (char), oclesa § «+ tipulstructurate - construitefolosind constructarit da tip: si (a vay) sructurk (record, struct, refering, functle et. ‘Aceste construct de tipur trebulestocateftr-un anumit mad, penta a putas fornlz acest informatie proceirilor ulterioase. Se pot constr frbori seu grafeacilce care contin ca frunaetpurile primitive. De exeai- plu, decaratia de tip ‘ype 8 = array[1.10,1..10) of integer; ‘fl reprezentaté ce in figure 42 array integer integer Figura 4.2: Repreaontares unei construct de tip Meritf sk menfioniim metoda folostK de compilatorul C, deavoltat de DM. Ritehie [KRSE): sunt permigi doer tel eonstructri de tip ~ sn, refeingé si fancies + erray(t) - notesat un git de clemente de tipul t (hingimes ind sedi); © pointer() notes polnterul spre ovalosre de tipul t; » freturs(t) ~notman ofunctie cate returnessi o valoare de tip t iecare din acess tipuri poate f reprezentat de un vector de biti Deoarece avem doar 3 constructor, o codificare pe 2 bil este sueient 101 pointer O1 array 10 frebiras 1 ‘Tipurile primitive sunt coifcate pe 4 bit: boolean 0000 char 0001 integer 0010 real 0011 Astfl orice tip structurst poate deseris prin coneateneareaacestor cdi. ca in urmitonrele example: ‘tage 000000 0010 terry (integer) 000010 0010 orray (array (integer) 01010 0010 returns (array (array (integer) 112010 0010 4.4. Verificarea tipurilor Pentru oasigura cK un program mu conse err de tpaae, compe Intorul trebule sk atibule pur gt apa of le veriice, Aubin de tp consti in s determina tpl wae construe din program (vriebll, Desi, fine), pentru ca apo! veriicaren a determine dack programal fBlosst corstaceteatibur de ti. ‘Vericarea tipurilor poste fi casa in dou component mir: ve rifcare staid, co oo efeceuast la omental compli veieae a amie, c se efectueats to mpul exe progeemulul fa pin ‘erifcsea Spurr se pots ear itotdene ia momeatl exces, ack informa slativs a iu ext aces In eodlexecutabil. Ver ‘ifcares dinamicl de ip miteyetimpul de execu al prograrul obit { micgoreas Sablitaten codull compilat. Un limba) de programare se humegte limba puter tat sau Iba cu vereare statch d tip ‘lcd, pentru orice expres, tiple poate & dterminat le omental com. le esigurnduce stil chu spar eo da tipisare in programa bie. Tajo! Pascal este un asl de exempl chiar dock unele veri se ot efctua doar dinaie. De exempl, peru wallowele deca: sirarray(L10} of integer aoe integer un cowpllator nu poate gacanta eB argumental i din expresa srl] este Sa limitele impose de defini, adic inte 1 gi 10. Aatfel de verificst pot £ efoctante doar prin tehnil speciale, de til analiaei uxului de date fm fatotdeanna cu sucoes de ace, practic ele sunt amBnste pentru ‘omental excuticl Echivalenta tipurilor parte importanté verfetii de tip etteechivalenta tipurilor, Ma- Jesitatoslimbajelor de programace no defines: noua da tipur idantice, de echvalenS lor, care poste fi privit din doul puncte de vedere: fctivalenfa strutuald sl echivaleta de nume. Diferte limbaje adopt ‘a au alte dinte perspective: echivalentaatructurls este impleentat 4a mbajele Algol68, Modula’, C gi C+-+ cu exceptia tipulul struct ia timp ce limbejul Adz gl unee iaplementsi ale limbajulut Pascal foloesc cnhvalenta de nume ‘ferent dintre ela dout sbordri se poate obser in efectul urmitos- selordeclara: ‘ype si= array{t.10) of integer; att acray[. 20) of intage, __ 8 arrayfL10] of integer, fnt-oimplementare a limbajalui Pascal basatl pe echivalenta de mums, vasiabilelep,9,> suat de acelagi tip, der variable pg a au tipur alferite ack implementarea este baaatk pe echivelenia structural& stuncl toate ‘yrlabiloledecarate sunt considerste de aclag tip. ‘Bebivalenta de nume se earacteriaea2k prin faptul ck ecare nume as0- iat unui aceluigi tip este tratat ea un tip unl, astfel ek dou aume de ‘ipuri sunt echivalente deel gi mumai doc au nume deat, oul tipuri se mum eahivlente structural dack gi numa dacd sunt scelai tp primitiv sau au fost construiteapliend aoelai constrictor uncr tiput echivalente structural. Verficarea se poste face folosind wn algoritm e tipal algoritmulul 41 [ASUSG), in care am considarse ck modaltile. Ge construire a tipurlor conse i 1 sin array(at) = aray sof refering: “st + fancies fune(.t} ar care poste f ugor extins pantra a include i ale structs 103 ‘Rigoriteval 41 Behiv stracteg) INPUT: 5 tipuri OUTPUT: true dack s gt cunt echivalente structural, afl flse If ¢- primitive and et then rolurn true alse if array(sy,s2) and t= array(ty ta) thon return Behiv.struet(s,t1) and Beksy-struet(ss,to) Wf p="n and ¢="ty then return Bohiv-struct(si. 4) alse Hf a= func(sy;8x) and t= fune(t, ts) then return Bchiv-struct(s,t) and Beki.struct(sa,ts) lee return fale end if end if end if end if Conversii de tip Si considerim urmitonrele dclarai fn limbajut Pescel var binteger; zea; ‘Bxpiesia 7 +i ete cored gi tipul ei eate seal: Compllatorul asigur cert rezultat pe basa unor conversi de tip implica care oo efectucaz. De fapt, reprzentirile namerelo intropi§ reale sunt difeete, operator care Iuereask cu valor! Intregi,respectiv zeele sunt implementa diet (cular deck se folosegte 0 sceea notaie) gh, de fapt, nu se poste aplica ‘operas unor opecatori de tipur diferita. Astfl, compilatorul trebuie sh convertesscl un operand Is tipul clulalt eau embil operator la tipal coresptngStor (de examplu, in instructiunea r= i +4) O converse se numegte implicit dack este inseratl automat de oltre compilator. Denies limbajului specifok converse implielte permise de limbe): de exemple, de la inten real, de laearoctr Ie string. Princi- piul eae trebule respectat In acest conver ete ca informatia si nu fe DierdutS, Converts unul intr ls zeal respect aceactl conditi, pe cdnd ‘ouversia avere& de a eal la introg duce Is pierderee informatie (valoarea ‘yi Geotionae) gi ponte genera situa eronate, 104 0 converte so numeste explicit dacd este speciicatk explicit de pro- smetor Prin intermediul unui apel al une funeti definite intro tipuri ‘Ecabejole de progremare pooed& fancfilpredeinte pentru relizarea sca for converal(d exempla imbajul Paseal deinegtefunchiletrunc gi round entra conversia unl intreg la un ral). 4,5. Gramatici de atribute Introduse de D, Knuth (Kau 60 metod de speciiare a semantic ‘imbajelor de programare, au ca prncipiu de bast ideca de a atribui o fenaiflesie ssocind atributesimbolullor din arborele de analissintac- tick, Gramuaticile de stributo represntS o modalitateeficient® de specif fare 4 onleulelor gla dependantelor dintre soestecalcule dintran arbore (lo siteod abstract, etabiind ordineaeorectt de exscutia alo. Gramaticile independente de context sunt extinse cu dous carscte- sisi Sool simbol X € NUE ise asocaek tribute gi Seckel produegi ie asociaad raguli da caloul a atributalor. Se dedneste astfelinformatia Gin erborele de sintaad abstract necser analiza! semantce. Definigia 4.1. [Kou68, Kau7l}GA = (G,4,R) se numeste gramaticd de atribute (au gramaticd atibutiv) dack si numai dack + © =(N,D,P,S) este o gramatics Independent’ de context + A=Useyun A(X) este 0 mulime fini de tribute: pentru acare ‘simbol a gramaticl so dfinesc aero sau mal mule atribute, care sunt ‘bleste pentru 2 mamorainfermaii semantice atasate nodurilor din arborele de sintaxd abstract: toate nodule corespunsitaare unui scelagisimbol vor avea aceleagiatcibut, cu valor diferite; © R=Usep R(p) esto 0 multe fini de regul, sumite rogul de ova- Iusre a aiributelor, pentru focare producje A ~» X;...Xq se asociaas ‘omulgime de regu de evaluare ¢atributelor, coatindnd expresi ale ‘ralorliorateibutelorasociate simbolurlior A si Xi ‘Atsibutele asociate uni simbol oe claie in: « atribut sintetizat - deck rule de evuare pentru producia A> %i-Kq able valoore sebutlu a A gh + tru mogtenit-dack regula deevalure corespunaitoae produc- Wek Aine XX atsiuiaYloare atrbutlor Ii Xj,2-= 1m (= Jonreaatibutlu ete mostaits dela pin). 105 0 gramatici de atribute este completé dock pentru oricesimbol X € N; 4 1) peatra orice productie X —> a e gromatici, multimes R(p) contine 9 regu do evalusze a atributalor intetaate ale Tui X gl 2) pentra once producte Y > aX, mulgines Rip) contine o regulk de evaluare a stributelor mogtenite ale Iu X. Presupundnd cK o anumitS constrictie a unui ibe) fost epecifcnts prin regull de produce, ataarea atributelor nu este o sarcind ugoar, ‘Atibutele treble stil sles inctt st modeleze exact earactristca s cei ‘volute se doreste a fi unlit in program. Exemplul 4.2 peack de Ino ‘gamatich pentru generarea de mumare binare @ = ({8,N}, (0,1),P, N} No NBIB Boon . ‘Acsstelgramatiol dork si etegim atribute care oi ne furizeze va | Joarea decimelé a mumerelor binare generate. Pentru un muanét binge puubaby formula de esleu! ester Vey Deeb Pe by ‘Vom avea nevoio de un atibut v pentru a reine valosres, Aplicind ‘chem Iul Horner in acest eslel*, putem deduce gi zogulle de ealeul a atrbtelor, ‘Bxemphul 4.2. MoMB mo woB Ba0 Bol (la prodvctia W + NB aeterminalsl N apare de douk ort Pentru 8” 1 eros conf lai J valor aributelr unl seus smb, sesten Se ndevasah entra poten & eerie crt i dra egulor) Nmvulbinar 101i corespunde arborle dn igure 43 iar valoaren Jui sina ete velosre abut vcorppunaitore rn (7=8)- 4.5.1, Evaluator de tribute ‘Sercina analizei semantice poste fi ssmlltX unl evaluator do tribute care: aplied 0 stratene de traversare a arboreui de sintaxk abstract, fexscutd apeluri de calcul astiel inet dependentele specicate (relative la ‘ip s opera) sunt Indeplinite gi propa volorileéalenlate in arbore. Tae 108 Figura 4.8: Caleulul vali zecimale a unui num binar folosind gramatiel de atsibute Construirea unui evelustor de aribute ae face respectindu-se wrmtoa- tele princi (Eng) sloce epaliu pentru atributele corespunsitoare fieclrul nod din snborele do sintaxd abstract; «slice oat aplice pentru orice arbore care respect sintaxe abstracts speciiatl de regulle gramatic de tribute considerate; + sk excoutoo traversare a arborehi nso de celouleresatebutalor {a momenta vile unui nod; «ek respecte ordinea de execute a caleuleor: nic ovaloare de atribut ‘in fe folsitkInainte de ef disponibilt,orie stibut primesto valoare o singurk dat ge Sine cont de dependentel dnteeatrbute; + si detoctane eal in care nu se pot calcula toate ateibutele(evitsren ‘lclurilor infinite de cate) 107 Incétvalerila de atribato folecite sunt disponibile, iar valorile calculate 24 Je acest pea mu eraa diaponibile, Un astiel da evalustor de stribute w= nmegte evaluator dinamic, dat repreaintk o metods inefilent dl, n plan, fu ee termink deck exist on clea intre dependengele de striate. Un evaluator static determin ordinea de evaluare la momenta com. de evaluare ae bazsaat pe deterzsnnzen depeadentelor de atzibute: dela tribute mostenite la stributeeintetizate side Ia atributesintetizate spre alo mogtenite ‘Un alt tip de evaluator cu resultateeflente,eveluatorul malting 14 pentru plrnte sau descendent. fn princpiu, exist dows tipuri de vizitare Dent un subsrbore corerpunattor nel produetii A — Xt.Xq + pune I dspoaite valor ale atributelor mogtenite pentru un descen- deat X, + vistensh descendent Xi «+ caloulenst atributele sintetiaate cate depind do X a © pune la dlsponiie valor ele tributalorsintetizate pentru plrintele a visiteashplrintele 4 « ealeulenat stributele mogtenite care dpind do A ‘La iecarea 8 vaitave se compar dac sunt valor noi de atrbute cal culate g pe baza dependentelor dinre atribute se decide dacds-aincheat & tevaluazes tuturor atributelor sau dacf, detorith unui cilu intra dependen- ‘ procesul mu se va termina. [Nici une dintre aciste metode de evaluace nu repreintlo solute ae coptebilf,c0oa ce « conus la s incrca gisiren unor clage speciale de sgramaticl do atvibute paricuare, care sé permit& evaloatoi performang 108 4.5.2. Clase speciale de gramatici de atribute Gramatict I-atributate GGrematicle LatrIbutate? permit evaluareaatributelor fotr-o singurk traverse de In tdnga opr dreapta e arborelui de sintoxk abstract. Ce feaultet,evaluareaatsibutlor into grematicd -aiributatd poste fi ugor [neuporat nti aneliorsintactie Jeseendent. fn plus, majeritateagra- tbatslor coreapunattogce Kimbajelor de programare indeplinese conditis fe Lateibutate ‘Definitia 4.2. {ASUBE] CA = (G,A,) so numeste gramatict L-atri- Ijutotd dacs numal deck GA este o gramstict de stribute si pentru orice produce A> XiXauXeoMy regulle de caleul @ atributelar respect trmbtoazele condi + orice atrbut mogtanit al lui Xs depinde doar de atrbute mostenite fle lal A gi atribute ale simbolurilor XX. (noduri situate le tings in aber); + orice atuibut sintetinat al ui A mu depinde de alte alvibut sintatzato ale fu A. Exemplel 4.3. Un exemplu de gramatic L-atrlbutetd se poate asocia desaratot de variable din limbajul C: Deel+ DestPip Listld (Listldtip = DectTp.tip) Listld Id {Tdtip = Bistrasip) istldy + ListIdy, Td (Listldy tip = Liste tip, Tian = List. tp) Declaratiel int Hi corespunde arborele din figure 4.4. Ségesta punc- ‘ath indi ordines de evaluarea setrbutului tip care In fnal va actuliza chmpurle destin tipulul tn tabela de simboluri pentru ideatifstori § 80 ‘Atsibutul tip este un atribut mogtenits este transmis peatru a com- pleta informa legath de tpl unt identicator in tabela de simboluri ‘Si considerim subarborele din fgura 45. Un evaluator de tribute care calcaleaséatributele modulut Cy va lua in considerare doar dou mulfimi de tribute [GBIL02]: Sina Taree) wammars, in ng 109 A Bi B2 B3 B4 Cl C2 C3 Figura 4.5: Subarbore intro gramatick L-tributatt Ja dreapta au are important. Putem conclusions cf evaluaresatributelor se poate itercale intr-un snalizoreintactic deecendent (LL), direct, c& ‘0 procedur cose apeleaz’ ls crearea unui nou nod Figura 46 ilustreandordines in care so reaizea ealcularesatzibutlor fotrun ned din arbere. pointer spre TS v ‘igura 44: Gramatick Latributatl pontra determinarea tipulul dentieatorilor 2, atributele sntetinate ale aodurilr situate la singe de nodul curent Cy, BBs. CChlar dock unul dintre nodule C, By, Ba a avea descendent, acestia, ‘nu intervin in caleululsributelor lui Ca, pentru c& toate ealenlele dsociate nodurllor respective au fost deja efectuate. De asemenea,atrbutele lal ‘nu depind de etributele nodurilor By st Cs, conform definite gramatclor Teateibutate. ‘In soest moment, prelucrarea nodurlor alate la stnga li Cate tor- amined g se prelueresel nodule Cz, Bs, A, retindnd valori ale atrbutelor Inardine de la stdnga spre dreapta, dup ce anliz sintactick a creat nodul reepoctiy gi evaluatorul a caleulat valoarea atyibutelor corespunsitoare rodulul, Asti, nv este necesar a constrain integ arborele de anal, et ze putem restrénge la nodurile cece af pe drumul de a icin’ ls nodal Curent. ‘Tot ce se afl Ia stnga 2 fost procesat gi calcula gi tot ce se aft Figura 4.0: Calcul atibutelor inti-un nod pentru 0 gramatici Tratributsts ‘entra analizoare sintactice ascendant situafa este ingreunalk de ati- boutale mogtenite eare trebule transmise de Ia pisinte spre descendent Pentru a resolva acenst& problem se relizesst un artiilu de calc, cave este implementat in pace, bazat pe analizorul sintectic LALR(1) 3 se ‘beceaté pe urmitonre idee (JohiTd: analizoaelesntactce LI) foloesc cstivd delucru care confine erminle (oe ou fot deplasats) s neterminale (cbfinute in urma uneireluce). In paelel eu ecesstSstivl se consider’ 0 stivi aditionall, numit stivl de atribute, care va confine atrbutele Siecirai simbol din stiva de ner, plstrénd ordines. Problems important’ 0 m1 este des completa atributele mogtenite: cind suntem la sférsitul unei Dirt drepte de producte, se face o reducer ge ponte complete valoarea Stributuluiy cfd sustem in interior uni pri drepte de produce, se ffectuoasd urmitorul arti ‘SE presupuner urmltoarea situate: A+ B(Ce = BB}C, unde e cate un eeibut mosténit al ul C ib e un atribut sintetizat al lui B, Vora Introduce o e-productia ase A+ BAC Aad ‘Voce face acest artic sutomat gi memovensk contextul A’ atte incSt Bb gi Ce pot ft dentifieate chiar dack eu fect scoase din contextul lor obiguit, 2) Gramatici S-atributate Gramaticile$-tributate sunt o las special de gramatici de atcibut, caracieticate prin faptul ek nu contin stibute mogteite. Toate atzibutale Gefinite sunt sintetieae, de unde ae explick gi denumiren acetei cle [Bvaluates atsibutelorint-o gramatck S.ateibutaté poate fi implementaté ‘gor atat in analiza sintactiN escendenti et gi in oan deseendentX. Pigura 47 iustreaed ordines in care ce realizenecaloularea atsibutelorIntrun td din store, pnt ogamied Sauls t t O as A XK a ‘igure 47: Caleull atvibutelor tntr-un ned pentru o grematics Seatrbuters mm ‘Bxemplul 4.4. Putem asocia o gramatick S-atributaté listei de declaratit Gin lzabajul C a care defini vn atefbut dim pentru e determine spatil pectar Ia alocarea vaiablelar reipective TistDedy > istDecy; Dest (ListDedh dim = Listed dim + Decdim) LitDed > Decl_—_{CistDecl. dim = Dect. dim} Ded—+ Tip Listld (Deal = Tips x Lit Ne) Tip iat (Tipe = 4) Tip» long (Tipdire= 8) listld+ Td (taste = 1) they + Ltd (Ute Nr = Lista N+ 1} CConsiderénd declaratia int é:long a; obtinam arborole din gure 4.8, fn care sigefile Intrerupt indi ordines. de evaluare a ateibutelo. pointer apres igure 48: Gramatick S-atributatd pentra calcul dimensiuai zone de ‘memorle Is slocatea varisilelor 3 4.6. Metode manuale Desi gramaticile de tribute reprenin un instrument puterlé penta «realise analiza semantic, detalile legate de implementa lor au dus JF Jn cButarea unar tehict mai eficiete. Caracteraticile programelar impun, ‘uneor asocierea mullorstsibute, ceaa ce duce la o ocupare mere de satin 45 la Incetintea procesulul de compile. De asemenes, discuja despre ‘evaluator! de atrbute » evidentat implementaros lor este dependents ‘de modul de defnire al atributalar. Dack mal adluganfaptl ok defizea ‘tributelor g a regullor de calcul asociate este realieatS manual, Putem argument. c& merit oi aruncim o privie gi ssupra altor metode, care chiar dock su sunt ait de efcionte, benefit de simplitate, ‘Aceste metode poet numele de motode manuale st sunt fn mule de dows: interpretare simbolicd si ecuatl de Bux de date. Arable pornase de In achorele de sinks abstract, eventual pra aributat, dar neces Informal refatve la trasferulcontolull prin ezbore, mal exact pentra un ‘nurnit nod care este succaorul cau suecetori fa fixul de control. Penta sozasta vom avea nevole de graful uxului de control. 4.6.1. Graful fluxului de control [Nofiunea de graf al fuxlul de control este intalnité ia majortatea, compilatoarelor moderne. Craful este de obicei sgocat codului interme iar astel: nodule repreainté blocuri de bezd ale programul, ar arcale indicd modul in care se transferé controlul dela un boc Ia altul. Pro- pirietile pe care graful obyinit le are pot f spot floste cu succes in ‘optimizarea codulu s generarea de cod obiect. BvstS ink g poibiltates de a construi "mai repode" acest graf ¢\anume plocéod de Ia arborele e sintaxd abstract. Cele dout sbordis au totus un scop comun: ex. tragerea de informafii la momentul compiliil daspre ce ge va intdzpla la ‘escutie. In eantinuere vom considers grail fukului de control esoeat a= Dorelui de sintaxd abstract, urménd sf rovnim asupra celeste abordist Sn capitol urmitor. Definitia 4.8. [ASUB6] Graful fusaului de control asocat arbareluide sintaxd abstract este un graf orentat in care nodule sunt reprezentate © de nodurile arborea, iar areal repreainedsuccesiunes nedusilor i Buxal de contra Graful Muxufl de control se construiste prin fragmentares arborell ds sintax abstract flosind o rutin de fregmentare pentru Beare nod, specilicat& tn functie de tipul nodulut respestv. Rutina eorespunaétoare jaf ne unui nod NY primeste ex pacametra un pointer spre nodul ce urmesak af procmst, determink ce produce ul N descr nodul gi apeles4 rutinele Ge fragmentare a descendeatior sil Int-o traveeare recurs acbore- Int, Toate rutinele actualizoac o variabil global ltim nod, un pointer spre ultimal nod processt pe dramul fuxui de contro, prin intermedi tel varlabilesuccesor atagatk Becicui nod, reprerentiad un pointer spre tnrmBtorul nod ce urmeacl afi procesa, Astle obtine o parcungere a ‘roflul fn ordinea in care se va deplasa gi ful de control in exooutia program, De exempla, pentru o expresle bina fragmentares ei inseam fag smontarea subexpreseistngt gi a subexpreciol drepte gi spol actualisaren raviabilel ulém nod, dup cum se observa gn figure 4. ‘ulin nod sikim-nod 5 » > Figura 4.9: a) Arborele corespunaitor expresici a+ b-+.¢ 'b) Graful fuxuul de control stagat bore ‘Totus, au pentru toate construcile din arborele de sintaxd abstract lucrurle sunt age simple. Pentru o insructiune conciyionalA, suberborii corespunzitori celor dou ramuri au puncte diferite de terminare, care ‘yor genera un confit le atualizares variable ultim-nod. fa pls, nodul ‘orespunaitor decisel va avea dai descendent gi nu unul ca pn ecu, ‘Acsss8 situate poate f ugorrezlvatl prin stocarea une liste de sucoesoci ‘n focul unel singure vaviabile suzcesor. Vom construt un nod special de unifeare e elor douk ramur, nod care va fi inserat in gral Mux de control fr a face parte’isi din arbore, pS cum se observ in figura 15 ultim_nod ay ulti Figura 4.10: Graful Suxului de control pentru {fac then a: leleeos= 0 4.6.2. Interpretare simbolici {Inmomentl execute unui program fxn! de control paseuzge un dm posibil prin graf. Codul eare ca executk in fecare nod este daterminat fe valorile variabilalor la Intrarea in fragmental respectv gi determin ln rEedul eB volorle variailelor Is ieire, Uneleinformailcontextuale ‘lati Ia varabile pot fi deduse stati prin Inexpretae simbolicS, Interpretarea simbolick (Sarm76) sou simularen pe stiva reprint simulates execu la momentul eompilii, stayin o stivk Secira! are din rafal fuxului de control. Aceastsreprezentare staticd a stivel exceuiel confine eSte o intrare pentru focae ideatifeator (in prinipal, vexiabile gi constant) vail in cel punct de program, intrare care stocheas® toate informatie disponibile la momentul compilirit derpre variable seu con- santa respectivi. in momentul in care fuxul de catrol txece prin axcul considers. ‘Exemplul 4.5. Vor considera grafuldejeconstrit din figura 4.10. Pre. supunem Tn momentul in are controlul este transferat acestl instruc sunt condigionalo configuatiastivel indie feptul ck variabila a are va 116 Toares 5. Inerpretare simbolicl asocatl oe poate urmici in gurs 4.11 *S.ultim_nod Lelae a ‘Figura 411: Interpretaresimbolet pentru ff 6 <2 then lu at prima dat in nodul a dup8 ieprea din acest nod valoarea Ii se a jn vf tvel. Apol ints in nodal 2, pune gl aceastd vale in stivi st ejunge in nodul <, Ajungénd la un nod care confine un aperatar, scoate din stivd ultimele douf valor (care e compar) gl va pune in ativl reaultatul (F fla). Fhuxul intr tn nodul if gi valoarea din varfulsivet este folosit& pentru a decide pe care mur ge va merge in continua, Prtea then ar putos mareath ca find "cod mort", Totus este ral practic sh parcungem embele ramuriincopind eu aceeasl reprezentare = ‘vel gs le verfcfm, Un mit fa acest sens il constiie faptul ek un ‘compllator emits erori de compillare pentra tot cadul, chat pentru cel care nu ete ans in execute eck considerim alt instruetiune similar.cu prima $i anume if a < 2 then B o= 1 else b = 0 gi lo inate gtim doar cB vatiaila a o fost ‘nigintizat, eavénd alco informatie despre , parcurgeres drum Hut de fx in arbore, pe ambole ramur, va vee ta reultato valoate pentru (ete inline) ur Interpretarea simbolick a fost folosit inci din anti '60 (in 1965, Naur {Nau85| a flesit-o pentru verifeareatipurilor ia ALGOLAO) s poate ep fat cu sucees aft in analiza semantcK, ct gin optimigarea codulul, per tru diferite copuri,precum: detectares folosil virlabllelor neniilizate, ropagarea constanteor, detectarea aparifilor de flosire pentru verisbile, ‘verificarestipurlr ete. 4 Eeuatii de flux de date Pe lingk Socal de control, in orice program exist gun Aux de date, care desctis modul tn eare sunt propagate valoilevarableor gi al con. stantelor i program. O snelis’ a fueulul de date poate ofr informal Importante tn faze de analial semnatieS, dar te poate flos i in fale lurmitoare. Principelele eplicafil ale scestei metode sunt: determinarea ‘variailelor activet gi propagarea copilor(varabilelor) ‘te metoda esto fleitf Tn principal pentru a detect (eclaratk eau nu iniialisati sau nu, valoare miodfeatt ea nu). Analiza fuxulul de date se baseas’ pe scrarea si resokarea unor sis teme de esti, smite ecuasii de Bux de date, care reprezint infarma- ‘ja in diforte puncte alo una! program. AnelizaBuculul de date 2 poate (2 face in dout modu 1. "inant propagarea vlorio in graf w fs in dirota uals de control fra general a ecuailoe de fu de date ete: one = en Un] ~ te) cu semalfiaia: "informati a termioares toe instrsiniTéte Be ‘generat in intararul instractiuni, fe trenamisl la incoput gi nu oe Dlerde (nue distrust) fa timp ce fuxul traverseaak instructiunen"; 2, "Inspoi": propageres valorlor in grate fae n ens opus fax de conto forme genera «ecu de Nux de date et: nt} = gent] (ou ~ At) ca semaiicya: "informatio incepta une instruiu ete Se generat8 in intrioralinstruchiull, Se transmisi dela terminare gina se plerde (nu e distrust fo timp ce focal traverseac¥inktructiunea" Multimile care se dafinese au urmitoarslesemnificatii (pentru un nod 1) [ASUa6]: in cgi tw sae SET 0 vst poet vane cave a foo continua in peor us # IN(Y) informagia care intr in nodul Ns + OUT(W) inforiotia care iese dia nodal N; ‘+ GBN(N) informatia cae 9 genereaut in nodul N; + KILL(N) informatia car se distrage tn nodul Se poate observa ck cele dou’ multimi IN(N) st OUT(N) tnloeuiese stiva din interpretares simbolicl. Deoarece sceste ecuai se asoclaat gre- falul de Sux de control, trobuie sé precisa mune rela tntre nodule IN (Q) = UOUT(M),¥ M predecssor al lui N Modul de objinre gi resolvare ecustllor de fux de date depinde de: + multimile gan si MUL, de generare gt reopectly dletrugere, depind de {nformesja dorté- s¢opulaplicfrt metodel; deoarece uxal de date urmesck fuxul de control, analiza Tul este fn luenatS de siracturile de control ale progresmultl. Pent «ale aula out] trebule sf presupunem cf exist un nie punct de ter- rinare prin care fhoxel de control ise cin iastruciune, De ecees, cuatile de ux de date ce ssociaal de oboe blocurlor de besS, in defavoarea inetructiunilor simple. ‘Reqolvarea ecuatilor se face prin treversici zepetato ale grafulul de control, caloulénd mulgimle ZN’ gi OUT pink eknd aoestes nu se mai ‘modifies ‘Bxemplul 4.6. Vor considera graful fuxului de contol (Sgura 4) pea tru seoven{s if a>2 then br=1 else ace! Foloind ccustii de fux de date ori si stabilim stares variabilelor agi ba terminates socveate, pornind dela presupunereaoX a este iitialant gt beste neniialiat. fnitib = neinit); KILL = 0,GEN = 0, {o> initsb = neinit) bet initsb = neinit}; KILL = (0 GEN = {8}; {a= ini) = init) ast init;b = nent}: TLD: fa: OUT = (a = init;b = neinit} pe —+| encit Figurad.12: Bouatide fux de date pentru jf a <2 then b= Lelseace endif: OUT =OUT(e=1)UOUT(a {a= init;b = init Vneinit) Se cbsarv’ faptul of in nodule de unifare din graf fuxulul de control ae eplick o unifcare gi asupra mulimilar OUT calelate pe cele oui ramuri, Revolvarea ecuajilor @ evidentiat faptul cB e posbil ex ‘yatlabila bi au posede valoare dup aceastkinstrdctune if, deoarece ‘numai une din ramurl eoatine o atribuire clirevaribilab 120 5. GENERAREA CODULUI INTERMEDIAR 5.1. Cod intermediar ‘Majeritates compilatonre folossetreceri multiple peste programm ur- sisau o reprezentare a In, chiardack din punct de vedere teareticcompi- Iazea poste fi realist printro singurk trecere, Motivul aceatl abordsi ‘te legat de ecient: cod mei bun, care sf ocupe mal putin spaia g al ‘mu imp de executie wf ot mai mie, Program sus este eprenentat Sn intriorul compilstorull, dea o fie Inala folosind un limba) interme cia, numit uneot gl representae intern. Fiecero fez a compiliri plu ‘roatd sceast repreventare extinsind- cu informatitadiionale furnaate de fara respectiv. up cum am mentlonst ta primal cepital, compilatarul ect iaptntit tn dou componente mari: analiza g sinteze (Squra 1.2}. Criterul dup cate o anumiti fect « compilii ene de anal sos de sintexd il consti- tui forma progzamului cu care lureszX faza reopecivé: program sures au program oblect. Codul intarmediar poste & considerat ca o Intrlag& Inte analizi si sintea, trobuind s& Indeplineasek dou cringe #8 relate funetionalitstes programulutsursi sisi posede o form’ adecvatl opti- ‘nisi gl genecivieficionte a codulul obiect. © problem important coduluiintermediar este cea a rutile: proictaren de compiatoare este dificil dact ium In coasidersren mul fudines de limba, sisteme de operare st platorme. Ar fi roll mai pro- ftabil st proiectim un limbs) Intermedia e&t mei general pentraintreega familie do compilatore. Astil, problema construiri a mn compilatonre (pentru m limbaje sure in platforme reaultst) poste f redust la ant liza m lisbaje sue, 2 const o representa iniarnX comunl ga genera, cod pantru n platforme rezutat (m+n), faptilstrat gt de gure 5.1. ‘Acai ideo a fot implementats in diverse compilatoare (WAM[AIt91), p-ood[MPL84), ALPHA [DQRSS), dar a primit o nou dimensiune o deli cu aparifia idei de compilare dinamick. Merit menfionate aici urmtoezele limbaje intermediare: Java bytecode (cod de octai -implementeask cea in care un singur Tnboj sure, Java, este compilat pe mai multe masini, Generares, codulul magind este sarcina unel masini virtuele (Java Virtual Mo- rr urbaT Weta wea? Moga ca imeem weahan Figura 5.1; Creeres de compilatoare pentru m limbaje in masa! folesind cod intermediar chine) specific Secinel platforme in parle. Performangele boestai limba) intermediar au avut ea rezutatSmplementarea unor compile. toare pentra alte limbeje care generesal java bytecode. + MSIL (Microsoft Intermediate Language) - permite mai multe. ‘baje suet si mat multe masini rezultst, reprezentind cea mel ge- nerall shordare aceetul concept de limbs} intermediar. Generarea ‘odulul magn se face Ie momentul exeeuie! prin intarmedial ele ‘emul de execute NEP. + coa mal autentic implomentere a idl de limba) intermediar omun (REL (GNU Register Tranter Language), care posto 8 generat din zosi multe imbeje (6, C++, Fortran, Ads) poate folst penta 2 genera cod maging pent frit platforms alti principale pe care trebule te posed un bun ba} ita radi ents or de transis din arborele de stax abstract wor ae trauletat fn cod maint In pracipa,compllatarle aleg ona dn urmitonrele forme de sepreeatare pent lnbeju interned: «arbre atrbutat; + form polonent potas co eu rel adrese Axboritatributaf conse probabil, cea msi fala rpreentare Interait In compllatoare. Flecare construetie din programl sure este roprezentat& printr-un aod in arbor, cu referinje spre toataelemeatele we construe respective. In plus, fetare nod continent ati, informs fi aiioal, ncoare in fsnle de satesk.Avantjul ace metodo Soa in fapul of arborist deja contin fxs de nal tao at structure do arbre poets ft percursk ur gt ene eanajoot co fesevetare por une fae. fn sunt alge ¢rpremtir fn do {poled semaatiel oe euprapune cu cee de generar de cod inarmei. ‘Forma polonesk postixatk. Notja*palonco a fst inrodat de logan pooner Laasewie Pentru o expres de example «+ +e ‘Stl ei pu de nota + infeati:forma unl de sre ca car sun obo In care pertaal ete Scadrt de ol dl oro expen infact those 4 prefix: in care operatorul precede operanal;expresia prfixaé fate: «babe; ‘+ postiixati: in care operanail precel operetoru; expresia postfxaté ‘te: abce + Forme polonest postibatl ett oalterntivi evantajoas ce mba) in- termediar, deoareos se potzivegte modeulu ativel: operant unt introcai In stivi, ir operaile ce efoctueci in viful sive - se scat operanalt dia stivi ge pune reaultatnl, MSIL foloseste aoast model pentru majoritaten peratilor. Tn plus, forma poloneak poetfeatk posedé dask proprieti foarte importante: mu contiae paranteze gi operator apar In ordinea in care oe execut8 (nu e necesard proritaten operator), (rice expresio in form infixath poate fi trecut la fori postinat gi reciproc. Algoritml 5.1 presinti o astfsl de metod cace ne bezeaak pe foloirs uneistive sucire Pentru operatori unari se pot folost operatri bina echvalenst: —b poste fi seri ca 0 ~ b sau se poate introduce a notafie special, pentru a ‘Afeengia operatorul unar de operatorul bins 5.2. Cod cu trei adrese Definitis 5.1. (Ser87) Codul cu trel adrase este 0 secvent de instruc- siuni cu un format simpla, foarte apropiat de codul obec, ou urmtoarea form generals: =< argh >< op >< ary2> unde < rezultat >, < argi >,< org? > reprint variable sau constante din program sau niume temporare create de cmmplator, iar < op > ese un operator biaar. 193 ‘igeritmnal 6:1 Forma poloneak poten INPUT: 3) =n (ores in forma poland Taal, pin, ,nr-operatoil: (prioittile operetarler) GUEPUT pt, itm (eres ees plone poxtuats for i=1,n do ‘if xf operand then, mien ‘ppl=i end if if x} operator then while prior[varf(siva)] >= pref] do poptstivao} ‘end while ppanh(tiva-x); end if if x{="( then pushstiva.x) endif it repeat op(etivao}; ifoc>'(' then end for ‘while not(vida(stive)) do pop(stivao} isi; Denunirea provine de In,faptul ci fiecare instructiune contine trei adres: dou pentru operanal una pentru reautat. In acon prezentaze, ‘or fost numale efectiv al variabilelor sau constanteler, der in imple [peatare 0 flosese pointer spre adresse din tabela de simbolurt pentru ‘oriablelo si constentele din program. Pentes numele temporare noi in- troduse In Scopul de « memora resulate petile ele clculelor ee va crea spo in tabela de simboluri gi pointri vor refer! locale respective Principal avantaj el acsialreprezentix fl conetituie simlitates in- strucfunilor. instructuna In eodul eu tel edrese contine un sing operator, cooa ce va permite generarea codului obiect aproape direc. Co- ‘ul eu Hel adrese constituie 6 epresentarelniarl a arborelui de sinaxk abstract, In eae ordinea de execute instrucfiunilor este mult mal elark fn plus, codul poate & user menipult gi rearanjat in faaa de optimiza, [Bxemplul 5.1. Pentra expresia beb—évase, xboreledesiatax abstract 3 codul cu treiadrese corespunztitor sunt ilistrate tn figura 5.2. /™. x<™ oN t4=t143 AS Gq Figura 52: Arborele de sintaxi abstractl gi edu eu trl adrese pentru bab keave Forma generale instructunilr din codul ou tei adrese mu pare, lo srima vedere, ck ear potrivi peste gablonul constructillorsintectice ale ‘unui program, ‘Totugi, aestea pot fi sduse le nigte forme particulare de Instruciuni. Aceste eazuri speciale pot fi clasifcate ia: 4. Bxpresi care contin operator unar: vor f tratate ca gi cad priaul ‘operand lise: =< op >< arg2> a 2. Instructiunes de atribuire: "?joncl roll atribuiri. Dack vor aves 4 (ipsese operatoul gia doles operand). 3, Salé necondijonat: intructunes va aves form gato B, unde este tichete unelinstrutiunt din codul eu tre adres. 4, Salt conditionat instrucyiunoa va aves forma if e goto L, eu seni. catia: dec cast evaluat la adevirat atunc| se face un salt necondio- nat I instrucfiunea cu etcheta L alifl (Zack c est evaluat la fas) 1 5s exacutd instructiunen imodist urmitoare din codul eu tel adres. 05 secvent do instructiuni= param s param 23 poram iy fall. ou semniicni: oe eee paraoas prin narvefines param, In ordine, gi spoi ee apelessi procedura pcx n perametri. Pusczatva ‘num de paramots este neoesark apelrllor imbricate. 6. Variable indexate: < argh >,< af >,< rezultat > pot & ele mente do tablou, de forma of. Pentra slmpliicre, se permite a singurl dimensiune gi deci tablourile eu mai multe dimnsiuni vor 1, Modul de adesere al uni variable (prin adres cau referin8) poste: {igh eo operatie in codul en trol adres: x, a 5.2.1. Reprezentarea codului cu trei'adrese cvadrupl, triplet g triplet indirecto. Cvadruple CCvadeuplal este o structurk do tnregistrare eu patra eémpuri < arg2 > . 196 }* Bxemplul 5.2. Pentru codul cu trei adrese considerat in exemplul 6.1, ecvnge de cvadruple ester ape ae =p 8 © =a wpe pe Tear Pentru slturile condiionate sou neconditiote, eticheta da salt tren relat ‘Exemplul 6.3. Fie instructiunes if (a < 0) AMD ¢ then a = —1 else bret. Secvente de evadruple corespunaStoare este: a @[<[e peta 2) AND are syp [ee Tr] @>e Pa pets «fn casulstebulr var >= exp, uar ve aplrea cag rezultat, ateibuires 2 i operator, jar presi ca gi argument, ar ool de-al doles argu- sant lipeeste 1 Numtirul de ordine al evadrupluluijoackxal de etichet8. Cind real ‘tatul este un salt, pentru © mu face confusie intre constanta 7 $i eicheta 7, acest din urd apare intre parantze. '@" donot operatoral minus wna + Tnstructinile (2}-(5)represntl ramura else ar cele de Ia (7) Ia (8) corespund pis then. Rolul saltuui nesondisioact din instructions (6) este de a evite executia ramuril then dup ce ramura else 8 {ost executat¥. Saltu) so face la urmétoral evadrupla dupk oele o- 2espunnitoare instruegual if. wa ‘Triplete “Tipetl sunt foarte ssemkattoare evdrupsor, cu exceptareprecen tut replat. fa earl evdrupllor rene ere represatat expt, in la trplete se conser cf nregstrarea care calcleee un anu res tat lyn g memora. Se evitkastfal creates numer taporare i inckrcarea tabeli de simbolui eu aoesten. ‘Ded, tripltul este o structurk de Snvepstrae ca trl efmpurt: Exemplul 5.4. Pentru codul cu trel adrse consderst in examplul 8.1 g seovenga de cvadruple din exemplul 52, seeventa de triplets este Te [op [weet ag? 0) be @reta ts Gee G a Toy ‘Desavantajul principal al acestel reprezenti il constitue faptul & intrcyiunile pot sufi modifics in ane de optiminae gi aceste modificki ‘uebuieefectuste gi asuprarefrirlo la instrucfunile respective. Situaia poate & revolve, prin cresren unl liste suplimentare care s& con{ink sumisul de ordine al trpletelor in ordinea in care acetea ve executl. ‘Aceastsrepezantare poartd numele de triplete indivecte. Compararea reprezentiilor ‘Alegerae uneia su altein dintre representtl trebuie 6 tink cont de svaatajele,respeciv desvantajle feckeie, care se pot sintelize i tabeal vrmitor 138 ‘Cvadruple Triplets ‘vaaiaje | ~eferce expla a eras | -diansiane mal med Slaccwate media in TS | (8 eSipart, foe de 4) “atgoritn’ mai simpli fa | = ovith upranctrare TS _| optimises eodulut ezovataje | inersune al mate “Te Sp SEAT mits intl Ipc odors ‘eval aoe -srtiucuptietarin 1S |“iegeumare decd | coecmnrtsceares | {utter tpt | entra a ia. de foes tempore ative 5.2.2. ‘Drecerea la cod cu trei adrese a arborelui sintac- tie Constructia codulu cu tei adrere se poate face prnts-o traversareaai- boreal strbutat. Acoasté opertie se mai numejte 9 traduoere orienta e sntsxd 5 so bazeank pe aplicarea wnor procadurl in functie de nodl cureat In arbore, de fapt, de productia care st la baza constructelsubar- bore nodul repecti. Vom presenta doar citeva astiel de procedurt, callalte bazindu-se pe acozss dee. ‘Pornind dele regula de productie apical, vom acocia anusnite aciuni semantic, st anume: «© sotiune de calcul al atrbutelor, care sunt feloitan gonerarencodulul pentru tot suberborel; © parve de generare de instrucfunt tn cod cu trel adress, Consider gramatice conespuntitoare une lnstructiuni de strbuire, in care expres din parte dreapt8 poate confine operator aritmetil, iar operanai sunt identiicator sau constente. 6 = USED Eh (omtinm( hitheoat} 8), 68 weitowel po. soa B+ B+ BIB+ E|~ B\(B)lidleonst Generares codului cu tei adrese,(aumitX gen), slack nume tempo- ‘sve pentru calculle Intermediae prin apelul funcjel nou.terp, care ve return de ficare datfun nume nou. Attibutele de care aver nevole sunt 129 +» E.loc-- locatia unde se afl valoare lui 2; + Blond - secvenga de instruction cu tral adres care evalueass B, pentru atsbuite. ‘Productie | Regul samansice Sa ides E | Sod = Sod ferniTloe B+ By +B; | Bloc = now tmp Bead = B,.codi[B.colyen{ Bloc "=" By.loc + Bsns) Ely B+ BoB, | Bloc = nou.temp Bead = By.cod |[B.codl gn(Bloe "=" Bloc ™* ByJoc) BB | Blvo = nouseme Bod = cod [| gn(Bloc =" ° Boe) ESE) | Bes Bre Besd = By cod Bid | Bloc = idee Beod =? Bseonst | Ble = constoe Bend =?" ‘ Bxemplul 5.5. Considering instructiunea {= a +6 x e,aplieaes pas cu pas 8 productilor gl regulilor tementice candice Is urmitorul cod co ‘uel adrese. ‘Tabelul prezint productia epllost& codul generat po tn cel moment st accessree locafilor. Pentru simplifieze, am considerst cb Producti [Toca rea ESRTE | Bet Bod | Biles iie Bo Eavis | Ble a alee mae ‘Dack drm sk generim cod cu tel dese pentru o instructiune condi fionalf, vom evea nevoie de o functie now.sticheta, care ve ganera 0 ttichett nouk. Seoventa de instruction cu tre adreo trebuie eX cuprind& lnstructunile pentru evaluares expresel din condigie (H-2od) care ve ge- ‘era un salt la remua then seu else, apo sooven{a corespunaltoare r8- ‘muri else (5.cod) car ve inchele cu vn salt aeconditionat la instructianea, urmtoare de program sin final soevenfa corespunsBtoare ramurl then (Sucod). Atsbutele true false asociate expresel E cunt necsere pentru. calcul oichetl de sat i funeie de valoarea de adevir a expresil Produaiia aqull somantioe SHA Bthen S; aoe, ] Blase = nowticheta Bre = nowtichets Siurm = Sum ‘Shurm = Sum Sicod = Bad llpen( fate )\.04 ‘peng! Srl penBitru' 8.004 locetia unui identifcatar este dat de mumele Iu 130 ist Exemplul 5-6. Si consideriim urmiltoarea instructiune conditionala: ijla tort construcilor satsctee spetice (while, repeat, fr) gi mi dil Sn limbajele de nivel js, necesitind analiza graflui de fx. Optimizarea ccfurior este considerat important datorti une cunos- cute remarci de programare, nuit "reguls 90-10": 90% din timpul to- tal de executieal uno program are loc fn 10% din eodul sure. Explicatia ‘const in exstenaciclurllor. Acjunlle principale deoptimizare a cilurilor sunt: ° factoriaareainvariantilor de cilur gi + seduceres puteril opera. Factorizarea invarianilor de éieluri Definitia 6.1. O instructiune sau o expresi este un invariant de cicla acd acare operand este: © constant sau 139) (© ere toate definirile ia afsra ciclului sau 1 are exact 0 definie si aceon este un invariant de eeu [Existonta unt sstfel de invariant in Intriral cielulu impli efacta. rea instructiunil respective de cite ori se exeeutl ciel. Optimisares const Tn a stoate aceasth instruciune inaatea clu, ea exeeutSadu-se stl o singurd dats, ‘Bxemplul 6.3. 0 secvenfS de program ce confine un inversnt de cick, Insate 9 dup optiminare for(int, icoyit-4) soyts Umi Tor(ind, omns+4) aia) Caller Reduesrea puteril operatislor Acesst optimiare are co scopinlocuirea opeatilareostisitoae (ca de ‘ecemphu inmulfies) cu operatii mal iftine (sdunares) in defnies vase abilolr de ciclre gt altor variable aleulaa inclu, Reduceres putes operator pentru Yarabilele do ciclre se refer Ia cazul in care ele sunt Jndexate gi transformarea se refer Ia csloulaea zlativs aelementall in ir, dup modelul descrs fn paregraful precedent ‘Pentru colellte ealele, reducsres poterl operator se bazassk pe fap tl eX, de multe oi, caleuiele din intrioral unui ciel reprezinté itera, astlel i valoazea calculeté In itragia i se poate exprima in functie de valoare calculatK la iteratia#~ 1 [Exermplul 6.4. Considerdnd cilul urmtor, In ear v eaten invariant Ge cle, ol poste & opteneat stil iceni++) ak, "5 for(imk, ic=nie+) (itt; wo 7. GENERAREA CODULUI OBIECT Generarescodutul object const, dup cum se obeervigi tn figure 1.3, ta ‘ranslatares instructiunilorcodulalIntermediar in inetruciuni ale codulu, obit. in timp ce codul intermedia se caracteraesck prin: variable (dln rogram si temporere), un set de instruofiunl sbstracte i de faptal e& mu ‘exist o stv de exzcutio, earsctritclecodulul masiné sunt: © nomi fit de regis «© vatlablele sunt stocate fn memorie; = ae folossteo stv de executing un set de intructiuni de accesare 1 stivei «+ sotul de intructluntcorespunde limbajui obec, ‘De aceea, generarea de cod obiest din end intermediortrebuie cont do dout aspecte importante: sink 1. alocarearepptrilor~ care se ocupt de modul in care sunt stocate gi manipulate variabiel, 2, seloctarea instructinilor ~ modul st ordinea in care ae mapesai {ustruciunile codulu intermedior fn instruciuni maging, ‘Gonerarea coduluiobiect depinde tn mod axental de tpul calculatoru- Jui al sistemului de operare existent. Exist mai multe teinici de struc turare & codului executabil care jin cont de acest considerente tehnice, e lng cele legate de corecttudine gi vite. Tehncile de generarea a ‘odulul obict se pot class in funelie de tipulealeulatoralu in * calculator cu ua acumulator * ealoulator cu rogigtl general, rat 7.1, Generare codului pentru calculatoare cu acumulator Genecorea se bazeosk pe modelul masini de sivk, care represint un ‘model simp de evaluae,folosind o sti de valori pentru rezltae inter. mediare © magin’ de stiva [@BLO2|constk dits-ostivk pent’ stoearen ‘manipalarea valorilor gi dou tiputl de istrucfuni ‘ Instructuni pentru muterea sau copierea velarlor fa gl dia capul ‘tive in memoria; instrucunl pentru operali asupra clementlor din eapulu ative, care functioneazd asta: operanal se scot din stv, se extents opere. fia reapectivl gi se depune in stivl reultatul. Acumulatorul va folasit pentru a efoctus operat, stiva find dedicats stociri subexpreslr gi reeltatuls Exemplul 7.1, Pentru expresia de(3+1) codulntermediar, acumulatorul {i stiva ara cain tabelul urmitor. wad ase | ace nt tps Dush ace 4 |ea> aed 3 | Dus ace 3 caer ace a fess sce ace teap | 4 | op 4 | doce ace*eap | 16 | <4> op is | > © alti caracterstct importants mgini de ativl ote nu floss segisri Stiva esto manipulaté prin douk referings, una spre capul ei gt alta care refer8Inceputul zone aloote stive. Avantajele folsiii masini de stivls pot A sintotizate im: locata operanalor gia renultatulul este Implict& (copul stivl) si format simpla al instructiualor (operansii mu ‘trebuie specificat). Datoritt simplitig sale, modslul e fet fleet cx succes pe ealelatoare eu acumulator, 8 VAX gi DEC PDP-LI gi este Jmplementat in Java bytecode. Arhitectura caleulatoerelor modificando-e in limp, majortatea ealeulatoarelor de ei folosese alt model mal efcent, 14a anume lace l masini de egigts, cu except celorbasate pe aritectur RISC. 7.2. Generare codului pentru calculatoare cu registri Modelul pe care se bazexi. generarea de cod In sceastl cltuatie 9¢ ‘numeste magina de regigéri [CBILO2] s! cone fntr-o memorie pentra stocatesvariabilelor, un set de regstri pentru executia operafilor $i dous ‘Spurl de instructuni: penta inerearos 9 salvares valorlor itze memorie slreggtri gi pentru efectuares operator din codulintermedier. Formatul Instrucfiunilor este mel complex decdt in cazul masini de stivi, deoarece trebule specticate locatia operanaior, resulta rgietrul in care 9 incarel 0 anumitS valoare. Pentru inlearea valorii vin registra 2, instrucjiunes are formatul LOAD JR, jae pentru salvarea in memorie 1 volori v din regstrul @ instruciunos este STORE Rv. Peniraefec- tuarea operatilor unul din regigtri care contine un operand este folosit ‘pentr roti gl ezultetul: ADD RA,R2 are semnifieyiavaloarea din ‘Rl este valoarea intial din RX edunatt cu valoazea din registrul R2 ‘Bxemplul 7.2. Pentru instructiunes¢:= a-+brd magina de stivl neces sumtoarea sacvenfX de instruciunis Load BRD Load 5, R2 ‘Mil RIB Toad a ‘Ada R,R2 Store Ri,e ‘olosiresacestui mode! pentru caleulatoarle eu reir general nece- sith stocarea enumitor informafit legate de segigtri gt variable ‘+ Un registra poate i dlsponibil (6 contin o valoare nesemnifcaiv8) sau ocupet, dack confine valoarea unela gex mai mult variable ‘Pentru aoeasta, vom defini 0 mulkine VAR(R) aoociaté ecru re- astra, care reprezintS rmultimea variablelor a elcorvaloaze 2 afl Invegitral R. © Este necesar si se precizeza pentru feeare varibill locul (registry, stivi sou memorie) in care so afi valoares curentk a variable, ‘Vom defi mulsimes MEM (2) pentra Secare veriabiléeprezenttad 143 ‘mulfimea locatiilor in care se afl la un moment dat valoarea vari- abil 2. MEM va fi un cimp in tabela de simboluri Bxemplul 7.3. Pentru lnstructlunea F o= As B- (C+ 8) + (A+B) codul intermediar gi oblectcorespuntiter, impreunk cu stares maultimilor VARsi MBM ssociate sunt: "B 2. T4028 LT Cala EC OER] TOAD K, RO MEST = TROT MUL B, RO WIESOFE— | LOAD G, RT EMT TRIT ADD BRE CTESTPT | MUL BO TET MeM(13}={Ra) ESTETS | SUB RG RO] VARIROD=(PY | MEM(Ta}=< STORE RGF | vaRcu=() | MEM(F)=(RO) fnsintes tocerilacestul kagment de cod intermediar la cod oblect se ste cll exist doi rgigtr isponibli, RD si. Pentru prima instructiune neared valoares lu Ain rgistrul 20 i valoacea din sepstra se tnmultete cu B, objinéadu-so valoarea TI. So actualized multimea VAR(RO) fu numele TI 9 multimes MEM(T'1) cu vegistral RO. Codul obioct corespunaitorinstrucinni (3) confine © optimizare, pe baza observaie, cf rezultatul instruciiunl anterioare aate fn registra devine operand tn sceasth instruciune g astfl nu mai e nevoie de incfrcareavaloit. Dupl. ‘deeciroaren restr ia memocie, muljimea MEM trebuieactualzatS st registrul respectiv poate deveni disponibi 7.3. Alocarea registrilor ‘Alocaresregigrilor are a sop slectaea variabilelo ere trebuieinek- cate in cegigtn. In timp ce mumicul veiebilelor dint-un program eto ua ‘ slatty mere, numicul egigtrlordisponibilintr-un calculator este limitat. ‘Do aceea un regstru va fl obligat sl stochese mal multe valor! pe poreuroul ‘exocufii in fanie de anumite condi. © abordere optimalia gustan, variabielor in regs ia fm ealeulapariile vatiabilelor respective in pro- rom. Dact o variabill nu este foloité Ia un moment dat ofune! ocuperce ‘nol registru de cite valoarea i au se Justified. Aloeatea gi gestionares regstllor se bazeazk pe variabiee foloite Ia un moment det. © varisbilt ste activi dacl este posiil ea veloates ei si fe neceeari in vitor Definitia 7.1. (M81) O varlebiltv este activi Sat-un punct de program p dact: 1 ¥ 8 fost defini intno intruotiune antrioar lui p pe orice deus; © ¥ poate oli do o instruefiunes gi exist un drum de la pla; © v nue distaste p sis © variabilé v este activi fotre punctul p; Imediat urmtor definirlt sale si punetul pj imediat dup ultime el folosie. Interval [px,p] este intervatul actie al variable v ‘Exemplul 7.4. Si considerim urmtosren soeventi de cod intertedios: ) Tl =244 @ mare @) Ts =n1-y @ Ta =r16r2 (©) TS = 72-73 () 16 =T4475 Intervelul activ pentru 71 este [1,4], pentru 72 este (2,5), iar pentru 4 este [4,5 Determinarea nuirulot minim de reistsi necesarl acestuibloe de ba- va eficiontisa slocarea,astfel Inet se evite descdscareavalorlor in ‘momorie, urmati de fncreares lot. Pentru aceasta se determin’ inter ‘alle active ale tuturorvatibilelor gl se gfeagt instructiunee cea mal “inedreat& (care apace fa cole mal multe intervale active). Pentex omplul considerat, dup cum se observ in figure 7.1, objinem: pen. tru instructiunes (4) avem patry vasiabile sctive, 11,72, 73,4, la fel m= ‘ca pentru instructiunes (5) - T2,73,74,75. Deci ve fi nevoie deipatra rogigti pentru sacvenfe de cod intermediar considersth. Pentru executla, Instrucfiunit (4) se vor aloca patra regigti. Dupéterminarea a, ropetrl care confine varibils T1 va A descdret, devenind dgpon'bil i putind & ‘olositpentra inckroarea valor TS din instructiunes (8) wae Figura 7.1: Intervalole active ale varabielor Algortmti de alocare plomentares compllatoerelor colorare a grafurlr. regigtilor col mai performangifolosit tn im ‘Dezesal pe versivnt ale slgortmulut de 7.8.1. Alocarea regigtrilor bazati pe colorarea grafi- rilor Algortzaul pornogte de la graful de interforengt al regigullor, care ‘confine informati relative la veriabilele active dintr-un program, Definitia 7.2. [Cha83] Un graf de interforent al regigtrilor ste wn graf necrentat in care: « nodurilerpresintdvarabil (idntieatori seu nome temporaré) care ‘neces alocate; © snuchilerepresnt#interferenele: exist o muchie intro vy sivg dack ‘exist o Hnstrucfiome i program In care vaiabilele vy si v6 fe ‘active simultan. In acest eas spunem ed variable a si vy itere- reeak. aus Figura 7.2: Graful de inorferentK asociat variabillor active Graful de intereren coreepunaBtor codulu intermediar considerat in complol 7.4 ete prezantat in figura 7.2 Definiia 7. [Tomi] Un graf eete K-colorabil dact Secu nod dia ‘gal se poste asocin una din ele clr! ested orice pereche de ‘oducladacente egotepent-o much) ae cul ditnct Problima I-coloritl grafulul de biteferengé poate f trenspus direct fm slocaresrepstrilor, mspind fecareculoare ls cite un registra. Propri- tatea de colorare asiguré ef nu existe dovl vaiabile cae sk interferers Intre ele cae sf fle alocate nui aoaluagi registra. Din plcate, problems determing colori unui graf neorientat este [NP-completi pentru k > § [Toml], Un elgoritm eurstic reapeste 3 reeolve problema colori int-un timp aproape lini, poraind dela urmi- toores propristate: ‘Teorema 7.1. {CLROO] Dack G esto un graf neoriontat gi x un nod in graf cu gradfs) <'k atuiel G este I-colorabil dack G’ exte k-olorabil, unde G’ este grafal obtinut din graful G tn eare seeming nodul x gi tate suchileasoeate Jul x Se obtine astel un graf mal mic, cre fle eee Keclorebil, Se poate § din now transformat pe bate proprett da mai ous ‘Algortmul 7.1, dup Chatin (Cha82,feloagta 0 stv (notatt 8) pen- ‘mu a memora mchile din graf impreuni cu o eichetS et stil deck nodul mu produce un impes fn colorare (gradul nodului < Teal abl de auc cre tee rin x adr dock munirul de culori este insuficient pentru colorarea nodulul gi avecinlo si. ‘Vom nota prin vecini(e) multimea vecnilor nodulti v, adick cele nodisl ex care este unit printi-o much, inl (3-18) ale algoritmulul proceeassk nodurila din graf, depundnd tm stiv8 muchile Jui v impreunt cu eticheta lor. Urm&toaree lini (14 27 realised processrea nodule: dock nod are mei putin de e vec tune! ofri(R,o) atribuic un registru R luv oa condita ee Rai nu fe ssignat nie unui vecin alll v, apo se inceresod nodal fm graf tmprount cu toate muchil sao (insert(G,)). Dack nedul are ket mei mull ect stune! ar trebui executatho transormare a grafulu, conform toremel 71, Linille [20-22] propun o aptimizare, verified in primal rind dack exist ‘registrdisponiilgabie fn cxz contrar marchesal nodul pentra af soe din graf, Procedura alege(v,G) solecteeat un nod din cele rims intr © anumité ordine, in funetio de anumifi paramsetriettimativi. Marearea nodurlor are scopul de a decide care variabil fe dasctzeate din est CCuiteriul propus de Chaitin [Chaf2 recomend slegeres nodulul cu el mal ‘mis raport costal deckrcici/ere. PPrincipaleleavantae ale acest algoritm sunt: vitese. de exocuti (Liap linia relat Is dimensiunea graflu) —)faptl c& ofa o eolufe pentra ‘azul in care graful nu este colrabil. Datorih faptulul eX se bazeae’ peo abordare euristic, algoritmul au gavanteask o colorare minimal&. Modul de implementare a euritici pentru probleme k-colorSeish pentru a decide desrcarea (cae rogistra gi cd) au dus la imbue ale algortmulut Iniil al Iai Chaitise © tmbunttitire a algoritmuli lui Chaitin beset pe observatieck lgo- ‘imul executé dascSrcri in unele cazurl In care mal exist regigsh Aisponibil. Lmbuntttyjea consti in lusree decsiel de deseticare doar atunci cind ca spare (nu mal exist regits disponibil) sia Ja construirea tive [BCKTS9]; * colorare bazatt pe priortiti [CHB4}: se seociaek prortlti in col treree nodurilor, a funeie de une ext: eoupre oct eati- tative a repgtllor. Procesul de colorare devine linia, fafa de earl algoritmului general de colorare care era exponential; © colorare lerarhick a grafulu, in care lrerhi este dat de pricritaten registrilor [CI] ue aro rafal deterrent i INPUT: G- graful de intererent; k= ar. segigtn 2 OUTPUT: alocare registra saa maveare odin grof 5 repeat & while 3u: grad)

S-ar putea să vă placă și