【问题标题】:boost::spirit composing grammars from grammarsboost::spirit 从语法中组合语法
【发布时间】:2011-01-11 15:50:29
【问题描述】:

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

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

一个包含 50 多个(可能更多)规则(用于正确错误处理)的顶级语法听起来并不有趣(TMP 代码易变/编译缓慢,并提供无用的错误消息)。

【问题讨论】:

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


    【解决方案1】:

    从一个实际的程序简化,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;
        ...
    }
    

    【讨论】:

    • (+1) 是的,这正是我想要的:P,我有时间会试试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2011-03-05
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多