====== Klasifikace gramatik, formálních jazyků a automatů přijímajících jazyky ====== ===== Základní pojmy ===== * **Abeceda //Σ//** * Neprázdná množina, jejíž prvky nazýváme symboly. * **Řetezec** / **slovo** / **věta //w//** * Konečná posloupnost symbolů abecedy. * Alternativní definice: - Prázdný řetezec je řetezec. - Je-li //w// řetězec a //a// symbol abecedy pak //wa// je řetezec. - Řetězce jsou vše, co lze získat jen a pouze aplikací předchozích pravidel * **Prázdný řetezec ε** * Řetezec neobsahující žádný symbol * **Konkatenace //xy// (někdy //x.y//)** * Připojení řetezce za jiný řetezec * Konkatenace je asociativní * Prázdný řetezec je neutrální prvek vzhledem ke konkatenaci * **Iterace //Σ//*** * Množina všech řetězců nad abecedou //Σ//. * Volný monoid nad abecedou //Σ// generovaný operací konkatenace. * **Pozitivní iterace //Σ//⁺** * Iterace bez prázdného řetezce * **Formální jazyk //L//** * Jakákoli podmnožina //L// ⊆ //Σ//*. * **Konkatenace jazyků** * Rozumíme binární operaci //L//₁ . //L//₂ = {//xy// | //x// ∈ //L//₁ ∧ //y// ∈ //L//₂} * **Iterace jazyka** * //L//⁰ = {//ε//} * //Lⁿ// = //L// . //Lⁿ//⁻¹, //n// ≥ 1 * //L//* = ∪ //Lⁿ//, //n// ≥ 0 * //L//⁺ = ∪ //Lⁿ//, //n// ≥ 1 ===== Gramatika ===== **Gramatika** //G// = (//N//, //Σ//, //P//, //S//) * //N// -- konečná množina nonterminálních symbolů (**nonterminálů**) * //Σ// -- konečná množina terminálních symbolů (**terminálů**) * //P// -- je konečná množina **přepisovacích pravidel** * //S// -- **počáteční nonterminál** //S// ∈ //N// * **Přepisovací pravidlo** * Podmnožina kartézského součinu (//N// ∪ //Σ//)*//N//(//N// ∪ //Σ//)* × (//N// ∪ //Σ//)* * (//a//, //b//) ∈ //P// zapisujeme ve tvaru //a// -> //b//, kde //a// je levá strana a //b// je pravá strana pravidla. * **Přímá derivace =>** * Binární relace mezi řetezci //u// a //v// která platí pokud můžeme řetezce zapsat jako //u// = //gad//, //v// = //gbd// a (//a//, //b//) ∈ //P//, tj. pokud lze řetězec //v// vytvořit z retězce //u// aplikací jednoho přepisovacího pravidla. * **Derivace =>⁺** * Tranzitivní uzávěr relace přímé derivace, tj. pokud lze vytvořit řetězec //v// z řetězce //u// postupnou aplikací několika přepisovacích pravidel. * **Derivace =>*** * Tranzitivní a reflexivní uzávěr relace přímé derivace, tj. pokud lze vytvořit řetězec //v// z řeťazca //u// postupnou aplikací několika přepisovacích pravidel nebo pokud jsou řetězce stejné. * **Větná forma** * Řetězec terminálů a nonterminálů, které jsou derivací počátečního nontermínálu * **Věta** * Větná forma obsahující pouze terminály * **Jazyk generovaný gramatikou** * Množina všech vět, které patří do gramatiky //L//(//G//) = {//w// | //S// =>* //w// ∧ //w// ∈ //Σ//*} ===== Chomského hierarchie klasifikace gramatik ===== Klasifikace je definována podle tvaru přepisovacích pravidel příslušných gramatik Platí: //L//₃ ⊂ //L//₂ ⊂ //L//₁ ⊂ //L//₀ ==== Typ 0 – obecné (neomezené) gramatiky ==== [[wp>Unrestricted grammar]] * Rekurzivně vyčíslitelné jazyky * Turingovy stroje * Tvar pravidel: //α// -> //β// * //α// ∈ (//N// ∪ //Σ//)*//N//(//N// ∪ //Σ//)* * //β// ∈ (//N// ∪ //Σ//)* ==== Typ 1 – kontextové gramatiky ==== [[wp>Context-sensitive grammar]] * Kontextové jazyky * Lineárně omezené Turingovy stroje * //αAβ// -> //αγβ//, nebo //S// -> //ε// pokud //ε// ∈ //L// a //S// se nevyskytuje na pravé straně žádného pravidla * //A// ∈ //N// * //α//, //β// ∈ (//N// ∪ //Σ//)* * //γ// ∈ (//N// ∪ //Σ//)⁺ * Nesmí dojít ke zkrácení větné formy ==== Typ 2 – bezkontextové gramatiky ==== [[wp>Context-free grammar]] * Bezkontextové jazyky * Zásobníkové automaty * //A// -> //γ// * //A// ∈ //N// * //γ// ∈ (//N// ∪ //Σ//)* ==== Typ 3 – pravé/levé linární gramatiky ==== [[wp>Regular grammar]] * Regulární jazyky * Konečné automaty * Pravá lineární: //A// -> //xB// nebo //A// -> //x// * Levá lineární: //A// -> //Bx// nebo //A// -> //x// * //A//, //B// ∈ //N// * //x// ∈ Σ* ==== Speciální podtypy gramatik ==== === Pravé/levé regulární gramatiky === Stejné jako 3, ale //x// ∈ //Σ// (bez *). === Lineární gramatiky === Podmnožina gramatik typu 2 * //A// -> //xBy// nebo //A// -> //x// * //A//, //B// ∈ //N// * //x//, //y// ∈ //Σ//* === Deterministické bezkontextové gramatiky === Podmnožina typu 2, jazyky příjamné deterministickým zásobníkovým automatem. === Rekurzivní gramatiky === Podmnožina typu 0. Přijímají je **úplné TS** (TS, které pro každý vstup rozhodnou -- nikdy necyklí). Všechny kontextové jazyk jsou rekurzivní, ale ne všechny rekurzivní jazyky jsou kontextové.