Duinea Radu Andrei Lfa [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Proiect LFA

Student : Duinea Radu Andrei Specializarea : Calculatoare Grupa : 311 An universitar : 2021-2022

Cerinta: Sa se implementeze in limbajul (C++) un program care sa realizeze operatia (INTERPRETARE) pentru un limbaj de programare minimalist ce poate contine urmatoarele elemente: 0 – Comentarii: # Acesta e un comentariu (mono-linie). Tot ce e # de la simbolul '#' pana la finalul liniei e ignorat. 1 – Definire de variabila: var nume_variabila 2 – Definire de vector: var nume_vector[numar_elemente] 3 – Atribuire: Variabila = Expresie , unde: Variabila poate fi nume_variabila sau nume_vector[index_element] iar Expresie e orice expresie aritmetica valida ce poate contine operatorii aritmetici (+,-,(,)) si drept operanzi poate contine variabile (nume_variabila sau nume_vector[index_element]) sau valori numerice (reprezentand numere intregi pozitive scrise in baza 10). 4 – Decizie:

, unde:

if Conditie Instructiuni else Instructiuni end

Conditie este o expresie ce poate sa contina variabile sau valori numerice si operatorii relationali (> v[i+1] var x x = v[i] # Da, pot sa scriu mai multe instructiuni pe linie. v[i] = v[i+1] v[i+1] = x # Ca si aici – doua instructiuni pe linie. gata = 0 - 1 end

end

end

i = i+1

# Afisare vector sortat: print ”v sortat:\n” i=0 while i < 9 print v[i] print ”, ” i = i+1 end # Un while intr-o singura linie. print v[9] print ”.”

1.Descrierea generala a programului Blocurile principale ale programului sunt reprezentate de către analiza lexicala și analiza sintactica. Analiza lexicala face referire la următorul aspect: textul de baza este preluat sub forma unei insiruiri de caractere grupate în entitati numite atomi.Fiecarui atom i se atribuie câte un cod lexical astfel, programul sursa va fi reprezentat ca o secvența de coduri. Exemple de atomi lexicali: -cuvinte cheie -identificatori -semne de punctuatie -operanzi Analizorul lexical considera textul primit la intrare ca fiind format din unitati lexicale(simboluri de baza) pe care le recunoaste producand atomi lexicali (tokenuri). Un atom lexical poate sa fie de exemplu, un cuvant cheie al limbajului (for, while, etc) dar si un numar sau un nume. Un atom lexical, token, este reprezentat printr-un cod numeric care specifica clasa din care acesta face parte cât și alte caracteristici specifice fiecarei clase.Astfel, poate sa existe clasa operatorilor relationali pentru care un atribut trebuie sa se specifice tipul concret al operatorului. Tipul atomului lexical este necesar pentru analiza sintactica in timp ce valoarea atributului este semnificativa pentru analiza

semantica si generarea de cod. Pentru un atom lexical de tip numar atributele vor descrie tipul numarului si valoarea acestuia. Prin analiza sintactica înțelegem gruparea atomilor rezultati in urma analizei lexicale in structuri sintactice. Exemple de structuri sintactice: expresii, instructiuni, declaratii etc. Rolul analizei sintactice(parsarea) este acela de a transforma un sir de atomi lexicali într-o descriere structurala a acestora, verificand dacă sirul este sau nu corect. Expresii regulate corespunzatoare atomilor lexicali enumerati: #-# var – var nume_variabila – [a-z]+ nume_vector – [a-z]+ [-[ ]-] numar_elemente – [0-9]+ = - = +-+ - - -IMP *-* /-/ if – if >-> , ='a' && s='A' && s='a' && s='A' && s='0' && s='a') && (s ='A') && (s ='0') && (s