如何从这个正则表达式派生常规语法?
(a or b)*ba(ba)*
我坚持最后一部分 所以
S -> A | B | C
A -> aA | bA
B -> bC
C -> cD
D->bE ?
E->af | ^ ?
任何帮助将不胜感激!
答案 0 :(得分:0)
(a + b)* b a (b a)*
最初的(a + b)*
提供了三种可能性:它可以扩展为a (a + b)*
,也可以扩展为b (a + b)*
,或者可以为空:
a (a + b)* b a (b a)*
= aS b (a + b)* b a (b a)*
= bS b a (b a)*
= A 对于 A ,初始b a
完全受约束,所以我们必须写一下:
b a (b a)*
= bB a (b a)*
= aC 对于 C ,(b a)*
提供了两种可能性:它可以扩展为b a (b a)*
,也可以为空:
b a (b a)*
= bB (使用a (b a)*
与我们已经定义的非终端匹配的事实。如果失败了,我们可以写一下:
b a (b a)*
= bD a (b a)*
= aC )
把它放在一起: