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