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/21 10:14] ioana.georgescu [Structura fisierului cu tokens (Ioana, Stefan, pls revise)] |
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. | ||
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 ===== | ||