Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lfa:proiect:etapa1 [2021/10/31 16:18] stefan.stancu [Ce primeste la input un lexer?] |
lfa:proiect:etapa1 [2021/12/23 00:48] (current) stefan.stancu [Etapa 1 - Lexer cu AFD-uri] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Etapa 1 - Lexer cu AFD-uri ====== | ====== Etapa 1 - Lexer cu AFD-uri ====== | ||
+ | |||
+ | **Checker si teste**: [[lfa:proiect:checker|Checker proiect LFA]]. | ||
Etapa 1 consta in implementarea unui lexer simplu (in Python sau Haskell). | Etapa 1 consta in implementarea unui lexer simplu (in Python sau Haskell). | ||
Line 160: | Line 162: | ||
- pregati o implementare de AFD care sa permita cele de mai sus, si a carei implementare va fi rafinata in urmatoarele etape. Oferim cateva sugestii: | - pregati o implementare de AFD care sa permita cele de mai sus, si a carei implementare va fi rafinata in urmatoarele etape. Oferim cateva sugestii: | ||
- implementarea unei clase ''Stare'', care poate fi modificata (sau extinsa) ulterior | - implementarea unei clase ''Stare'', care poate fi modificata (sau extinsa) ulterior | ||
- | - codificarea starilor printr-o lista: ''[s1, s2, ..., sn]'', in care elementele pot avea orice tip (profitam astfel de flexibilitatea typing-ului in Python). Dictionarul AFD-ului va folosi indecsii acestei liste si nu valorile efective. In felul asta, putem transforma transparent de dictionar valorile starilor, si evitam problema hashing-ului. | + | - codificarea starilor printr-o lista: ''[s1, s2, ..., sn]'', in care elementele pot avea orice tip (profitam astfel de flexibilitatea typing-ului in Python). Dictionarul AFD-ului va folosi indecsii acestei liste si nu valorile efective. In felul asta, putem transforma valorile starilor transparent fata de dictionar, si astfel sa evitam problema hashing-ului. |
==== Igiena codului ==== | ==== Igiena codului ==== | ||
Line 259: | Line 261: | ||
* Vizitati functiile din biblioteca ''Data.Map'' si ''Data.Set''. Unele pot fi foarte utile pentru implementare | * Vizitati functiile din biblioteca ''Data.Map'' si ''Data.Set''. Unele pot fi foarte utile pentru implementare | ||
- | * Refolositi functia ''splitBy'' de la PP | + | * Refolositi functia ''splitBy'' de la PP. |
* Aruncati o privire peste functia ''sortOn''. Este mai simplu de folosit si mai performanta decat ''sortBy''. | * Aruncati o privire peste functia ''sortOn''. Este mai simplu de folosit si mai performanta decat ''sortBy''. | ||
* Aruncati o privire peste **list comprehensions**. Pot fi utile local. | * Aruncati o privire peste **list comprehensions**. Pot fi utile local. | ||
+ | * Nu uitati de tipuri precum ''Data.Maybe'' si ''Data.Either'', ar putea fi utile in anumite contexte. | ||
==== Debugging ==== | ==== Debugging ==== |