CFG要正则表达

时间:2013-02-09 01:12:45

标签: context-free-grammar regular-language automata

这是语法,

S -> A | B

A -> 0000A | epsilon

B -> 000B | epsilon

我认为上面的正则表达式是

0000(0000)*000(000)* //因为0000和000至少会被发现一次。

这是对的吗?

有人告诉我,这个语法含糊不清。任何人都可以向我解释这个原因吗?

2 个答案:

答案 0 :(得分:2)

遵循语法(实际上是右线性语法

S -> A | B

A -> 0000A | epsilon

B -> 000B | epsilon 

您可以通过SA从起始变量B生成字符串,因此语法L(G)的语言是两种语言的联合(+)可以来自AB

生产:

A -> 0000A | epsilon    

生成(0000)*

并且

生产:

B -> 000B | epsilon     

生成(000)*

所以L(G)的正则表达式为:(000)* + (0000)*

note L(G)可以有空字符串。

答案 1 :(得分:1)

你的推理不正确。反例:空字符串是语言,但你的正则表达式不匹配。

就模棱两可而言,考虑一串12个零。从语法中可以得到多少种不同的方法?