Închis

Write some Software

>>>>>>>>>>>> [url removed, login to view] <<<<<<<<<<<<<<<<<

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

Aptitudini: Programare C, Programare C#

Vezi mai multe: un code, sau 6, ro.fi, ro-fi, programming courses, nu nl, jl software, float programming, float c programming, doar, div programming, cs programming, ceva, asm programming, 0 1 integer programming, write p, test some software, mul, JG, eticheta

Despre angajator:
( 0 recenzii ) Romania

ID Proiect: #6371766

2 freelanceri licitează în medie 20€ pentru acest proiect

tranxuanhao

My name's Hao from Vietnam.I provide services with enthusiasm, creativity, [login to view URL] pay until you are satisfied with our quality services and reach your [login to view URL]: Programming: C#,Asp.net,Java,Javascript,ht Mai multe

%bids___i_sum_sub_35%%project_currencyDetails_sign_sub_36% EUR în 10 zile
(3 recenzii)
2.3
baliop02

Please add Me (((((((((((((((([Removed by Freelancer.com Admin])))))))))))))))))))))))) for more discuss ............................................................................................................... Mai multe

%bids___i_sum_sub_32%%project_currencyDetails_sign_sub_33% EUR în 1 zi
(0 recenzii)
0.0