Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
12Activity
0 of .
Results for:
No results containing your search query
P. 1
Limbaje Formale Si Are

Limbaje Formale Si Are

Ratings: (0)|Views: 221 |Likes:
Published by baciu ion

More info:

Published by: baciu ion on Mar 13, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

05/09/2013

pdf

text

original

 
1. IntroducereCurs1 LFT
Limbajele de nivel înalt au o serie de avantaje în raport cu limbajele de asamblare.Pentru a putea însă folosi limbaje de nivel înalt, trebuie să existe posibilitatea de a convertiprogramele scrise în aceste limbaje într-o formă binară. Această necesitate a dus la dezvoltareatranslatoarelor sau compilatoarelor – programe care acceptă o reprezentare textuală a unuialgoritm exprimat printr-un program sursă şi care produc o reprezentare a aceluiaşi algoritmexprimat într-un alt limbaj, limbajul obiect sau un limbaj echivalent.Translatorul este deci un program care traduce programele scrise de utilizator (într-unlimbaj) în programe echivalente (într-un alt limbaj). Dacă acestea din urmă sunt programe în codmaşină sau un limbaj apropiat de limbajul calculatorului, translatorul se numeşte
compilator.
 Programul utilizatorului se numeşte
program sursă
, iar programul în cod maşină obţinut senumeşte
program obiect
. Între cele două programe trebuie să existe o relaţie de echivalenţă înceea ce priveşte efectul lor asupra calculatorului.Execuţia unui program în limbaj simbolic are loc în două faze:Faza 1. Compilarea: Program sursă
Compilator 
Program obiectFaza 2. Execuţia propriu-zisă: Date iniţiale ale programului
Program obiect
Rezultate În faza de translatare, calculatorul execută programul compilator, iar în faza de execuţiepropriu-zisă, calculatorul execută programul obiect, adică citirea datelor iniţiale, prelucrarea lor şimemorarea sau tipărirea rezultatelor.Pentru scrierea unui compilator, trebuiesc foarte bine definite atât limbajul sursă, cât şilimbajul ţintă. Aceasta înseamnă că ambele limbaje trebuie să fie
formale.
Un limbaj are două aspecte: sintaxă şi semantică. Sintaxa stabileşte care text este corectdin punct de vedere gramatical, iar semantica stabileşte modul în care se derivă semnificaţia unuitext corect din punct de vedere gramatical.Există numeroase formalisme şi instrumente software pentru descrierea sintaxei unuilimbaj formal. Pentru descrierea semanticii însă, formalismele şi instrumentele existente nu suntatât de simple şi uşor de utilizat ca şi specificaţiile de sintaxă.
2. Clasificarea şi structura translatoarelor 
Un translator poate fi definit formal ca o funcţie având domeniul de definiţie limbajul sursăşi mulţimea valorilor funcţiei limbajul obiect sau un limbaj echivalent (destinaţie).
Translator Instrucţiunilelimbajului sursăInstrucţiunilelimbajuluidestinaţie
 În dezvoltarea translatoarelor, sunt implicate cel puţin trei limbaje: limbajul sursă detranslatat, limbajul obiect sau destinaţie şi limbajul gazdă folosit la implementarea translatorului.Dacă translatarea are loc în mai multe etape, pot exista şi alte limbaje intermediare. Desigur,limbajul gazdă şi limbajul obiect nu sunt cunoscute de utilizatorul limbajului sursă.
2.1. Diagrame T
Pentru descrierea programelor şi în particular a compilatoarelor, există o reprezentareschematică consacrată, numită diagramă T, introdusă de Bratman în 1961.O diagramă T pentru un program general este de forma:
 Numele programuluiLimbajul deimplementareDate de intrare Date de ieşire
1
 
O diagramă T pentru un translator general este de forma:
 Numele translatoruluiLimbajul gazdă deimplementare atranslatoruluiLimbaj sursăLimbaj destinaţie
