>>>>>>>>>>>> [login to view URL] <<<<<<<<<<<<<<<<<
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
Limbajul ATM
Variabile
type nume
type poate fi integer, string sau float
Siruri (bonus 5p)
type nume(lungime)
type poate fi integer, string sau float
lungimea este o constanta
Atribuire
write expresie in variabila
Declararea functiilor
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
Afisarea pe ecran
print expresie
Apelarea functiilor
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
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.
Expresii
+, -, /, * si % paranteze () ! - not (daca e !=0, ! intoarce 0, si invers) (!4 = 0, !0 = 1) & - si
= - egal != - diferit
Afisarea pe ecran
print expresie
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:
Error: text erooare
Programul iese cu un code de eroare
Please add Me (((((((((((((((([Removed by Freelancer.com Admin])))))))))))))))))))))))) for more discuss
........................................................................................................................