Differences
This shows you the differences between two versions of the page.
| 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] = 0 \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 ===== | ||