Řízená gramatika - Controlled grammar

Řízené gramatiky[1] jsou třídou gramatiky které se obvykle prodlužují bezkontextové gramatiky s dalšími ovládacími prvky odvození a věta v jazyce. Existuje celá řada různých druhů řízených gramatik, přičemž jde o čtyři hlavní divize Indexované gramatiky, gramatiky s předepsanými derivačními sekvencemi, gramatiky s kontextovými podmínkami pro aplikaci pravidel a gramatiky s rovnoběžnost v aplikaci pravidla. Protože indexované gramatiky jsou v oboru tak dobře zavedené, bude se tento článek zabývat pouze posledně uvedenými třemi druhy řízených gramatik.

Ovládání předepsanými sekvencemi

Gramatiky s předepsanými sekvencemi jsou gramatiky, ve kterých je nějakým způsobem omezena sekvence aplikace pravidel. Existují čtyři různé verze předepsaných sekvenčních gramatik: jazykově řízené gramatiky (často nazývané právě řízené gramatiky), maticové gramatiky, vektorové gramatiky a programované gramatiky.

Ve standardním bezkontextovém gramatickém formalismu se na samotnou gramatiku pohlíží jako na 4-n-tice, , kde N je sada nekoncové / frázové symboly, T je nesouvislá sada symbolů terminálu / slova, S je speciálně určený počáteční symbol vybraný z N, a P je soubor výrobních pravidel jako , kde X je nějaký člen N, a je nějaký člen .

Produkce nad takovou gramatikou jsou sekvence pravidel v P že při použití v pořadí podle sekvence vede k terminálovému řetězci. To znamená, že lze zobrazit množinu představitelných derivací v G jako soubor a jazyk jazyka G jako sada koncových řetězců . Kontrolní gramatiky berou tuto definici jazyka generovaného gramatikou vážně a konkretizují množinu derivací jako aspekt gramatiky. Předepsaná gramatika řízená sekvencí je tedy alespoň přibližně 5 n-ticí kde všechno kromě R je stejný jako v CFG a R je nekonečná sada platných derivačních sekvencí .

Sada R, kvůli své nekonečnosti, je téměř vždy (i když ne nutně) popsán pomocí nějakého pohodlnějšího mechanismu, jako je gramatika (jako v jazykově řízených gramatikách), nebo sada matic nebo vektorů (jako v matici a vektorové gramatiky). Různé variace předepsaných sekvenčních gramatik se tak liší podle toho, jak je sekvence derivací definována na bezkontextové bázi. Protože maticové gramatiky a vektorové gramatiky jsou v zásadě speciální případy jazykově řízených gramatik, níže nebudou uvedeny příklady prvních dvou.

Jazykově řízené gramatiky

Jazykově řízené gramatiky jsou gramatiky, ve kterých produkční sekvence představují dobře definovaný jazyk libovolné povahy, obvykle, i když ne nutně pravidelný, nad množinou (opět obvykle, i když ne nutně) pravidel bezkontextové produkce. Často také mají šestou sadu v gramatické n-tici, což ji dělá , kde F je soubor inscenací, které se mohou aplikovat vakuově. Tato verze jazykově řízených gramatik, která má takzvanou „kontrolu vzhledu“, je ta od nynějška.

Důkaz-teoretický popis

Nechali jsme pravidelně kontrolovanou bezkontextovou gramatiku s kontrolou vzhledu n-ticí kde N, T, S, a P jsou definovány jako v CFG, R je podmnožinou P * tvořící běžný jazyk P, a F je nějaká podmnožina P. Poté definujeme vztah okamžitě odvozený jak následuje:

Vzhledem k několika řetězcům X a y, jak V. .. tak v , a některé pravidlo ,

platí pokud

a nebo
a

Intuitivně to jednoduše vysvětluje, že pravidlo lze použít na řetězec, pokud se v tomto řetězci objeví jeho levá strana, nebo pokud je pravidlo v sadě „vakuově použitelných“ pravidel, která se mohou „použít“ na řetězec bez cokoli měnit. Tento požadavek, který musí platit nevakuově použitelná pravidla, je aspektem kontroly gramatiky. Jazyk pro tento druh gramatiky je pak jednoduše sada terminálových řetězců .

