Une approche pratique qui, dans de nombreux exemples, fonctionne [mais pas toujours, je sais] essaie de trouver la structure d'imbrication des chaînes dans le langage. Les "dépendances imbriquées" doivent être générées en même temps dans différentes parties de la chaîne.
Nous avons également la boîte à outils de base :
concaténation: si vous pouvez diviser la langue en deux parties consécutives utilisez cette productionS→S1S2
union: divisé en parties disjointesS→S1∣S2
itération:S→S1S∣ε
Exemple 1
Voici un exemple pour la nidification (merci Raphael).
L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
Remplacez par . Nous pouvons maintenant déposer dans des conditions.n2ln
Remplacez par (confus? est «oh» et non «zéro»). Appliquer des outils pour l'union. Nous travaillons avec ici. Aussi ssi k = s + o et s > 0 où s est une nouvelle variable. Remplacez k par s + o .k > o ou k < o o k > o k > ok≠ok>o or k<ook>ok>ok=s+os>0sks+o
L1={bs+oal(bc)ma2lbo∣l,m,o,s∈N,s>0,m≥2}
Quelques réécritures simples.
L1={bbsboalbcbc(bc)m(aa)lbo∣l,m,o,s∈N}
Nous voyons maintenant la structure d'imbrication et commençons à construire une grammaire.
, T → b U , U → b U ∣ ε (voir: concaténation et itération ici)S1→TVT→bUU→bU∣ε
(nous générons des o b des deux côtés)V→bVb∣Wo b
W→aWaa∣X
, Y → b c b c , Z → b c Z ∣ εX→YZY→bcbcZ→bcZ∣ε
Exemple 2
K={akblcm∣l=m+k}
Une première réécriture "évidente".
K={akbm+kcm∣m,k≥0}={akbmbkcm∣m,k≥0}
Dans le linguistice, cela s'appelle la «dépendance inter-série»: l'entrelacement (généralement) indique fortement l'absence de non-contexte. Bien sûr, m + k = k + m et nous sommes sauvés.k,m,k,mm+k=k+m
K={akbk+mcm∣m,k≥0}={akbkbmcm∣m,k≥0}
avec productions , X → a X b ∣ ε , Y → b Y c ∣ εS→XYX→aXb∣εY→bYc∣ε
De même K′={akblcm∣m=k+l}={akblclck∣k,l≥0}
avec productions , X → b X c ∣ εS→aSc∣XX→bXc∣ε
Commentaire final: ces techniques vous aident à trouver une grammaire sans contexte candidate qui, nous l'espérons, reconnaîtra votre langue. Une preuve d'exactitude peut encore être nécessaire, pour garantir que la grammaire fonctionne vraiment pour reconnaître votre langue (ni plus ni moins).