2010-12-20 20 views
1

私はこの言語を生成する文脈自由文法を設計しています:文脈自由文法と逆転

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

私は、最初の2つの文字列を定義します

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

し、それらを組み合わせて:

S -> UV 

しかし、どのように文脈自由文法として反転を表現するのですか?

あなたは文法の文脈自由ネスを利用するために必要

答えて

2

(あなたがこれまでに提示していることがちょうど正規文法である):

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

は「アベバ」のようなものにマッチしますと " aabaa "ではなく" aabba "である。

これをあなたのニーズに合わせて変更しておきますが、指定した言語はuという空文字列である可能性があるので、{a,b}*にすべての文字列を生成します。

+0

この件に関する私の知識はまだありません。このことについて読んでいるうちに、あなたが投稿したものと全く同じ解決策を見つけましたが、それをあまり理解していません。 "ababa"は例えば文法の1行だけで、u = "ab" v = "a"とu^R = "ba"に分割されますか? – mjuopperi

+0

@ Gawwad: "ababa"の構文解析は、 "aUa" - > "a {bUb} a" - > "a {b {a} b} a"です。 –

+0

あなたがより慎重に投稿した解決策を読んで、私は自分自身でそれを解決することができました。私は有限オートマトンと正規表現を使っていましたので、最初はこれらの作業が本当に奇妙に見えました。ご協力ありがとうございました! – mjuopperi

関連する問題