Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lfa:proiect:etapa2 [2021/11/24 00:50] stefan.stancu [Sugestii de implementare pentru Haskell] |
lfa:proiect:etapa2 [2021/12/23 00:48] (current) stefan.stancu [Etapa 2 - Transformarea Regex-urilor la AFD-uri] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Etapa 2 - Transformarea Regex-urilor la AFD-uri ====== | ====== Etapa 2 - Transformarea Regex-urilor la AFD-uri ====== | ||
+ | |||
+ | **Update legat de upload**: incarcati o arhiva ce contine **atat fisierele sursa, cat si directorul de testare tests/ si script-ul checker.py**. | ||
+ | |||
+ | **Checker si teste**: [[lfa:proiect:checker|Checker proiect LFA]]. | ||
Transformarea Regex-AFD ne permite operationalizarea expresiilor regulate, iar aceasta este o parte importanta atat dintr-un lexer cat si dintr-un parser. | Transformarea Regex-AFD ne permite operationalizarea expresiilor regulate, iar aceasta este o parte importanta atat dintr-un lexer cat si dintr-un parser. | ||
Line 24: | Line 28: | ||
<code> | <code> | ||
UNION CONCAT a b STAR c | UNION CONCAT a b STAR c | ||
+ | </code> | ||
+ | <code> | ||
+ | CONCAT UNION a b UNION c d | ||
</code> | </code> | ||
<code> | <code> | ||
Line 29: | Line 36: | ||
</code> | </code> | ||
<code> | <code> | ||
- | STAR UNION CONCAT a b c CONCAT b STAR d | + | STAR UNION CONCAT a b CONCAT b STAR d |
+ | </code> | ||
+ | <code> | ||
+ | CONCAT PLUS c UNION a PLUS b | ||
</code> | </code> | ||
===== Cerinta si descrierea outputului ===== | ===== Cerinta si descrierea outputului ===== | ||
Line 67: | Line 77: | ||
===== Development si testare ===== | ===== Development si testare ===== | ||
- | Pentru a testa AFD-urile generate de voi, veti avea nevoie de o modalitate de afisare a acestora in text. Va sugeram sa adaugati la aceasta si o modalitate grafica. Atasam un script Python3 care poate fi folosit pentru a desena AFD-uri: | + | Pentru a testa AFD-urile generate de voi, veti avea nevoie de o modalitate de afisare a acestora in text. Va sugeram sa adaugati la aceasta si o modalitate grafica. Atasam un script Python3 ({{:lfa:proiect:draw_fa.zip|}}) care poate fi folosit pentru a desena AFD-uri: |
* script-ul primeste in linia de comanda un fisier CSV ce contine un AFD, si deseneaza AFD-ul respectiv. | * script-ul primeste in linia de comanda un fisier CSV ce contine un AFD, si deseneaza AFD-ul respectiv. | ||
* va fi necesar sa instalati anumite module pentru a rula scriptul (e.g. networkx, numpy). | * va fi necesar sa instalati anumite module pentru a rula scriptul (e.g. networkx, numpy). | ||
Line 84: | Line 94: | ||
* tranzitiile sunt codificate pe linii, sub forma: ''stare initiala, caracter, stare finala'' | * tranzitiile sunt codificate pe linii, sub forma: ''stare initiala, caracter, stare finala'' | ||
* pentru legibilitate, starile finale au fost precedate de simbolul ''f'' | * pentru legibilitate, starile finale au fost precedate de simbolul ''f'' | ||
- | * [TODO: link catre script pe github-ul LFA] | ||
- | |||
Line 124: | Line 132: | ||
- | ===== Metodologia de testare: ===== | ||
- | * construim un fisier mare cu expresii regulate **de mana**, peste diverse alfabete, care sa acopere cat mai multe din toate situatiile posibile, impreuna cu cuvinte acceptate sau nu. Acest fisier va trebui discutat eventual cu fiecare dintre noi. Exemplu: | ||
- | <code> | ||
- | 0 | ||
- | ACCEPT 0 | ||
- | REJECT 01 | ||
- | REJECT 10 | ||
- | | ||
- | 00* | ||
- | ACCEPT 0000000000 | ||
- | REJECT 1 | ||
- | REJECT ε | ||
- | </code> | ||
- | * parsam expresiile cu implementarea noastra, generam forma prenex, si creem **mai multe perechi de fisiere separate, input-output** - in fiecare fisier input se va gasi o expresie si cuvintele de test. Ficare fisier de output va marca rezultatul asteptat. Exemplu: | ||
- | * Test0.in | ||
- | <code> | ||
- | 0 | ||
- | 0 | ||
- | 01 | ||
- | 10 | ||
- | </code> | ||
- | * Test0.out | ||
- | <code> | ||
- | ACCEPT | ||
- | REJECT | ||
- | REJECT | ||
- | </code> | ||
- | * Test1.in | ||
- | <code> | ||
- | CONCAT 0 STAR 0 | ||
- | 0000000000 | ||
- | 1 | ||
- | ε | ||
- | </code> | ||
- | * Test1.out | ||
- | | ||
- | <code> | ||
- | ACCEPT | ||
- | REJECT | ||
- | REJECT | ||
- | </code> | ||
- | |||
- | * Vom verifica, fiecare, ca outputul este corect, folosind implementarile noastre. | ||
- | |||
- | ===== Metodologia de testare: ===== | ||
- | |||
- | Folosim acelasi fisier de input, insa generam, in locul expresiilor PRENEX, nfa-uri, din lista de referinta. | ||
- | |||
- | |||
- | |||
- | Obiectivul etapei 2 este conversia unei expresii regulate la un Automat Finit Nedeterminist. Aceasta transformare este un prim pas in conversia unei **specificatii** (expresia regulata) intr-o **implementare** (AFN). | ||
+ | ===== Metodologia de testare ===== | ||
+ | Odata generate AFD-urile de catre implementarea voastra si afisate in cadrul fisierlor de output, checker-ul etapei 2 compara rezultatele fata de o suita de AFD-uri de referinta, verificand pentru fiecare caz in parte **daca automatele accepta acelasi limbaj**. Mai multe detalii legate de checker gasiti pe pagina [[lfa:proiect:checker|Checker proiect LFA]]. |