This shows you the differences between two versions of the page.
|
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 | ||