我想構建一個撲克手動解析器,從而我可以提供一個字符串,例如以下(假設標準的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
我不知道該用於處理適合性的語法表達。
我是一個新手編程,所以請原諒這個基本的問題:這是一個語法歸納問題或解析問題?
感謝,
邁克
修正AK-ATo爲AKo-ATo ...好,趕快,謝謝。語法是否也需要做以下操作來識別每個「手」> 1「卡」: S =組合{','組合}。 組合=手['+'| ' - '手]。 Hand = Card {Card} ['s'|'o']。 Card =等級[顏色]。 – MikeRand 2010-07-14 01:23:04
啊,我忘了手中的第二張牌。我在我的帖子中修正了語法,以便每手可以(確切地)2張牌。 我不推薦使用卡{卡},因爲這意味着1和許多卡之間,所以基本上可以有1,3或5000卡在這樣的手中,我認爲這不是你想要的。 – chrischu 2010-07-14 07:51:44
那麼,一隻德州撲克手可能有2張牌,一隻手牌可能有3張牌,奧馬哈手可能有4張牌,而一隻手可能有5張牌。也許有一種比Card Card {Card}更明智的方式來展示這一點(即HoldEmHand,StudHand,OmahaHand是三種不同的非終端作品)。也許卡卡[卡] [卡] [卡] ['s'|'o']? – MikeRand 2010-07-14 10:21:31