Příklad

Zvažte jednoduchou (i když ne nejjednodušší) bezkontextovou gramatiku, která generuje jazyk :

Nechat , kde

V jazykově řízené formě je tato gramatika jednoduše (kde je regulární výraz označující množinu všech sekvencí produkčních pravidel). Jednoduchá modifikace této gramatiky, změna je sada kontrolních sekvencí R do sady a změna jeho prázdného souboru pravidel F na , získá gramatiku, která generuje jazyk bez CF. . Chcete-li zjistit, jak, zvažte obecný případ nějakého řetězce s n instance S v něm, tj. (zvláštní případ triviálně odvozuje řetězec A který je , nezajímavý fakt).

Pokud bychom zvolili libovolnou výrobní sekvenci , můžeme zvážit tři možnosti: , , a Když přepíšeme všechny n instance S tak jako AA, uplatněním pravidla F do řetězce u krát a pokračujte v podávání žádosti G, který platí vakuově (na základě pobytu v F). Když , přepíšeme všechny n instance S tak jako AAa poté zkuste provést n + 1 přepsat pomocí pravidla F, ale to selže, protože už nejsou žádné Spřepsat a F není v F a tak se nemůže aplikovat vakuově, tedy když , derivace selže. Nakonec tedy přepisujeme u instance S, přičemž je ponechána alespoň jedna instance S přepsat následnou aplikací G, přepis S tak jako X. Vzhledem k tomu, že žádné pravidlo této gramatiky nikdy nepřepíše X, taková derivace je určena k tomu, aby nikdy nevytvořila koncový řetězec. Tedy pouze derivace s někdy úspěšně přepíše řetězec . Podobné argumenty platí pro počet As a proti. Obecně tedy můžeme říci, že strukturu mají pouze platné derivace vytvoří koncové řetězce gramatiky. The X pravidla v kombinaci se strukturou kontroly v podstatě přinutí všechny Spřepsat jako AAs před jakýmkoli Aje přepsáno na Ss, což je opět nuceno stát se před všemi ještě pozdějšími iteracemi přes S-to-AA cyklus. Nakonec Ss jsou přepsány jako As. Tímto způsobem se počet Ss zdvojnásobuje každý pro každou instanci který se objeví v posloupnosti odvozující terminál.

Při výběru dvou náhodných sekvencí, které nejsou odvozeny z terminálu, a jedné z terminálních derivací, můžeme to vidět v práci:

Nechat , pak dostaneme neúspěšnou derivaci:

Nechat , pak dostaneme neúspěšnou derivaci:

Nechat , pak získáme úspěšnou derivaci:

Podobné derivace s druhým cyklem pouze vyrábět SSSS. Zobrazuje se pouze (pokračující) úspěšná derivace:

Maticové gramatiky

Maticové gramatiky (rozšířené o své vlastní článek ) jsou zvláštním případem pravidelných kontrolovaných bezkontextových gramatik, ve kterých je jazyk produkční sekvence ve formě , kde každá „matice“ je jedna sekvence. Pro zjednodušení není taková gramatika reprezentována překročením gramatiky P, ale spíše pouze se sadou matic namísto pravidel jazyka a produkce. Maticová gramatika je tedy pětinásobnou n-ticí , kde N, T, S, a F jsou definovány v zásadě jako dříve provedené (s F podmnožina M tentokrát) a M je sada matic kde každý je bezkontextové produkční pravidlo.

Odvozený vztah v maticové gramatice je tedy definován jednoduše jako:

Vzhledem k několika řetězcům X a y, jak V. .. tak v a nějaká matice ,

platí pokud

, , a nebo
a

