问题描述
根据正则式 ( a + b ) ∗ a a ( a + b ) ∗ b b ( a + b ) ∗ + ( a + b ) ∗ b b ( a + b ) ∗ a a ( a + b ) ∗ (a+b)^*aa(a+b)^*bb(a+b)^*+(a+b)^*bb(a+b)^*aa(a+b)^* (a+b)∗aa(a+b)∗bb(a+b)∗+(a+b)∗bb(a+b)∗aa(a+b)∗写出对应的右线性文法。
预备知识
根据正则式推导右线性文法,需要从左侧开始分解,规则为
- 对于 a X aX aX的形式,可以转换为 S → a X S\rightarrow aX S→aX
- 对于 ( a + b ) X (a+b)X (a+b)X的形式,可以转换为 S → a X ∣ b X S\rightarrow aX|bX S→aX∣bX
- 对于 a ∗ a^* a∗的形式,可以转换为 S → a S S\rightarrow aS S→aS
分析
设右线性文法 G = ( { S , A , B , C } , { a , b } , P , S ) G=(\{S,A,B,C\},\{a,b\},P,S) G=({S,A,B,C},{a,b},P,S),现推导其生成式的形式:
- 首先,形如
a
∗
a^*
a∗的形式,有
S
→
a
S
S\rightarrow aS
S→aS。则对于
(
a
+
b
)
∗
(a+b)^*
(a+b)∗有
S → a S ∣ b S S\rightarrow aS|bS S→aS∣bS由于题目中正则式由两部分相加而得,则对于 a a ( a + b ) ∗ b b ( a + b ) ∗ aa(a+b)^*bb(a+b)^* aa(a+b)∗bb(a+b)∗和 b b ( a + b ) ∗ a a ( a + b ) ∗ bb(a+b)^*aa(a+b)^* bb(a+b)∗aa(a+b)∗有 S → a a A ∣ b b B S\rightarrow aaA|bbB S→aaA∣bbB
其中 A = ( a + b ) ∗ b b ( a + b ) ∗ A=(a+b)^*bb(a+b)^* A=(a+b)∗bb(a+b)∗ B = ( a + b ) ∗ a a ( a + b ) ∗ B=(a+b)^*aa(a+b)^* B=(a+b)∗aa(a+b)∗ - 下面继续对正则式
A
A
A进行变换,依然是
a
∗
X
a^*X
a∗X的形式,则
A → a A ∣ b A A\rightarrow aA|bA A→aA∣bA对于 b b ( a + b ) ∗ bb(a+b)^* bb(a+b)∗这一部分
A → b b C A\rightarrow bbC A→bbC其中 C = ( a + b ) ∗ C=(a+b)^* C=(a+b)∗,易知
C → a C ∣ b C ∣ ε C\rightarrow aC|bC|\varepsilon C→aC∣bC∣ε - 对于
B
B
B同理,有
B → a B ∣ b B B\rightarrow aB|bB B→aB∣bB 以及
B → a a C B\rightarrow aaC B→aaC
综上,生成式 P P P的形式为
S → a S ∣ b S ∣ a a A ∣ b b B S\rightarrow aS|bS|aaA|bbB S→aS∣bS∣aaA∣bbB A → a A ∣ b A ∣ b b C A\rightarrow aA|bA|bbC A→aA∣bA∣bbC B → a B ∣ b B ∣ a a C B\rightarrow aB|bB|aaC B→aB∣bB∣aaC C → a C ∣ b C ∣ ε C\rightarrow aC|bC|\varepsilon C→aC∣bC∣ε