Tema de casă 2

Termen de predare: 12.01.2014, ora 23:55

Trimitere temă

Tema de casă se trimit sub forma unei arhive ZIP.

Arhiva va fi uploadă folosind un serviciu public de sharing (Google Drive, Dropbox etc.). Trebuie să trimiteți link-ul către locația de unde putem downloada tema de casă.

Trimiterea temei de casă se face prin completarea acestui formular.

Atenție! Nu faceți link-ul public! Dacă ajunge link-ul public, colegii ar putea să se inspire din tema voastră.

Dacă două teme seamănă suficient de mult vor fi considerate copiate.

Toate întrebările despre temă se vor purta public pe grupul acesta. Toți cei care au trimis tema de casă nr. 1 au fost înscriși cu adresa de e-mail de pe care au trimis tema.

Arhiva trebuie să conțină:

  • un fișier README care conține numele vostru și detalii despre cum algoritmul folosit în implementarea temei
  • un fișier numit atmbasic.jison în care definiți gramatica folosita de jison
  • un fișier numit atmbasic.js, generat din fișierul atmbasic.jison
  • un fișier numit main.js care implementează logica temei de casă

Enunț

Realizati arborele sintactic pentru limbajul ATM Basic descris mai jos:

  • limbajul are doua tipuri de variabile: numere si siruri de caractere
    • numerele incep cu # (intregi) sau % (fractionare) si continua litere sau cifre
    • sirurile de caractere incep cu @ si continua cu litere sau cifre
  • numele de functii incep cu litere si continua cu litere sau cifre
  • fiecare instructiune este pe o linie separata

Declaratii de variabile

Declaratiile de variabile pot aparea doar la inceputul programului sau ai functiilor. Ele incep cu cuvantul VAR.

VAR @sir - variabila string
VAR #ni, %nf - variabila intreaga, respectiv fractionara

Expresii

Expresiile folosite pot fi:

  • adunari
  • scaderi
  • inmultiri
  • impartiri
  • modulo (cuvantul mod)
  • paranteze

If

If arata in felul urmator: (atentie ELSEIF si ELSE pot lipsi)

IF conditie THEN
  instructiuni
ELSEIF conditie THEN
  instructiuni
ELSE
  instructiuni
ENDIF

WHILE

While arata in felul urmator:

WHILE conditie DO
  instructiuni
ENDWHILE

FOR

FOR arata in felul urmator: (atentie STEP poate lipsi, dupa step urmeaza un numar intreg pasul de incrementare)

FOR #variabila FROM numar TO numar STEP numar DO
  instructiuni
ENDFOR

Functii

Functiile se declara in felul urmator.

SUB nume lista_parametrii
  instructiuni
ENDSUB

Functiile nu intorc valori.

Apel de functie

Apelul de functie arata in felul urmator:

CALL nume_functie lista_parametrii

Bonus

(1p) Implementati ridicarea la putere in expresii (1p) Implementati restrangeti expresiile constante (1p) Implementati valoare de intoarcere a functiilor

Exemple

Aici sunt cateva exemple de programe care ar trebui sa functioneze

VAR #nr

SUB prim #n
	VAR #i, #divizori
	#divizori = 0
	IF #n <> 0 AND #n <> 1 THEN
		FOR #i FROM 2 TO #n/2 STEP 1 DO
			IF #n MOD #i = 0 THEN
				#divizori=#divizori+1
			ENDIF
		ENDFOR
	ELSE
		#divizori = 1
	ENDIF
	IF #divizori = 0 THEN
		PRINT #n, " este prim"
	ELSE
		PRINT #n, " nu este prim"
	ENDIF
ENDSUB

FOR #nr FROM 1 TO 10 STEP 1 DO
	CALL prim #nr
ENDFOR
VAR #nr

SUB perfect #n
	VAR #i, #s
	#s = 0
	FOR #i FROM 1 TO #n/2 STEP 1 DO
		IF #n MOD #i = 0 THEN
			#s=#s+#i
		ENDIF
	ENDFOR
	IF #s = #n THEN
		PRINT #n, " este perfect"
	ELSE
		PRINT #n, " nu este perfect"
	ENDIF
ENDSUB

FOR #nr FROM 1 TO 10 STEP 1 DO
	CALL perfect #nr
ENDFOR

Testare

Fisirele pentru corectare se afla pe GitHub la acesta adresa https://github.com/alexandruradovici/atm-basic/blob/master/README.md.

cpl-atm/tema2.txt · Last modified: 2014/01/29 12:37 by alexandru.radovici
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0