2.2. Clasificarea translatoarelor.
-
Asamblorul.
Termenul de asamblor este asociat cu translatoarele care transforinstrucţiuni scrise în limbaj de nivel coborât în cod maşină, care poate fi executat direct. Deobicei liniile individuale ale programului sursă corespund cu o instrucţiune la nivel maşină.Rolul asamblorului este deci să convertească reprezentările simbolice ale instrucţiunilor înconfiguraţii de biţi, reprezentând echivalentele în cod-maşină ale instrucţiunilor.
-
Macroasamblorul
este un asamblor care permite utilizarea macrodefiniţiilor. El utilizează oprimă trecere şi pentru colectarea macrodefiniţiilor.Rezultatul asamblării este un text în formă binară în care doar referinţele externe suntpăstrate în formă simbolică în tabele asociate secţiunilor. Codul binar al secţiunilor este însoţit deinformaţii ce indică locul referinţelor relocabile pentru ca, în momentul încărcării, valorile acestorasă se poată transforma în referinţe absolute.Combinarea acestor secţiuni într-un program executabil se face prin rezolvarea referinţelor externe (înlocuirea numelor simbolice cu adrese de memorie) şi adăugarea eventual a rutinelor din bibliotecile standard, şi ele păstrate sub formă relocabilă. Aceste operaţii sunt deobicei făcutede un editor de legături ( linkage editor). Programul furnizat de acesta este adus în memorie de încărcător (loader).
-
Compilatorul
este de obicei un translator care traduce instrucţiuni de nivel înalt în codmaşină, care poate fi executat direct. Liniile individuale din programul sursă corespund deobicei cu mai multe instrucţiuni la nivel maşină.
-
Preprocesorul
este un translator care traduce dintr-un superset al unui limbaj de nivel înalt în limbajul de nivel înalt original, sau care face simple substituiri de text înainea procesuluide translatare propriu-zis. De exemplu, există numeroase preprocesoare de FORTRANstructurat care traduc din versiuni structurate ale FORTRAN-ului în FORTRAN obişnuit.
-
Translatorul de nivel înalt
este un translator care traduce un limbaj de nivel înalt într-un altlimbaj de nivel înalt, pentru care există deja compilatoare sofisticate pentru un număr marede maşini.
-
Interpretorul
este un program care, primind un program sursă, îl prelucrează în prealabilpentru a-l aduce într-o formă mai simplă, după care îl execută simulând execuţia în limbajsursă. Forma intermediară executată de de interpretor este de fapt un alt limbaj mai simplu,mai apropiat de limbajele de asamblare. Principalul avantaj al folosirii unui interpretor esteportabilitatea foarte simplă a unui limbaj, prin implementarea maşinii virtuale pe un nouhardware. În plus, deoarece instrucţiunile sunt interpretate şi executate în timpul rulării, pot fiimplementate limbaje foarte flexibile.
-
Compilatoarele incrementale
îmbină calităţile compilatoarelor cu cele ale interpretoarelor.Programul sursă este divizat de compilator în mici porţiuni numite incremente. Acesteaprezino oarecare independenţă sintactică şi semantică faţă de restul programului.Incrementele sunt traduse de compilator. Execuţia are loc interpretativ, permiţându-seintervenţia utilizatorului atât în timpul compilării cât şi în timpul execuţiei.
-
Decompilatorul sau dezasamblorul
sunt tremeni care se referă la translatoare care au caintrare un cod obiect şi regenerează codul sursă într-un limbaj de nivel mai înalt. În timp ceacest lucru se poate realiza destul de bine pentru limbaje de asamblare, este mult mai dificilde implementat pentru limbaje de nivel înalt cum ar fi C, Pascal.Cele mai multe compilatoare nu produc cod maşină cu adrese fixe, ci o formă cunoscutăsub numele de "semicompilat", "simbolic binar" sau formă relocatabilă. Rutinele astfel
2
 
compilate sunt legate cu ajutorul unor programe numite editoare de legături, linker, care potfi privite ca ultima etaîn procesul de translatare. Limbajele care permit compilareaseparată a părţilor unui program depind esenţial de existenţa acestor editoare de legături.Diagramele T pot fi combinate pentru a arăta interdependenţa translatoarelor, editoarelor de legături etc.
COMPILATOR.EXLimbajul gazdă deimplementare acompilatoruluiProgram înlimbaj sursă L1Program în codrelocabil L2LINK.EXELimbajul gazdă deimplementare aeditorului de legăturiCod relocabil LPROG.EXEBibliotecă de programe
Observaţie. Un compilator nu necesită un limbaj ţintă (de asamblare sau limbaj maşină)real. De exemplu, compilatoarele Java generează cod pentru o maşină virtuală numită "JavaVirtual Machine" (JVM). Interpretorul JVM interpretează apoi instrucţiunile JVM fără nici otranslatare ulterioară.
2.3. Fazele translaţiei.
Translatoarele sunt programe complexe, care necesită o abordare sistematică. Imagineaunui translator este cea a unui şir de transformări în cascadă a programului sursă în reprezentări dince în ce mai apropiate de limbajul destinaţie.Procesul de translaţie se divide într-o serie de faze.
O faz
ă
este o opera
ţ
ie unitar 
ă
detransformare a programului surs
ă
dintr-o reprezentare în alta.Cea mai simplă descriere împarte procesul de translatare într-o fază analitică urmată de ofază sintetică.
-
 În faza analitică
se analizează programul surpentru a determina dacă elcorespunde cu restricţiile sintactice şi static semantice impuse de limbajul sursă.
-
 În faza sintetică
se generează efectiv codul obiect în limbajul destinaţie.Componentele translatorului care îndeplinesc aceste faze majore se mai numesc "front end" şi "backend". Prima este total independentă de maşină, în timp ce a doua depinde puternic de maşinadestinaţie. În cadrul acestei structuri există componente mai mici sau faze, aşa cum se prezintă înfigura următoare:
-
Secţiunea de
gestionare caractere
este cea care comunică cu lumea exterioară, prin sistemulde operare, pentru citirea caracterelor care formează textul sursă. Cum setul de caractere şigestiunea fişierelor variază de la sistem la sistem, această fază este de obicei dependentă demaşină sau de sistem de operare.
-
Analizorul lexical (Scanner)
preia textul surs
ă
sub forma unei secven
ţ
e de caractere şi legrupează în entit
ăţ
i numite
atomi (tokens).
Aceştia sunt simboluri ca identificatori, şiruri,constante numerice, cuvinte cheie cum ar fi
while
şi
if
, operatori ca
<=
etc. Atomilor li seatribuie
coduri lexicale
, astfel c
ă
, la ie
ş
irea acestei faze, programul surs
ă
apare ca o secven
ţă
de asemenea coduri.
3

Activity (12)

You've already reviewed this. Edit your review.
1 hundred reads
ovidiu1980 liked this
Dan liked this
valentino1985 liked this
oggyksan liked this
ancussik liked this
ancussik liked this
blackmaiden31 liked this
florinsp liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->