Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lfa:proiect:etapa3 [2021/12/21 10:27]
ioana.georgescu [Output]
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 ====
  
-Un fisier ​continand ​AST-ul rezultat in urma parsarii. Un exemplu de instantiere si afisare se gaseste in comentariile din scheletul de clase ast.py. +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 =====