對於一個愛好的項目,我嘗試寫一些撲克應用。它的一部分功能是能夠從遊戲描述中解析撲克論壇的信息。下面是消息實例純文本版本:解析撲克遊戲介紹(由多個不同的轉換器產生的)
實施例1對
$0.02/$0.05 No-Limit Hold'em (8 handed)
Known players:
BB: $1.70 UTG2: $13.05 MP1: $2.89 MP2: $2.64 MP3 (Hero): $5.28 CO
: $5.00 BU: $5.00 SB: $11.37
Preflop: Hero is MP3 with 8
[http://resources.pokerstrategy.com/smileys/heart.png], 8
[http://resources.pokerstrategy.com/smileys/club.png].
UTG2 folds, MP1 raises to $0.15, MP2 calls $0.15, Hero calls $0.15, CO folds,
BU calls $0.15, 2 folds, BB folds.
Flop: ($0.67) 8 [http://resources.pokerstrategy.com/smileys/diamond.png], K
[http://resources.pokerstrategy.com/smileys/club.png], 6
[http://resources.pokerstrategy.com/smileys/diamond.png] (4 players)
MP1 checks, MP2 checks, Hero bets $0.47, BU folds, MP1 folds, MP2 calls $0.47.
Turn: ($1.61) A [http://resources.pokerstrategy.com/smileys/club.png] (2
players)
MP2 checks, Hero checks.
River: ($1.61) Q [http://resources.pokerstrategy.com/smileys/club.png] (2
players)
MP2 bets $0.60, Hero raises to $2.10, MP2 calls $1.42.
Final Pot: $5.73.
實施例2
Grabbed by Holdem Manager <http://www.holdemmanager.net>
NL Holdem $0.05(BB) Replayer
SB ($5.02)
BB ($4.78)
UTG ($2)
UTG+1 ($2)
UTG+2 ($1.88)
MP1 ($5.32)
CO ($10.36) (21/18 на 109 рук, С-бет Ф=88%(11), С-бет Т=33%(3), АФ=2,6
(4,5/3,0/0,5), WTSD=41%, W$SD=71%)
Hero ($10.98)
Dealt to Hero 9 [http://resources.pokerstrategy.com/smileys/spade.png] T
[http://resources.pokerstrategy.com/smileys/spade.png]
UTG calls $0.05, fold, fold, fold, CO raises to $0.20, Hero calls $0.20,
fold, fold, fold
FLOP ($0.52) J [http://resources.pokerstrategy.com/smileys/club.png] 8
[http://resources.pokerstrategy.com/smileys/spade.png] 4
[http://resources.pokerstrategy.com/smileys/diamond.png]
CO bets $0.35, Hero calls $0.35
TURN ($1.22) J [http://resources.pokerstrategy.com/smileys/club.png] 8
[http://resources.pokerstrategy.com/smileys/spade.png] 4
[http://resources.pokerstrategy.com/smileys/diamond.png] 9
[http://resources.pokerstrategy.com/smileys/heart.png]
CO checks, Hero checks
RIVER ($1.22) J [http://resources.pokerstrategy.com/smileys/club.png] 8
[http://resources.pokerstrategy.com/smileys/spade.png] 4
[http://resources.pokerstrategy.com/smileys/diamond.png] 9
[http://resources.pokerstrategy.com/smileys/heart.png] 4
[http://resources.pokerstrategy.com/smileys/spade.png]
CO bets $1, Hero ???
基本上由兩個不同的轉換器產生的這兩個例子。目前大約有20種不同的轉換器。
我需要做的是能夠解析不同轉換器的這些遊戲描述,並將遊戲的文本描述「翻譯」爲java對象遊戲。我已經寫了很多正則表達式的代碼。此代碼可以正確地分析我的測試大約70%,但:
- 這真的很難保持
- 我想教我一些新的東西和冷靜。
那麼,什麼是我的正則表達式之外的其他選項?我目前正在研究ANTLR,但我不確定這是否是這項任務的最佳選擇。
ANTLR肯定會是一個很好的適合你的需求。但是,您可能必須爲每個不同的轉換器編寫一個語法文件。 – Thor84no
這正是我所害怕的。使用正則表達式,我可以編寫一些非常複雜的GeneralParser.java,但它適用於所有轉換器。我仍在研究ANTLR,但看不出如何爲那裏的所有轉換器創建一個語法。這是不好的,它更乾淨,無錯誤的解決方案,然後正則表達式,但爲清晰起見,它需要太多的努力。 – GrayR
感謝您的詳細評論。我必須同意你的觀點,即上下文無關語法方法比正則表達式更好。但我希望這裏有第三種方式。不過,如果我選擇這種方法並開始編寫語法,ANTLR是最好的工具嗎?我主要關心文檔。 ANTLR文檔第一眼看起來並不完整和完整,或者我正在爲他們尋找錯誤的地方。 – GrayR