我想知道如何创建一个用于输入的平台,这些平台是来自C ++中的上下文无关语法(CFG)的语句。出于示例性目的,假设CFG指示扑克移动。所以move语句的一般形式是
move statement -> PLAYER_ID MOVE_ID MOVE
,其中
PLAYER_ID -> INTEGER
MOVE_ID -> INTEGER
MOVE -> CHECK | RAISE | CALL | FOLD
RAISE -> "raise by " INTEGER
我想构建一个平台(可以作为一个类实现),它接收某个移动语句并输出,例如,游戏的当前状态。
如何用C ++创建这样的平台/程序?
答案 0 :(得分:1)
因此,您必须为此类语法实现解析器。如果你的语法足够简单,你可以hand-write作为递归下降解析器,or write a simple LR(k) parser generator in C++如果你真的想使用可以作为输入给出的无上下文语法(尽管只需要它) ,如果你需要在运行程序时修改语法,甚至可能需要!)。
当然,如果你想生成 C ++,你可以使用解析器生成器,流行的选择是GNU的bison和flex。另一个选项选项是用一些C ++库编写解析器,例如boost's spirit,然后接受这些移动作为输入。