Documente Academic
Documente Profesional
Documente Cultură
Expresii regulate
George Daniel MITRA
21 decembrie 2017
Rezumat
Tema constă ı̂n familiarizarea cu generatorul de analizoare lexicale FLEX (sau jflex) prin analiza
s, i completarea unui schelet de cod (sau reimplementarea lui pentru cei ambit, ios, i).
1 Specificat, ii temă
1.1 Cerint, ă
Se dă un program care cites, te expresii regulate ı̂n forma infixată s, i le afis, ează ı̂n forma prefixată. Să se
extindă funct, ionalitatea lui prin adăugarea a doi operatori postfixat, i, + s, i ?.
1.3 FLEX
FLEX este o unealtă pentru generarea de analizoare lexicale. Variantele acceptate sunt:
• flex(C/C++) [3, 4]
• jflex(Java) [5, 6, 7]
1
2 Not, iuni introductive
2.1 Limbajul de descriere
Limbajul este descris printr-o gramatică BNF s, i foloses, te următoarea convent, ie de culori:
• albastru - neterminali
• verde - operatori ai limbajului BNF s, i paranteze ajutătoare
• rosu - terminali (elemente care fac parte efectiv din limbajul descris)
Pentru a simplifica sintaxa, Se folosesc operatorii ∗, + s, i ? cu semnificat, ia din expresiile regulate.
2.2.2 Alfabet
Un alfabet este orice mult, ime finită s, i nevidă de simboluri.
<alphabet> ::= { <symbol> ( , <symbol> )* }
2.2.3 S, ir
Un s, ir este o secvent, ă finită de simboluri. S, irul vid se notează cu e, ı̂n timp ce alte s, iruri reprezintă o
concatenare de unul sau mai multe simboluri. Din acest motiv, e nu se consideră simbol, deci nu va face
niciodată parte din niciun alfabet.
<word> ::= e | ( <symbol> )+
3 Expresii Regulate(ER)
3.1 Descriere
Expresiile regulate reprezintă o metodă de reprezentare finită a limbajelor. Ele pot descrie orice succe-
siune finită de operat, ii de reuniune, concatenare s, i Kleene Star.
Fie Σ un alfabet. O expresie regulată este o secvent, ă finită de simboluri din Σ ∪ {∪, ∗ , (, ), ∅, e},
t, inând cont de următoarele proprietăt, i:
1. ∅ s, i e sunt expresii regulate, reprezentând limbajul vid, L1 = ∅, respectiv limbajul care cont, ine
doar s, irul vid, L2 = {e};
2. ∀a ∈ Σ, a este expresie regulată, reprezentând limbajul ce cont, ine un singur cuvânt format din
simbolul a, L = {a};
3. ∀α, β expresii regulate, α ∪ β este expresie regulată, reprezentând reuniunea limbajelor descrise de
expresiile regulate α s, i β, L(α ∪ β) = L(α) ∪ L(β);
4. ∀α, β expresii regulate, αβ este expresie regulată, reprezentând concatenarea limbajelor descrise de
expresiile regulate α s, i β, L(αβ) = L(α) ◦ L(β);
5. ∀α expresie regulată, α∗ este expresie regulată, reprezentând aplicarea operatorului Kleene Star
limbajului descris de expresia regulată α, L(α∗ ) = L(α)∗ ;
2
6. ∀α expresie regulată, (α) este expresie regulată. Parantezele cresc prioritatea operatorilor. Ope-
ratorii, ordonat, i de la prioritate maximă la minimă sunt: Kleene Star, operator de concatenare,
operator de reuniune;
7. Orice altceva nu este expresie regulată.
Notat, ii ajutătoare:
• Fie α o expresie regulată. Notăm α+ = αα∗ .
• Fie α o expresie regulată. Notăm α? = (α ∪ e)
3.2 Specificat, ii
În temă, din cauza faptului că le folosim pentru a desemna elemente constitutive expresiilor regulate,
caracterele {|, ∗, +, ?, O, e, (, )} nu pot face parte din niciun alfabet. O expresie regulată se defines, te ı̂n
felul următor:
<RE> ::= <alphabet> : <expression>
<expression> ::= O | e | <symbol> | ( <expression> | <expression> ) | ( <expression> <expression>
) | ( <expression> * ) | ( <expression> + ) | ( <expression> ? ) | ( <expression> )
În temă, | reprezintă operatorul de reuniune, O reprezintă expresia limbajului vid, e reprezintă
expresia limbajului care cont, ine doar s, irul vid.
Forma prefixată a unei expresii se reprezintă ı̂n felul următor:
<PRE > ::= phi | epsilon | ( symbol <symbol> ) | ( union <expression> ( <expression> )+ )|
( concat <expression> ( <expression> )+ ) | ( kleene <expression> ) | ( plus <expression> ) | (
optional <expression> )
În fis, ierul de intrare spat, iile pot fi ignorate. În fis, ierul de ies, ire, ele fiind separatori ai operanzilor,
trebuie să apară.
4 Punctaj
Tema 0 este o temă de familiarizare cu instrumentul, as, a că are un volum de muncă foarte redus s, i
punctaj 0. Are ca termen de predare termenul temei 1.
5 Sugestii
Înainte de a vă uita pe cod, e recomandat să citit, i sect, iunile ”Format of the input files” s, i ”Start condi-
tions” din manualul FLEX [3], respectiv ”Lexical specification” s, i ”A simple example...” din manualul
jflex [6].
C: Orientat, i-vă după cum sunt folosite constantele din expression.h pentru celelalte tipuri de expresii.
+
s, i ? sunt foarte similare cu Kleene Star. Java: Implementat, i clase pentru cei doi operatori unari
postfixat, i. Seamănă foarte mult cu Kleene Star.
3
Bibliografie
[1] vmchecker
[2] Materiale
[3] Documentat, ie GNU Flex