This shows you the differences between two versions of the page.
|
cpl-atm:laboratoare:language [2013/12/06 11:44] laura.vasilescu |
cpl-atm:laboratoare:language [2013/12/06 11:54] (current) laura.vasilescu |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | === Laborator 7 === | + | ===== 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: | ||
| + | <code> | ||
| + | VAR <nume_var1>[:=<val1>][, <nume_var2>[:=<val2>], ..., <nume_varn>[:=<valn> ]]; | ||
| + | </code> | ||
| + | exemplu: | ||
| + | <code> | ||
| + | VAR a, b:=7; | ||
| + | </code> | ||
| + | == 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 == | ||
| + | <code> | ||
| + | <nume_var>: = <expresie>; | ||
| + | </code> | ||
| + | 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 == | ||
| + | <code>IF <expresie_compusa> THEN | ||
| + | <lista_de_instructiuni1> ELSE | ||
| + | <lista_de_instructiuni2> ENDIF; | ||
| + | </code> | ||
| + | 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 == | ||
| + | <code>WHILE <expresie_compusa> DO | ||
| + | <lista_de_instructiuni> ENDWHILE; | ||
| + | </code> | ||
| + | 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. | ||
| + | <code> PRINT <expresie>;</code> | ||
| + | == Instructiunea PRINTS == | ||
| + | Afiseaza un sir de caractere la consola. Sirul de caractere NU contine secvente escape si este incadrat de ghilimele. | ||
| + | <code> PRINTS "sir de caractere";</code> | ||