c++ - boost::spirit 从语法中组合语法

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

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

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

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

最佳答案

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

关于c++ - boost::spirit 从语法中组合语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2175808/

相关文章:

C++/OpenGL | "undefined reference to ` _imp__ChoosePixelFormat@ 8`"等等

c++ - Qt 冰箱磁铁示例中的重叠标签

c++ - boost::spirit::lex 和空格的问题

c++ - 无法访问属性 C++

c++ - 在代码(.c 文件)中我如何找到 linux 发行版名称版本

python - lxml.html 使用 XPath 和变量解析

JavaScript 无法解析 JSON

regex - 谷歌表格: Parse date from text

boost-spirit - 增强 qi::rule 上的精神语义 Action

c++ - Boost::spirit 解析一个 float 并格式化它?