Context Free Grammars和C ++

时间:2016-09-10 07:18:55

标签: c++ oop parsing context-free-grammar lexical-analysis

我想知道如何创建一个用于输入的平台,这些平台是来自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 ++创建这样的平台/程序?

1 个答案:

答案 0 :(得分:1)

因此,您必须为此类语法实现解析器。如果你的语法足够简单,你可以hand-write作为递归下降解析器,or write a simple LR(k) parser generator in C++如果你真的想使用可以作为输入给出的无上下文语法(尽管只需要它) ,如果你需要在运行程序时修改语法,甚至可能需要!)。

当然,如果你想生成 C ++,你可以使用解析器生成器,流行的选择是GNU的bisonflex。另一个选项选项是用一些C ++库编写解析器,例如boost's spirit,然后接受这些移动作为输入。