4. gyakorlat
Készítsünk nyelvtant ahhoz az a, b betűk feletti nyelvhez, melynek szavai ugyanannyi a-t és b-t tartalmaznak!
Bizonyítás:
\(L = \{u \in \{a, b\}^* \mid \ell_a(u)=\ell_b(u)\}\)
Bizonyítandó: \(L\) nyelv szabályainak megfelel \(\iff\) a nyelvtannak megfelel
- a nyelvtannak megfelel \(\Rightarrow\) \(L\) nyelv szabályainak megfelel
Mivel a nyelvtan minden szabályában megegyező számú \(a\) és \(b\) jön létre, ezért e két karakter száma mindig megegyezik
- \(L\) nyelv szabályainak megfelel \(\Rightarrow\) a nyelvtannak megfelel
Teljes indukció
\(\ell_u=2k\)
- \(k=0\): triv.
- \(k=1\):
- \(ab\): \(S \Rightarrow aSbS \xRightarrow{*} ab\)
- \(ba\): \(S \Rightarrow bSaS \xRightarrow{*} ba\)
Indukció
- tegyük fel, hogy le tudjuk vezetni a legfeljebb \(2k\) hosszú szavakat
- lássuk be, hogy a \(2(k+1)\) hosszú szót is le tudjuk vezetni
- Ha
uszóa-val kezdődik, akkor- lesz egy
bpárja is - tehát \(u=vw\), ahol \(v=axb\), ahol \(v, w\) és \(x\) szavak
- Azt is tudjuk, hogy \(\ell_a(v)=\ell_b(v)\)
- tehát \(u=axbw\)
- \(S \Rightarrow aSbS \xRightarrow{\text{mivel x-ről és w-ről is tudjuk az indukciós feltevés szerint, hogy felírható a nyelvtanunkkal}} axbw\)
- lesz egy
- Ha
Feladat: nyelvtanok / 8.
Készítsünk nyelvtant, mely \(\{a^nb^nc^n \mid n \ge 1\}\) szavait fogadja el!
\(S \to aAbBc\)
\(A \to \varepsilon \mid aAb \mid Ab\)
\(B \to \varepsilon \mid bBc \mid Bc\)
\(S \Rightarrow aSBc \Rightarrow aaSBcBc \Rightarrow aaVBcBc \Rightarrow aaVBBcc \Rightarrow aabVBcc \Rightarrow aabbVcc \Rightarrow aabbcc\)
Regex
Mi a retek az a regex?
Regex: Regular expression (reguláris kifejezés)
Illeszkednek bizonyos szavakra, szócsoportokat lehet vele megadni szabályok alapján.
|: vagy[a-z]: betűk a-tól z-ig (csak kisbetűk!)[0-9]: egész számok 1-től 9-ig+: \(1 \leq\) db az előző tokenből*: \(0 \leq\) db az előző tokenből?: 0 vagy 1 az előző tokenből^: negálás
Feladat: Regex / 1.
Mely szavakra illeszkednek az alábbi regexek?
A szavak: \(\varepsilon\), a, b, aa, ab, ba, aaa, aab, aba, abb, baa, bab, bba, bbb, aaaaaa, bbbbb, ababab, babab
| Retek | Szavak |
|---|---|
"" |
\(\varepsilon\) |
a |
a |
ab |
ab |
a\|b |
a, b |
a* |
\(\varepsilon\), a, aa, aaa (legalább 0 db a-ból áll) |
a\|b* |
\(\varepsilon\), a, b, bbb, bbbbb |
ab* |
a, ab, abb |
a*b |
b, ab, aab |
a*b* |
\(\varepsilon\), a, b, aa, ab, aaa, aab, abb, bbb, aaaaaa, bbbbb |
a*\|b |
\(\varepsilon\), a, b, aa, aaa, aaaaaa |
a*\|b* |
\(\varepsilon\), a, b, aa, aaa, bbb, aaaaaa, bbbbb |
(ab)* |
\(\varepsilon\), ab, ababab |
Feladat: regex / 2.
Mely szavakra illeszkedik az
a?reguláris kifejezés? Írjuk fel a standard műveletek segítségével!
a?: \(\varepsilon, a\) = ""|a
Feladat: regex / 3.
Mely szavakra illeszkedik az a+ reguláris kifejezés? Írjuk fel a standard műveletek segítségével!
a+ = aa*
a, aa, aaa, aaaa, aaaaa, aaaaaa, aaaaaaa, aaaaaaaa, aaaaaaaaa
Feladat: regex / 4.
Mely szavakra illeszkedik az
[a-d]reguláris kifejezés? Írjuk fel a standard műveletek segítségével!
[a-d] = a|b|c|d
a, b, c, d
Feladat: regex / 5.
Mely szavakra illeszkedik az
[^a-z]reguláris kifejezés? Kezdjük el felírni a standard műveletek segítségével!
Negálás
[^a-z]: 0, 1, 2, \(\ldots\), z, !, ., 👍, 💺, 🎉, 😷, 😍, 😬, 😛, 👏, 👏, 😪, 😴, 🤦, 🐈, ǎ
😊
Feladat: regex / 6.
Adjon meg reguláris kifejezést a következő számformátumokhoz!
- Decimális egész szám (legalább egy számjegy 0-9-ig)
- Olyan decimáis egész szám, amely több számjegy esetén nem kezdődhet nullával
- Előjeles decimális egész szám (opcionális + vagy – az elején)
- Decimális törtszám (tizedespont előtt legalább egy számjegy)
[0-9]+[1-9][0-9]*|0("+"|"-")?([1-9][0-9]*|0)-
[0-9]+"."[0-9]+ -
|: vagy [a-z]: betűk a-tól z-ig (csak kisbetűk!)[0-9]: egész számok 1-től 9-ig+: \(1 \leq\) db az előző tokenből*: \(0 \leq\) db az előző tokenből?: 0 vagy 1 az előző tokenből^: negál
HF: +0.5 a rendes számábrázolás. Egész szám végén ne legyen pont és a leading 0-k -
0jó -0.nem jó -00nem jó -0.05jó -0.100legyen jójó etc...
([0-9]+"."[0-9]+) | (([1-9][0-9]*|0)(^"."))
Feladat: regex / 7.
Készítsen reguláris kifejezést a helyes
hh:mmóraformátum ellenőrzésére, ahol a hh a 00..23, míg az mm a 00..59 értékeket veheti fel!$ ((0 \mid 1) [0-9] \mid 2[0-3])$ ":" \([0-5][0-9]\)
(0|1|2[0-3]):[0-5][0-9]
Óra ((0|1)|2[0-3]):[0-5][0-9]