Neformálně je maticová gramatika jednoduše gramatikou, ve které se během každého přepisovacího cyklu musí provádět určitá posloupnost operací přepisování, nikoli pouze jedna operace přepisování, tj. Jedno pravidlo „spouští“ kaskádu dalších pravidel. Podobné jevy lze provádět ve standardním kontextově citlivém idiomu, jak je tomu ve fonologii založené na pravidlech a dříve Transformační gramatika, takzvanými pravidly „krmení“, která mění derivaci takovým způsobem, aby poskytla prostředí pro nepovinné pravidlo, které na ni bezprostředně navazuje.

Vektorové gramatiky

Vektorové gramatiky úzce souvisí s maticovými gramatikami a ve skutečnosti je lze považovat za speciální třídu maticových gramatik, ve které pokud , pak také všechny jeho obměny . Pro větší pohodlí však budeme definovat vektorové gramatiky následovně: vektorová gramatika je n-tice , kde N, T, a F jsou definovány dříve (F být podmnožinou M znovu) a kde M je sada vektorů , přičemž každý vektor je souborem pravidel bez kontextu.

Odvozený vztah ve vektorové gramatice je pak:

Vzhledem k několika řetězcům X a y, jak V. .. tak v a nějaká matice ,

platí pokud

, , a , kde nebo
a

Všimněte si, že počet produkčních pravidel použitých v odvozovací sekvenci, n, je stejný jako počet produkčních pravidel ve vektoru. Neformálně je tedy vektorová gramatika gramatikou, ve které je aplikována sada produkcí, přičemž každá produkce je aplikována přesně jednou, v libovolném pořadí, k odvození jednoho řetězce od druhého. Vektorové gramatiky jsou tedy téměř identické s maticovými gramatikami, mínus omezení pořadí, v jakém musí produkce probíhat během každého cyklu aplikace pravidel.

Naprogramované gramatiky

Programované gramatiky jsou relativně jednoduchým rozšířením bezkontextových gramatik s ovládáním derivace podle pravidel. Naprogramovaná gramatika je čtyřnásobná n-tice , kde N, T, a S jsou jako v bezkontextové gramatice a P je sada n-tic , kde str je bezkontextové produkční pravidlo, je podmnožinou P (nazývá se pole úspěchu) a je podmnožinou P (nazývá se pole selhání). Pokud je pole selhání každého pravidla v P je prázdné, v gramatice chybí kontrola vzhledu a pokud alespoň jedno pole selhání není prázdné, má gramatika kontrolu vzhledu. Relace odvození na naprogramované gramatice je definována takto:

Vzhledem k tomu, dva řetězce , a některé pravidlo ,

a nebo
a A se nezobrazí v x.

Jazyk programované gramatiky G je definována omezením odvození podle pravidla, jako , kde pro každého , buď nebo .

Intuitivně při aplikaci pravidla str v naprogramované gramatice může pravidlo buď úspěšně přepsat symbol v řetězci, v takovém případě musí být následující pravidlo v strv poli úspěchu, nebo může pravidlo selhat při přepsání symbolu (aplikuje se tedy vakuově), v takovém případě musí být následující pravidlo v strpole selhání. Volba pravidla, které se má použít na počáteční řetězec, je na rozdíl od gramatiky ovládané jazykem libovolná, ale jakmile je proveden výběr, pravidla, která lze použít poté, co od tohoto okamžiku omezí posloupnost pravidel.

Příklad

Stejně jako u tolika řízených gramatik mohou programované gramatiky generovat jazyk :

Nechat , kde

Odvození řetězce aaaa je následující:

Jak je patrné z odvození a pravidel, pokaždé a uspějí, vrací se zpět k sobě, což nutí každé pravidlo pokračovat v přepisování řetězce znovu a znovu, dokud to již nebude moci udělat. Při selhání může derivace přejít na jiné pravidlo. V případě , to znamená přepsat vše Ss as AAs, poté přepněte na . V případě , to znamená přepsat vše As as Ss, poté přepněte buď na , což povede ke zdvojnásobení počtu Ss vyrábí, nebo do který převádí Ss až As pak zastaví derivaci. Každý cyklus projde pak proto buď zdvojnásobí počáteční počet Ss, nebo převede Ss až As. Triviální případ generování A, v případě, že je obtížné to vidět, jednoduše zahrnuje prázdnou aplikaci , čímž skočíte rovnou na což také vakuově platí, pak skočit na který vyrábí A.

