Fondamenti, linguaggi e traduttori
Alfabeto e cardinalità
Alfabeto Σ = {a, b} |Σ| = numero di simboli |Σ| = cardinalità
Linguaggio e struttura
Linguaggio = insieme di stringhe costruite su un alfabeto
Un linguaggio formale non deve essere ambiguo
l1 = ab = | l1 | = 2
l2 = aab = | l2 | = 3
l2 = a = | l2 | = 1
l2 = ε = | l2 | = 0
Stringa vuota ε |ε| = 0
Linguaggio vuoto ∅ |∅| = 0
L = { ε } | L | = 1 caso particolare (linguaggio formato da solo ε)
Concatenamento
x = aab y = bbb x y = aabbba
Concatenamento di linguaggi L1 L2 = {x y | x ∈ L1, y ∈ L2}
Φ L = Φ e L1 = Φ
L Φ = Φ e | ε |
Potenza
a0 = ε se n = 0
a^ε = se n ≠ 0
Ln = { L^(n−1) L se n ≠ 0
L0 = {ε}
Operatore di Kleene
a* = U an
L* = U Ln
Operatore +
a+ = a a* = aa*
L+ = U Ln
Complemento
L = L U L = Σ* = L = Σ
Espressioni regolari
Dato un alfabeto sono espressioni regolari: Φε∀ a ∈ Σ (a è uno dei simboli dell’alfabeto)
Definizione: Date e1, e2 espressioni regolari:
- se e1 e e2, allora e1
- se e1 e e2, allora e1 e e2
Espressione regolare per numeri interi
Σ = {+ , - , 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
Scrivere l'espressione regolare che permette di scrivere un numero intero con segno o senza (con la zero).
Σ = {+ , - , ε, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
→ (+ U - U ε) (0 U 1 U 2 U 3 U . . . U 9)*
Ho male posizionato potenze, e parente la seconda parentesi anche 0 volte, potrei ottenere un segno seguito dal nulla = errore = scambio * → con +
Esempio: sarebbe possibile generare un numero come +00001 (biogotti)
→ (+ U - U ε) ((1 U . . . U 9)(0 U 1 U . . . U 9)*) U 0
Problemi e soluzioni
Ho un problema: non riesco a generare lo zero da solo.
→ ((+ U - U ε) ((1 U . . . 9)((0 U 1 U . . . U 9)*) U 0
Derivazione
e1 → e2, se e2 è sottoinsieme di e1.
Regole: e1 e e2 U en → e1
e* → en 0 ≤ n
Derivazione immediata: e1 → e2 se A ⊆ B ed e2 → α β ed e2 → α B, allora A → ε
Alfabeto aggiuntivo
Σ = {a, b, 1} |Σ| = numero di simboli
L = {ε} |L| = 1
|| = cardinalità
Linguaggio vuoto e concatenamento
L'insieme di stringhe costruite su un alfabeto ε ∈ L
l1 = b | l1 = L {1}
l2 = a | l1 = L {2}
L = {ε, l1, l2} |L| = 1001
caso particolare (linguaggio formato da sola ε)
Stringa vuota: ε = li0
Linguaggio vuoto: ∅ = L ∈() |L| = 0
Concatenamento: x = aaε, y = bbb, z = aaabbb
Concatenamento di linguaggi e potenza
Concatenamento di linguaggi: L1L2 = {x1x2 | x1 ∈ L1, x2 ∈ L2}
∅ = {x} ∅
Potenza e operatori
a0 = ε, se n = 0
a-n = ∅, se n ≠ 0
Ln = {l1l2 ... ln | li ∈ L }, se n ≠ 0
Operatore di Kleene: a* = ⋃i = 0n Li
Operatore +: a+ = Li
Complemento e espressioni regolari
Complemento: L = LΣ ∩ Σ*
L' = LU - L
Espressioni regolari da un alfabeto sono espressioni regolari: ∅ε∀ a ∈ Σ (a è uno dei simboli dell'alfabeto)
Ulteriori definizioni
Definizione: Date e1, e2 espressioni regolari:
- se e1 e e2, allora e1 e2
- se e1, e2 sono e, allora e1 e2
- se e1 e e2 sono ei allora e1 ∪ e2
Espressione regolare per numeri interi
Σ = {+, -, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
Scrivere l'espressione regolare che permette di scrivere un numero intero con segno o senza (con lo zero).
Σ = {+, -, ε, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0} → { (+ ∪ - ∪ ε) (0 ∪ 1 ∪ 2 ∪ 3 ∪ 4 ∪ 8 ∪ 9) → * Ho ∅ problema, ε potrebbe ∅, e scambiare * con +.
ε che genera il minimo con ε solo.
Ho ∅ per generare lo zero da solo.
→ ((+ ∪ - ∪ ε) (0 ∪ 1 ∪ 2 ∪ 3 ∪ 4 ∪ 5 ∪ 9 ∪ 9 ∪ 0 ∪ 1 ∪ 9)
Derivazione
e1 → e2, se e2 è sottoinsieme di e1.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Appunti Fondamenti, Linguaggi e Traduttori (FLT), corso parsing
-
Fondamenti, Linguaggi e Traduttori (FLT)
-
Fondamenti, Linguaggi e Traduttori (FLT) parser
-
Fondamenti, Linguaggi e Traduttori (FLT)