具有至少一个Kleene星的无上下文语法

时间:2014-06-15 10:47:50

标签: regex grammar kleene-star

我正在尝试创建无上下文语法,它在{a,b}上生成所有正则表达式,至少有一个Kleene星。到目前为止我所做的是:

S ::= A + S | A
A ::= B . A | B
B ::= T | B* | (S)
T ::= a | b | eps

我想这可以生成所有正则表达式,但我无法理解的是如何定义它以便至少有一个Kleene星需要在该表达式中。

1 个答案:

答案 0 :(得分:1)

问题是状态机的典型问题,其中存在初始状态,并且通过"传递"州。解决方案是使右侧对应于每个状态。我将使用数字2表示代表传递状态的规则。

S  ::= S2

S2 ::= A + S2 | A2 + S1 | A2
A2 ::= B2 . A | B . A2 | B2
B2 ::= B* | (S2)

S1 ::= A + S1 | A
A  ::= B . A | B
B  ::= T | B* | (S1)
T  ::= a | b | eps

传递表达式是根据传递子表达式定义的。因此,语法将始终在表达式的左侧或右侧生成闭包。