Ovládání podle kontextových podmínek

Na rozdíl od gramatik řízených předepsanými sekvencemi produkčních pravidel, která omezují prostor platných derivací, ale neomezují druhy vět, na které se může produkční pravidlo vztahovat, gramatiky ovládané kontextovými podmínkami nemají žádná omezení sekvence, ale umožňují omezení různé složitosti na věty, na které se vztahuje výrobní pravidlo. Podobně jako u gramatik řízených předepsanými posloupnostmi existuje několik různých druhů gramatik řízených kontextovými podmínkami: podmíněné gramatiky, semi-podmíněné gramatiky, náhodné kontextové gramatiky a uspořádané gramatiky.

Podmíněné gramatiky

Podmíněné gramatiky jsou nejjednodušší verzí gramatik ovládaných kontextovými podmínkami. Struktura podmíněné gramatiky je velmi podobná struktuře normální gramatiky přepisování: , kde N, T, a S jsou definovány v bezkontextové gramatice a P je sada dvojic formuláře kde str je produkční pravidlo (obvykle bezkontextové) a R je jazyk (obvykle běžný) . Když R je pravidelný, R lze vyjádřit jako regulární výraz.

Důkaz-teoretická definice

S touto definicí podmíněné gramatiky můžeme definovat odvozenou relaci takto:

Vzhledem k tomu, dva řetězce a nějaká pravidla produkce ,

kdyby a jen kdyby , , a

Neformálně pak produkční pravidlo pro pár v P lze použít pouze na řetězce, které jsou v jeho kontextu. Tedy například kdybychom měli pár , můžeme to použít pouze na řetězce skládající se z libovolného počtu As následuje pouze přesně S následuje libovolný počet bs, tj. na věty v , například řetězce S, aSb, aaaS, aSbbbbbbatd. Nelze použít na řetězce typu xSy, aaaSxbbb, atd.

Příklad

Podmíněné gramatiky mohou generovat kontextový jazyk .

Nechat , kde

Potom můžeme vygenerovat větu aaaa s následujícím odvozením:

Polopodmíněné gramatiky

Semi-podmíněná gramatika je velmi podobná podmíněné gramatice a technicky je třída semi-podmíněné gramatiky podmnožinou podmíněných gramatik. Spíše než specifikovat, jak musí celý řetězec vypadat, aby pravidlo mohlo platit, semi-podmíněné gramatiky určují, že řetězec musí mít jako podřetězce všechny některé sady řetězců a žádnou jinou sadu, aby mohlo pravidlo platit . Formálně je tedy semi-podmíněná gramatika n-ticí kde N, T, a S jsou definovány jako v CFG a P je soubor pravidel jako kde str je (obvykle bezkontextové) produkční pravidlo a R a Q jsou konečné sady řetězců. Odvozený vztah lze potom definovat následovně.

Pro dva struny , a některé pravidlo ,

právě když každý řetězec v R je podřetězec z a žádný řetězec v Q je podřetězec z

Jazyk semi-podmíněné gramatiky je pak triviálně množina terminálových řetězců .

Níže je uveden příklad semi-podmíněné gramatiky, který slouží také jako příklad gramatik s náhodným kontextem.

Náhodné kontextové gramatiky

Náhodná kontextová gramatika je polopodmíněná gramatika, ve které R a Q sady jsou všechny podskupiny N. Protože podmnožiny N jsou konečné sady , je jasné, že gramatiky s náhodným kontextem jsou skutečně druhy semi-podmíněných gramatik.

Příklad

Stejně jako podmíněné gramatiky mohou gramatiky s náhodným kontextem (a tedy i částečně podmíněné gramatiky) generovat jazyk . Jedna gramatika, která to dokáže, je:

Nechat , kde

Zvažte nyní produkci pro aaaa:

