gpt4 book ai didi

java - 解析扑克游戏描述(由多个不同转换器生成)

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:22 26 4
gpt4 key购买 nike

对于一个业余爱好项目,我正在尝试编写一些扑克应用程序。它的部分功能是能够解析来自扑克论坛的消息和游戏描述。以下是消息示例的纯文本版本:

示例 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对象Game。我已经编写了一些带有大量正则表达式的代码。这段代码可以正确解析大约 70% 的测试,但是:

  • 维护起来确实很困难
  • 我想自学一些新的、很酷的东西。

那么,除了正则表达式之外,我还有哪些其他选择?我目前正在研究 ANTLR,但我不确定它是否是完成此任务的最佳选择。

最佳答案

ANTLR 绝对能满足您的要求。使用正则表达式进行语言处理非常脆弱,与使用 ANTLR 或类似工具相比,从一个版本到另一个版本的任何更改都更有可能破坏您的解释器。您可以做的就是编写一个词法分析器和一个基本解析器,然后可以通过更具体的解析器来扩展它们,以适应转换器之间的特定差异。

一旦您创建了词法分析器并知道您正在使用解析器做什么,在 ANTLR 中更改内容比在自己的解决方案中要快很多!我确实同意 ANTLR 文档不是最好的,但是第三方有大量关于 ANTLR 3 的优秀教程(对于任何特定问题,您都可以在这里获得很好的帮助)。

我个人的偏好是制作相当简单的词法分析器/解析器来输出 AST 树,然后手动编码一个树遍历器,该树遍历器按照解析器提供的方式遍历节点。有些人会争论在 ANTLR 中制作树行者,但我发现这比它的值(value)更困难和耗时(因为它基本上不可重复使用)。

可能需要一些时间来习惯创建一个好的语法文件的心态,但是一旦你完成了它并且你第一次需要修改或扩展某些东西时你会发现它是多么的好,这是非常令人满意的。 ;)

关于java - 解析扑克游戏描述(由多个不同转换器生成),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13569404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com