boost :: spirit组成语法的语法

时间:2010-02-01 09:54:37

标签: c++ parsing boost-spirit recursive-descent tmp

我已经想出如何使用精神 - 也就是说,我写了一个中等复杂的语法。我总是采用增长程序的方法 - 一次一个子系统。我已经为复杂模型编写了数据结构,该模型在最高级别有4种类型。

我想使用grammar composed from rules approach一次解析一种类型的顶级类型 - 即,我想用一个顶级语法编​​写4个语法。如果这是可能的(我开始怀疑),有人可以发布片段或对这样做的项目的引用。

一个具有50+(可能更多)规则的顶级语法(用于正确的错误处理)听起来不是很有趣(TMP代码易于编译或编译速度慢,并提供无用的错误消息)。

1 个答案:

答案 0 :(得分:11)

从实际程序简化, Qi 应与 Karma 相同。

template<class Iter>
struct subgrammar_1
: karma::grammar<Iter, ...>
{
    ...
}

template<class Iter>
struct top_level_grammar
: karma::grammar<Iter, ...>
{
    top_level_grammar() : top_level_grammar::base_type(start)
    {
        start %= r1 | r2;
    }
    karma::rule<Iter, ...> r1;
    subgrammar_1<Iter> r2;
    ...
}