2011-03-31 67 views
3

如何按以下規則生成所有模式:如何枚舉模式

#作爲分隔符,{和}表示選擇{和}之間的字符串。

例如:

Input: a string 
{a # b} c {d # e {f # g}} 

輸出應爲:

a c d 
b c d 
a c e f 
a c e g 

回答

0

首先,解析輸入字符串轉換成使用任何標準的分析算法的樹。上面的例子中的樹表現形式會是這樣的(C =串連,S =選擇)

C(S(a,b),C(c,S(d,C(e,S(f,g))))) 

現在然後實現遞歸地評估該樹的程序(或表情,你可以稱它爲)和作爲評估任何子表達式的結果返回字符串集。然後評價是這樣的

S(f,g) == "f", "g" 
C(e,S(f,g)) == "ef", "eg" 
S(d,C(e,S(f,g))) = "d", "ef", "eg" 
C(c,S(d,C(e,S(f,g)))) = "cd", "cef", "ceg" 
S(a,b) = "a", "b" 
C(S(a,b),C(c,S(d,C(e,S(f,g))))) = "acd", "bcd", "acef", "bcef", "aceg", "bceg" 

(順便說一下,你缺少從你的榜樣BCEF和建工)

評價規則是:

S(X,Y):評價X (X,Y):評估X和Y並形成從集合X中的一個字符串和集合Y中的一個字符串形成的所有級聯Y