Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so-etti:teme:tema_restanta [2014/07/16 09:39]
alexandru.radovici
so-etti:teme:tema_restanta [2014/07/16 10:06] (current)
alexandru.radovici
Line 15: Line 15:
 </​code>​ </​code>​
  
-== Cerinta == +===== Limbajul ATM ===== 
-Scrieti un parser si afisati AST-ul. Forma AST-ului este decizia voastra, insa va trebui sa ii descrieti fiecare nod in fisierul README.txt. +==== Variabile ==== 
-Executati limbajul+<​code>​ 
 +type nume 
 + 
 +type poate fi integer, string sau float 
 +</​code>​ 
 + 
 +==== Siruri (bonus 5p) ==== 
 +<​code>​ 
 +type nume(lungime) 
 + 
 +type poate fi integer, string sau float 
 +lungimea este o constanta 
 +</​code>​ 
 + 
 +==== Atribuire ===== 
 +<​code>​ 
 +write expresie in variabila 
 +</​code>​ 
 + 
 +==== Declararea functiilor ===== 
 +<​code>​ 
 +function nume_functie parametru1@tip continuare_nume_functie parametru2@tip conitnuare_nume_functie parametru3@tip ... returns tip 
 +start 
 +... 
 +... 
 +... 
 +return (daca e cazul) 
 +stop 
 +</​code>​ 
 + 
 +Tipurile de intoarcere sunt oricare din cele trei tipuri de variabile sau nothing daca nu intoarce nimic. 
 + 
 +La return, functia se opreste imediat 
 + 
 +Exemple: 
 + 
 +<​code>​ 
 +function gotox x@integer andy y@integer andWrite text@string andNewFile nl@integer returns nothing 
 +start 
 +  print text 
 +  if nl = 0 start 
 +    print '​\n'​ 
 +  stop 
 +end 
 +</​code>​ 
 +==== Afisarea pe ecran ===== 
 +<​code>​ 
 +print expresie 
 +</​code>​ 
 + 
 +==== Apelarea functiilor ==== 
 +Aplelarea unei functii se face cu run 
 +<​code>​ 
 +run nume_functie parametru1 continuare_nume_functie parametru2 ... 
 +</​code>​ 
 +Daca apare intr-o expresie o functie (poate fi doar o functie care intoarce ceva, ea apare intre {} 
 +<​code>​ 
 +write 10+{run ...} in variabila 
 +</​code>​ 
 + 
 +==== If ===== 
 +<​code>​ 
 +if expresie_logica start 
 +else 
 +stop 
 +</​code>​ 
 + 
 +Intra in if daca expresia este != 0 si in else daca expresia este 0 
 + 
 +Else poate sa liplseasca. 
 +If-urile se pot imbrica. 
 + 
 +==== Expresii ===== 
 ++, -, /, * si % 
 +paranteze () 
 +! - not (daca e !=0, ! intoarce 0, si invers) (!4 = 0, !0 = 1) 
 +& - si 
 +| - sau 
 += - egal 
 +!= - diferit 
 + 
 +==== Afisarea pe ecran ===== 
 +<​code>​ 
 +print expresie 
 +</​code>​ 
 + 
 +===== Limbajul ASM ===== 
 +ADD r2, r1, r0  (r2=r1+r0) 
 + 
 +SUB r2, r1, r0  (r2=r1-r0) 
 + 
 +MUL r2, r1, r0  (r2=r1*r0) 
 + 
 +DIV r3, r2, r1, r0  (r3=r1/r0, r2=r1%r0) impartire intreaga 
 + 
 +DIVF r2, r1, r0  (r2=r1/r0) impartire in virgula mobila 
 + 
 +PRINT r0   ​afiseaza r0 pe ecran 
 + 
 +TEST r0, r1  
 + 
 +JE eticheta - sare daca ultimul test este r0=r1 
 + 
 +JNE eticheta - sare daca ultimul test este r0!=r1 
 + 
 +JG eticheta - sare daca ultimul test este r0>r1 
 + 
 +JL eticheta - sare daca ultimul test este r0<r1 
 + 
 +JMP eticheta - sare 
 + 
 +RUN eticheta p1, p2, p3, impinge pe stiva parametrii si sare la eticheta 
 + 
 +RETURN valoare - scoate de pe stiva parametrii si sare inapoi de unde a venit cu RUN. Impinge pe stiva valoarea de intoarcere. 
 + 
 +eticheta: - plaseaza o eticheta 
 +===== Cerinta ​====== 
 +  ​* ​Scrieti un parser si afisati AST-ul. Forma AST-ului este decizia voastra, insa va trebui sa ii descrieti fiecare nod in fisierul README.txt. ​(10 p) 
 +  ​* ​Executati ​AST-ul (10 p) 
 +  * Afisati ​limbajul ​in asamblare (10 p) 
 +  * Executati limabjul de asamblare (10 p) 
 + 
 +===== Erori ===== 
 +In caz de eroare de parcurgere, afisati: 
 +<​code>​ 
 +Error: text erooare 
 +</​code>​ 
 + 
 +Programul iese cu un code de eroare
  
-== Des 
so-etti/teme/tema_restanta.1405492795.txt.gz · Last modified: 2014/07/16 09:39 by alexandru.radovici
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0