2016-09-10 20 views
-1

私はC++の文脈自由文法(CFG)の文である入力を受け入れるためのプラットフォームをどのように作成するのだろうと思っていました。典型的な目的のために、CFGがポーカーの動きを示すと仮定する。だから、MOVE文の一般的な形式は文脈自由文法とC++

move statement -> PLAYER_ID MOVE_ID MOVE 

だろうどこ

PLAYER_ID -> INTEGER 
MOVE_ID -> INTEGER 
MOVE -> CHECK | RAISE | CALL | FOLD 
RAISE -> "raise by " INTEGER 

私は(クラスとして実装することができる)例えば、特定のMOVE文と出力を受け取り、そのプラットフォームを構築したいです、ゲームの現在の状態。

C++でこのようなプラットフォーム/プログラムを作成するにはどうすればよいですか?

答えて

1

したがって、このような文法のためのパーサーを実装する必要があります。文法が単純であればを再帰的な降下構文解析プログラムとして使用することができます。入力として与えられる文脈自由文法を実際に使用したい場合はor write a simple LR(k) parser generator in C++が必要です(ただし、これは必要な場合にのみ必要ですプログラムの実行中に文法を変更する!)。

あなたが にしたい場合は、 C++を生成する代わりに、人気のある選択肢は、GNUの bisonflexですパーサジェネレータを使用する場合があります。もちろん、

。もう1つのオプションオプションは、たとえば、boost's spiritのようないくつかのC++ライブラリをパーサーに書き込んだ後、入力などの移動を受け入れることです。

+0

「手書き」を明確にするために編集されています。 Boostは一般的なC++ライブラリであり、C++の標準ライブラリのいくつかは最初にboostによって開発され、その後標準に統合されました。これは標準ではない(したがってSTLの一部でもない)精神の場合ではありませんが、インストールが容易で、多くの開発者がそれを使用することを選択します。使い方が簡単で、ポーカーの動きを解析するなどの良いオプションがあります。 – paulotorrens

+0

私はあなたが行きたいと思う方法を確かめる必要があります。あなたが言ったように、あなたはあなたがしようとしていることを正確に説明しなかったので、私はあなたに複数の方法を導く一般的な答えを与えました。 C++の場合、ブーストは一般的な解決策です[そしてこれは紹介です](http://www.codeproject.com/Articles/20027/JSON-Spirit-A-C-JSON-Parser-Generator-Implemented)。別の一般的な選択肢は、バイソンとフレックスでパーサを生成することです(これは簡単な例です)(http://www.jonathanbeard.io/tutorials/FlexBisonC++)。私は、 'strtok()はあなたが尋ねたことに対して適切な解決策ではないと言わなければなりません。 – paulotorrens

関連する問題