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:2022:proiect_etapa2 [2022/11/20 09:48]
pdmatei
lfa:2022:proiect_etapa2 [2022/11/27 13:43] (current)
alex.ilie
Line 50: Line 50:
             "​[a-z]"​ |             "​[a-z]"​ |
             "​[0-9]"​ |             "​[0-9]"​ |
-            ​??​epsilon?? ​| <​character> ​+            ​"​eps" ​| <​character> ​
 </​code>​ </​code>​
  
 In descrierea de mai sus, elementele dintre parantezele angulare <> sunt **non-terminali** care trebuie generati, caracterele sunt intotdeauna plasate intre ghilimele simple, iar sirurile intre ghilimele duble. In descrierea de mai sus, elementele dintre parantezele angulare <> sunt **non-terminali** care trebuie generati, caracterele sunt intotdeauna plasate intre ghilimele simple, iar sirurile intre ghilimele duble.
  
-''<​character>''​ se refera la orice caracter obisnuit care nu face parte din caractele de //control// (precum ''​*''​ sau ''​|''​),​ sau la orice sir de lungime trei de forma ''​ '​c'​ '',​ unde ''​c''​ poate fi orice caracter inclusiv de control. ​ +''<​character>''​ se refera la orice caracter obisnuit care nu face parte din caractele de //control// (precum ''​*''​ sau ''​|''​),​ sau la orice sir de lungime trei de forma ''​ '​c'​ '',​ unde ''​c''​ poate fi orice caracter inclusiv de control. 
 + 
 +"​eps"​ reprezinta caracterul Epsilon.
  
 ===== Preprocesarea Regex-urilor ===== ===== Preprocesarea Regex-urilor =====
Line 70: Line 72:
 Aceste operatii noi nu contribuie la expresivitatea regex-urilor,​ insa ajuta foarte mult utilizatorii sa scrie regex-uri compacte si usor de citit. In implementarea voastra, este recomandat sa //​preprocesati//​ regexurile, adica sa eliminati operatorii nou-introdusi si sa ii inlocuiti cu cei standard. Operatorii standard sunt cei prezentati la curs (concatenare,​ reuniune si star). Aceste operatii noi nu contribuie la expresivitatea regex-urilor,​ insa ajuta foarte mult utilizatorii sa scrie regex-uri compacte si usor de citit. In implementarea voastra, este recomandat sa //​preprocesati//​ regexurile, adica sa eliminati operatorii nou-introdusi si sa ii inlocuiti cu cei standard. Operatorii standard sunt cei prezentati la curs (concatenare,​ reuniune si star).
  
-Spre exemplu: $math[e+ = ee*] sau $ [0-9] = \cup 1 \cup 2 \cup \ldots \cup 9 $.+Spre exemplu: $math[e+ = ee*] sau $ [0-9] = \cup 1 \cup 2 \cup \ldots \cup 9 $.
  
 In felul acesta, AST-ul va avea un numar minimal de **tipuri** de noduri, iar algoritmul Thompson cat mai putine cazuri diferite de tratat. In felul acesta, AST-ul va avea un numar minimal de **tipuri** de noduri, iar algoritmul Thompson cat mai putine cazuri diferite de tratat.
Line 100: Line 102:
  
 Din arbore putem genera usor forma prenex: ''​UNION CONCAT STAR UNION a b c d''​. Din arbore putem genera usor forma prenex: ''​UNION CONCAT STAR UNION a b c d''​.
- 
-Nu este necesar sa implementati per se AST-ul, insa prin ierarhia de clase acesta este intrisec. 
  
 ===== Implementare ===== ===== Implementare =====