Chování R sady zde jsou triviální: libovolný řetězec lze přepsat podle nich, protože nevyžadují přítomnost žádných podřetězců. Chování Q sady jsou však zajímavější. v , jsme nuceni Q přepsán S, čímž začíná S-dvojnásobný proces, pouze když ne Ys nebo As jsou přítomny v řetězci, což znamená, pouze když je předchozí S- proces zdvojnásobení byl plně zahájen, což vylučuje možnost pouze zdvojnásobení některých z Ss. v , který přesouvá S- zdvojnásobení procesu do druhé fáze, nemůžeme zahájit tento proces, dokud nebude dokončena první fáze a nebudou již žádné Ss pokusit se zdvojnásobit, protože Q set zabrání použití pravidla, pokud existuje S symbol stále v řetězci. v dokončujeme fázi zdvojnásobení zavedením Szpět jen tehdy, když už nejsou Xs přepsat, tedy až bude druhá fáze dokončena. Můžeme procházet těmito fázemi tolikrát, kolikrát chceme, a přepsat je všechny Ss až XXs před přepsáním každého z nich X na Y a pak na každou Y do S, nakonec končí jejich nahrazením S s A a pak A. Protože pravidlo pro výměnu S s A zakazuje aplikaci na řetězec s X v tom to nemůžeme aplikovat uprostřed první fáze S- zdvojnásobení procesu, což nám opět znemožňuje pouze zdvojnásobení některých Ss.

Objednané gramatiky

Uspořádané gramatiky jsou možná jedním z jednodušších rozšíření gramatik do kontrolované gramatické domény. Objednaná gramatika je prostě n-tice kde N, T, a S jsou totožné s těmi v CFG a P je sada pravidel přepisu bez kontextu s částečným uspořádáním . Částečné uspořádání se poté použije k určení, které pravidlo se má použít na řetězec, když je použitelné více pravidel. Odvozený vztah je pak:

Vzhledem k několika řetězcům a nějaké pravidlo ,

právě tehdy, pokud neexistuje žádné pravidlo takhle

Příklad

Stejně jako mnoho jiných kontextově řízených gramatik, mohou uspořádané gramatiky vynutit použití pravidel v určitém pořadí. Protože toto je základní vlastnost předchozích gramatik, které by mohly generovat jazyk , nemělo by být žádným překvapením, že gramatika, která výslovně používá řazení pravidel, spíše než kódování pomocí řetězcových kontextů, by měla být podobně schopna zachytit tento jazyk. A jak se ukázalo, právě taková uspořádaná gramatika existuje:

Nechat , kde P je částečně seřazená množina popsaná v Hasseův diagram

Ordered grammar.svg

Odvození řetězce aaaa je jednoduše:

V každém kroku této cesty probíhá derivace přepisováním v cyklech. Všimněte si, že pokud v pátém kroku SY, měli jsme čtyři možnosti: , z nichž první dva zastaví derivaci, jako Z nelze přepsat. V příkladu jsme použili odvodit SS, ale zvažte, zda jsme si vybrali namísto. Byli bychom vyrobili řetězec TAK JAKO, pro které jsou možnosti a , které oba zastaví derivaci. Tedy s řetězcem SYa naopak YS, musíme přepsat Y k výrobě SS. Stejné pozastavení pro jiné kombinace, takže celkově pořadí donutí derivaci zastavit, jinak bude pokračovat přepsáním všech Ss až XXs, pak všichni Xs až Ys, pak všichni Ys až Ss, a tak dále, pak nakonec vše Ss až Apotom všechny As až As. Tímto způsobem řetězec lze přepsat pouze jako který vyrábí As, nebo jako . Začínání s n = 0, mělo by být jasné, že tato gramatika pouze generuje jazyk .

Gramatiky s paralelismem

Ještě další třídou řízených gramatik je třída gramatik s paralelismem v aplikaci operace přepisování, ve které každý krok přepisování může (nebo musí) přepsat současně více než jeden terminál. I tyto mají několik příchutí: indické paralelní gramatiky, k-gramatiky, gramatiky s rozptýleným kontextem, neuspořádané gramatiky s rozptýleným kontextem a k-jednoduché maticové gramatiky. Opět se varianty liší v tom, jak je definován paralelismus.

