This shows you the differences between two versions of the page.
so-etti:teme:tema_restanta [2014/07/16 09:39] alexandru.radovici created |
so-etti:teme:tema_restanta [2014/07/16 10:06] (current) alexandru.radovici |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | = Tema Restanta = | + | ====== Tema Restanta ======= |
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. | 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. | ||
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 |