This is an old revision of the document!
Se da limbajul ATM, descris mai jos. Scrieti un program care parcurge limbajul, afiseaza AST-ul, il executa, il transforma intr-un limbaj de asamblare dat si executa limbajul de asamblare.
Numele fisierului vostru va fi atm si va avea parametrii de forma:
$ ./atm nume_fisier actiune actiune: ast - afiseaza AST-ul exe_ast - executa limbajul pe baza AST-ului asm - afiseaza limbajul de asamblare exe_asm - executa limbajul de asamblare primit in nume_fisier
type nume type poate fi integer, string sau float
type nume(lungime) type poate fi integer, string sau float lungimea este o constanta
write expresie in variabila
function nume_functie parametru1@tip continuare_nume_functie parametru2@tip conitnuare_nume_functie parametru3@tip ... returns tip start ... ... ... return (daca e cazul) stop
Tipurile de intoarcere sunt oricare din cele trei tipuri de variabile sau nothing daca nu intoarce nimic.
La return, functia se opreste imediat
Exemple:
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
print expresie
Aplelarea unei functii se face cu run
run nume_functie parametru1 continuare_nume_functie parametru2 ...
Daca apare intr-o expresie o functie (poate fi doar o functie care intoarce ceva, ea apare intre {}
write 10+{run ...} in variabila
if expresie_logica start else stop
Intra in if daca expresia este != 0 si in else daca expresia este 0
Else poate sa liplseasca. If-urile se pot imbrica.
+, -, /, * si % paranteze () ! - not (daca e !=0, ! intoarce 0, si invers) (!4 = 0, !0 = 1) & - si
print expresie
* 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)