Indické paralelní gramatiky

Indická paralelní gramatika je jednoduše CFG, ve kterém se má použít pravidlo přepsání, musí být přepsány všechny instance neterminálního symbolu pravidel současně. Tedy například daný řetězec aXbYcXd, se dvěma případy X, a některé pravidlo , jediný způsob, jak tento řetězec přepsat tímto pravidlem, je přepsat jako awbYcwd; ani awbYcXd ani aXbYcwd jsou platná přepsání v indické paralelní gramatice, protože nepřepsaly všechny instance X.

Indické paralelní gramatiky mohou snadno vytvořit jazyk :

Nechat , kde

Generování aabaab pak je docela jednoduchý:

Jazyk je ještě jednodušší:

Nechat , kde P skládá se z

Již od prvního pravidla a požadavku, aby byly všechny instance jiného než terminálu přepsány současně se stejným pravidlem, by mělo být zřejmé, že počet Ss se zdvojnásobí v každém přepisovacím kroku pomocí prvního pravidla, čímž se dají odvozovací kroky . Konečné použití druhého pravidla nahradí všechny Ss s As, což ukazuje, jak tento jednoduchý jazyk může jazyk vytvořit .

K-gramatiky

K-gramatika je ještě další druh paralelní gramatiky, velmi odlišný od indické paralelní gramatiky, ale stále s úrovní paralelismu. V k-gramatice, pro nějaké číslo k, přesně k nekoncové symboly musí být přepsány v každém kroku (s výjimkou prvního kroku, kde jediným symbolem v řetězci je počáteční symbol). Pokud má řetězec méně než k bez terminálů, derivace selže.

3 gramatiky mohou produkovat jazyk , jak je vidět níže:

Nechat , kde P skládá se z:

S následující derivací pro aaabbbccc:

V každém kroku derivace, s výjimkou prvního a posledního, jsme použili autorekurzivní pravidla . Kdybychom nepoužili rekurzivní pravidla, namísto toho řekněme , kde jedno z pravidel není samovolně rekurzivní, počet neterminálů by se snížil na 2, čímž by řetězec nemohl být dále odvozován, protože by měl příliš málo neterminálů k přepsání.

Ruské paralelní gramatiky

Ruské paralelní gramatiky[2] jsou někde mezi indickými paralelními gramatikami a k-gramatikami, definovanými jako , kde N, T, a S jsou jako v bezkontextové gramatice a P je sada párů , kde je pravidlo bezkonkurenční produkce a k je buď 1 nebo 2. Použití pravidla zahrnuje přepsání k výskyty A na w zároveň.

Rozptýlené kontextové gramatiky

Rozptýlená kontextová gramatika je čtyřnásobná n-tice kde N, T, a S jsou definovány jako v bezkontextové gramatice a P je sada n-tic zvaná matice , kde se může lišit podle matice. Odvozený vztah pro takovou gramatiku je

kdyby a jen kdyby
, a
, pro

Intuitivně pak matice v gramatice s rozptýleným kontextem poskytují seznam pravidel, která musí být každá použita pro neterminály v řetězci, kde se tyto neterminály objevují ve stejném lineárním pořadí jako pravidla, která je přepisují.

Neuspořádaná gramatika rozptýleného kontextu je gramatika rozptýleného kontextu, ve které pro každé pravidlo v P, každá z jeho permutací je také v P. Jako takové lze pravidlo a jeho obměny místo toho reprezentovat jako množinu, nikoli jako n-tice.

Příklad

Rozptýlené kontextové gramatiky dokážou jazyk popsat docela snadno.

Nechat , kde

Odvození aaabbbccc pak je triviální:

Reference

  1. ^ Dassow, J., Pǎun, Gh. A Salomaa, A. Grammars with Controlled Derivations. V G. Rozenberg a A. Salomaa (Eds.) Příručka formálních jazyků, Sv. 2, Ch. 3.
  2. ^ Dassow, J. 1984. Na některých rozšířeních ruských paralelních kontextových gramatik zdarma. Acta Cybernetica 6, str. 355-360.