Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
lfa:proiect:etapa3 [2021/12/18 15:05] stefan.stancu [Input] |
lfa:proiect:etapa3 [2021/12/29 02:02] (current) stefan.stancu [Input] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Etapa 3 - Lexer complet si Limbajul Imperative ====== | ====== Etapa 3 - Lexer complet si Limbajul Imperative ====== | ||
| + | |||
| + | **Checker si teste**: [[lfa:proiect:checker|Checker proiect LFA]]. | ||
| Etapa 3 consta la randul ei in trei parti, dintre care ultima este bonus. | Etapa 3 consta la randul ei in trei parti, dintre care ultima este bonus. | ||
| - | ==== Punctaj (pls revise) ==== | + | ==== Punctaj ==== |
| * Punctajul pentru 3.1. este de **0.7p** (din totalul de 1p al etapei) | * Punctajul pentru 3.1. este de **0.7p** (din totalul de 1p al etapei) | ||
| * Punctajul pentru 3.2. este de **0.3p** (din totalul de 1p al etapei) | * Punctajul pentru 3.2. este de **0.3p** (din totalul de 1p al etapei) | ||
| Line 18: | Line 20: | ||
| Daca nu ati citit pana acum cerinta de la [[lfa:proiect:etapa1 | Etapa 1]], este bine sa o faceti pentru a intelege mai bine Etapa 3. | Daca nu ati citit pana acum cerinta de la [[lfa:proiect:etapa1 | Etapa 1]], este bine sa o faceti pentru a intelege mai bine Etapa 3. | ||
| - | ==== Structura fisierului cu tokens (Ioana, Stefan, pls revise) ==== | + | ==== Structura fisierului cu tokens ==== |
| Fisierul va contine un **token** si expresia lui regulata, cate una pe fiecare linie, sub urmatoarea forma: | Fisierul va contine un **token** si expresia lui regulata, cate una pe fiecare linie, sub urmatoarea forma: | ||
| Line 39: | Line 41: | ||
| [a-z]+ | # alias pt expresia a | b | c ... | z, avand numai caractere alfabetice lowercase | [a-z]+ | # alias pt expresia a | b | c ... | z, avand numai caractere alfabetice lowercase | ||
| [0-9]+ | # alias pt expresia 0 | 1 | 2 | ... | 9 | [0-9]+ | # alias pt expresia 0 | 1 | 2 | ... | 9 | ||
| - | <c> | # orice caracter alfabetic | + | <c> | # orice caracter alfanumeric |
| '<any_c>' # orice caracter ASCII, nu doar unul alfabetic | '<any_c>' # orice caracter ASCII, nu doar unul alfabetic | ||
| </code> | </code> | ||
| Line 69: | Line 71: | ||
| unde fiecare pereche ''<token,lexem>'' se afla pe cate o linie separata, iar intre fiecare ''token'' si ''lexem'' se afla cate un singur spatiu alb (**neincluzand spatiile albe ce se pot afla in compozitia lexemului**). | unde fiecare pereche ''<token,lexem>'' se afla pe cate o linie separata, iar intre fiecare ''token'' si ''lexem'' se afla cate un singur spatiu alb (**neincluzand spatiile albe ce se pot afla in compozitia lexemului**). | ||
| - | Testarea va fi efectuata intr-o maniera identica ca cea din cadrul [[lfa:proiect:etapa1|Etapei 1]], prin compararea output-ului generat de voi cu cel aflat in fisierele de referinta. Mai multe detalii legate de script-ul de testare si cum sa il rulati veti gasi in curand pe pagina dedicata [[lfa:proiect:checker|Checker-ului]]. | + | Testarea va fi efectuata intr-o maniera identica ca cea din cadrul [[lfa:proiect:etapa1|Etapei 1]], prin compararea output-ului generat de voi cu cel aflat in fisierele de referinta. Mai multe detalii legate de script-ul de testare si cum sa il rulati gasiti pe pagina dedicata [[lfa:proiect:checker|Checker-ului]]. |
| ==== Sugestii de implementare pt Lexer complet ==== | ==== Sugestii de implementare pt Lexer complet ==== | ||
| Line 80: | Line 82: | ||
| Folosind lexer-ul scris de voi, implementati un parser simplu pentru limbajul **Imperative** descris mai jos. | Folosind lexer-ul scris de voi, implementati un parser simplu pentru limbajul **Imperative** descris mai jos. | ||
| Folositi aceeasi abordare ca in implementarea parserului pentru expresii regulate. | Folositi aceeasi abordare ca in implementarea parserului pentru expresii regulate. | ||
| + | } | ||
| ==== Input ==== | ==== Input ==== | ||
| Line 92: | Line 94: | ||
| <instruction_list> ::= <prog> | <prog> '\n' <instruction_list> | <instruction_list> ::= <prog> | <prog> '\n' <instruction_list> | ||
| - | <expr> ::= <expr> '+' <expr> | <expr> '>' <expr> | <expr> '==' <expr> | <variable> | <integer> | + | <expr> ::= <expr> '+' <expr> | <expr> '-' <expr> | <expr> '*' <expr> | <expr> '>' <expr> | <expr> '==' <expr> | <variable> | <integer> |
| </code> | </code> | ||
| Line 104: | Line 106: | ||
| ==== Output ==== | ==== Output ==== | ||
| + | Output-ul va fi redat sub forma unui fisier ce contine AST-ul rezultat in urma parsarii programului. Un exemplu de instantiere si afisare se gaseste in comentariile din scheletul de clase ''ast.py'' (atentie: **subblocurile sunt identate cu cate doua spatii** fata de blocurile parinte). | ||
| ===== 3.3. Interpretor pentru limbajul Imperative ===== | ===== 3.3. Interpretor pentru limbajul Imperative ===== | ||