Laborator 7

Scrieți gramatica (parser + lexer) și generați AST-ul pentru următorul limbaj:

Variabile

Numele unei variabile poate contine litere mici, litere mari, cifre si caracterul _ si trebuie sa inceapa neaparat cu o litera. Variabilele se declara folosind o constructie de tipul:

VAR <nume_var1>[:=<val1>][, <nume_var2>[:=<val2>], ..., <nume_varn>[:=<valn> ]];

exemplu:

VAR a, b:=7;
Expresii aritmetice

Vor fi acceptate expresii aritmetice simple, formate din doi termeni. Termenii unei expresii pot fi constante (numere intregi) sau variabile. O valoare intreaga sau o variabila reprezinta ea insasi o expresie. Vor fi suportati urmatorii operatori binari: +, ­, *, /, <, >, ⇐, >=, !=, ==. Semantica operatorilor este similara cu cea din limbajul C.

Instructiuni de atribuire
<nume_var>: = <expresie>;

Partea stanga a unei instructiuni de atribuire poate fi doar o variabila (intrepretorul va da o eroare in caz contrar). Partea dreapta a atribuirii este o expresie aritmetica.

Instructiunea IF
IF <expresie_compusa> THEN
<lista_de_instructiuni1> ELSE
<lista_de_instructiuni2> ENDIF;

Expresie_compusa reprezinta o expresie conditionala simpla sau mai multe expresii separate de operatorii && sau ||. Termenii care se compara pot sa fie expresii aritmetice. NU trebuie tesatata precedenta operatorilor, evaluarea se va face in ordinea in care apar. Expresiile NU sunt separate prin paranteze. Lista de instructiuni contine una sau mai multe instructiuni separate prin ';'. Daca apar mai mult de o instructiune, instructiunile NU vor fi cuprinse intre acolade. Separarea este facuta de cuvintele cheie then, else si endif. NU trebuie tratat cazul cu instructiuni if imbricate.

Instructiunea WHILE
WHILE <expresie_compusa> DO
<lista_de_instructiuni> ENDWHILE;

Expresie_compusa reprezinta o expresie conditionala simpla sau mai multe expresii separate de operatorii && sau ||. Termenii care se compara pot sa fie expresii aritmetice. NU trebuie tesatata precedenta operatorilor, evaluarea se va face in ordinea in care apar. Expresiile NU sunt separate prin paranteze. Lista de instructiuni contine una sau mai multe instructiuni separate prin ';'. Daca apar mai mult de o instructiune, instructiunile NU vor fi cuprinse intre acolade. Instructiunile pot sa fie instructiuni if.

Instructiunea PRINT

Afiseaza la consola rezultatul evaluarii unei expresii.

 PRINT <expresie>;
Instructiunea PRINTS

Afiseaza un sir de caractere la consola. Sirul de caractere NU contine secvente escape si este incadrat de ghilimele.

 PRINTS "sir de caractere";
cpl-atm/laboratoare/language.txt · Last modified: 2013/12/06 11:54 by laura.vasilescu
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