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: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 ====