为常规语言构建常规语法

时间:2014-05-15 12:35:44

标签: regular-language

语言是由下一个条件定义的无限链。

条件:

1) The language chains may consist of symbols from the set {1,a,b}. 
2) The language chains always start from subchain '1a'.
3) Every languange chain has to include at least one subchain 'aa'.

例如:

1aa, 1abaa, 1aaab, 1aab1a, ... etc.

形式语言中的正则表达式似乎是这样的:1a((1 + b)* a)*(a(1 + b) a(1 + b + a)*

这种语言的正确语法是什么?

我想过很多方法,但对我来说似乎太复杂了。我猜这个解决方案也不正确。

G ({1,a,b}, {A,S}, P, S)
P:
S -> 1S|bS|aA
A -> 1A|bA|1a

1 个答案:

答案 0 :(得分:1)

正则表达式应该比你制作它更容易;怎么样:1a(1 + a + b)* aa(1 + a + b)*

鉴于此,常规语法也不算太差:

S := 1R
R := aT
T := 1T
T := bT
T := aU
U := 1T
U := bT
U := aV
V := 1V
V := aV
V := bV
V := 1
V := a
V := b

如果我没有犯下愚蠢的错误,应该这样做。