2010-12-20 6 views
1

Je suis la conception d'une grammaire hors-contexte pour générer cette langue:grammaire hors-contexte et inversion

{ w in {a,b}* | w is of the form uvu^R, where u and v are any strings in {a,b}* } 

Je définirais les deux premières chaînes comme:

U -> aU | bU | _ 
V -> aV | bV | _ 

Et puis combiner les :

S -> UV 

Mais comment exprimer l'inversion comme une grammaire sans contexte?

Répondre

2

Vous devez utiliser le contexte sans-ness de la grammaire (ce que vous présentez est à ce jour juste une grammaire régulière):

U-> aUa | bUb | a | b | _ 

correspondra à des choses comme « abeba » et " aabaa ", mais pas" aabba ".

Je vous laisse le soin de modifier cela selon vos besoins - mais gardez à l'esprit que la langue spécifiée a la possibilité de u étant la chaîne vide, donc elle génère toutes les chaînes dans {a,b}*.

+0

Excusez ma petite connaissance dans ce sujet pour le moment. En lisant à ce sujet, je suis tombé sur une solution identique à celle que vous avez postée mais que je ne comprends pas très bien. Est-ce que "ababa" serait par exemple divisé de sorte que u = "ab" v = "a" et u^R = "ba" avec juste une ligne de grammaire? – mjuopperi

+0

@Gawwad: L'analyse, étant donné cette grammaire, pour "ababa" serait: '" aUa "->" a {bUb} a "->" a {b {a} b} a "'. –

+0

En lisant la solution que vous avez postée avec plus de soin, j'ai été capable de le faire moi-même. J'ai travaillé avec des automates finis et regex toute la journée, donc la façon dont ces travaux semblaient vraiment étranges au début. Merci de votre aide! – mjuopperi