簡體   English   中英

撲克手范圍解析器......如何編寫語法?

[英]Poker hand range parser … how do I write the grammar?

我想構建一個撲克手范圍解析器,我可以提供如下字符串(假設標准的52張牌,排名為2-A,s =適合,o = offsuit):

"22+,A2s+,AKo-ATo,7d6d"

解析器應該能夠生成以下組合:

6 combinations for each of 22, 33, 44, 55, 66, 77, 88, 99, TT, JJ, KK, QQ, AA
4 combinations for each of A2s, A3s, A4s, A5s, A6s, A7s, A8s, A9s, ATs, AJs, AQs, AKs
12 combinations for each of ATo, AJo, AQo, AKo
1 combination of 7(diamonds)6(diamonds)

我想我知道語法的一部分,但不是全部:

NM+ --> NM, N[M+1], ... ,N[N-1]
NN+ --> NN, [N+1][N+1], ... ,TT where T is the top rank of the deck (e.g. Ace)
NP - NM --> NM, N[M+1], ... ,NP
MM - NN --> NN, [N+1][N+1], ..., MM

我不知道處理適合性的語法表達式。

我是一個編程新手,所以請原諒這個基本問題:這是語法歸納問題還是解析問題?

謝謝,

麥克風

那么你應該看看EBNF以廣泛接受的方式展示你的語法。

我認為它看起來像這樣:

S = Combination { ',' Combination } .
Combination = Hand ['+' | '-' Hand] . 
Hand = Card Card ["s" | "o"] .
Card = rank [ color ] .

其中{}表示0或更多出現,[]表示0或1出現和| 意味着什么是剩下的 或者什么是權利。

所以基本上歸結為起始符號(S)表示解析器必須處理從1到任何數量的組合,這些組合都被“,”分隔。

這些組合包括卡的描述,然后是“+”,“ - ”和另一張卡片描述或什么都沒有。

卡片描述包括等級和可選的顏色(黑桃,心臟等)。 等級和顏色未大寫的事實表明它們不能進一步划分為子部分(使它們成為終端類)。

我的例子沒有提供offsuite / suite的可能性,這主要是因為在你的例子中,一次o / s出現在最后的“AK-ATo”和一次中間的“A2s +”。

這些示例是您自己的創作還是從外部來源提供給您(請參閱:您無法更改它們)?

如果你可以改變它們,我強烈建議把它們放在一個組合的一個指定位置(例如在最后),以便創建語法,最終解析更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM