我们从正则表达式开始,但很快意识到这不容易扩展.
我们跳过了从ruby到c的语言,最后发现它是必须改变的算法.
我们选择了Boost :: Spirit并观察我们的速度在我们原始速度的10倍以上的订单上急剧上升.然后我们跳过java并且正在使用antlr为每个站点创建语法.这绝对是迄今为止最快的方法,它非常彻底,因为你确切地知道你在“完整”语法方面的立场.不幸的是,我花费了大量的时间来处理这些语法 – 它们的工作非常好,但还不完美.
无论如何,对于手头的问题有足够的背景 – 是否有任何“异国情调”或不太知名的解析技术,我不知道?我只知道lexing /解析语法和其他低级正则表达式/循环方法.
对于那些不熟悉扑克手历史的人,我会发布一个,这样你就能分辨出结构是什么.
Full Tilt Poker Game #12037626529: Table durrrr (heads up,deep) - $500/$1000 - Pot Limit Omaha Hi - 2:00:48 ET - 2009/05/05 Seat 1: durrrr ($196,456.50) Seat 2: Gus Hansen ($65,499) durrrr posts the small blind of $500 Gus Hansen posts the big blind of $1,000 The button is in seat #1 *** HOLE CARDS *** durrrr raises to $3,000 Gus Hansen raises to $9,000 durrrr calls $6,000 *** FLOP *** [3d 4d 7d] Gus Hansen has 15 seconds left to act Gus Hansen checks durrrr checks *** TURN *** [3d 4d 7d] [Jh] Gus Hansen checks durrrr checks *** RIVER *** [3d 4d 7d Jh] [Ah] Gus Hansen has 15 seconds left to act Gus Hansen checks durrrr has 15 seconds left to act 123stayfree (Observer): GUS I Now BRING U LUCK durrrr bets $7,600 Gus Hansen has 15 seconds left to act Gus Hansen has requested TIME Hernandez777 (Observer): Gus has the super-duper nuts Gus Hansen calls $7,600 Podobed45 (Observer): fluuuuuuuuuush *** SHOW DOWN *** durrrr shows [Kc 3s Qd As] two pair,Aces and Threes Gus Hansen mucks durrrr wins the pot ($33,199.50) with two pair,Aces and Threes *** SUMMARY *** Total pot $33,200 | Rake $0.50 Board: [3d 4d 7d Jh Ah] Seat 1: durrrr (small blind) collected ($33,199.50) Seat 2: Gus Hansen (big blind) mucked
我很清楚其他收集信息的方法(例如屏幕抓取和dll注入),但仍然需要将手历史转换为结构化数据,因此我只关注获取信息的方法,如正则表达式/语法…
我想如果我找不到什么东西,我将用ocamllex / ocamlyacc重写我们的语法.
更新
fyi:regexen的速度是~60手/秒,而语法处理600手/秒…数据全部整理后整个手被转换成xml …需要20-30个正则表达式(最后对于你想要解析的每个站点….语法方面的每个站点都有自己的语法,有大量的词法分析器/解析器规则(但它的代码大小仍然较小)
我确实有龙书,并一直在阅读它 – 这已经摒弃了我对使用ocamllex / ocamlyacc的兴趣….速度是这里游戏的名称..
解决方法
OCaml / F#是用于构建DSL的非常好的语言,在我看来,它比Java更适合于工作,主要是因为它非常容易创建和遍历表示为联合数据结构的AST.我推荐this tutorial,它演示了如何在F#中解析sql.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。