boost::spirit 从语法中组合语法

发布于 2024-08-19 16:10:15 字数 382 浏览 7 评论 0原文

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

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

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

I have figured out how to use spirit -- i.e., I have written a moderately complex grammar. I always take the approach of growing a program -- one subsystem at a time. I've written the data structures for a complex model which has 4 types at the highest level.

I would like to use the grammar composed from rules approach to parse the top level types one type at a time -- i.e., I want to write 4 grammars with one top level grammar. If this is possible (which I am beginning to doubt), could someone please post a snippet or a reference to a project that does this.

One top level grammar with 50+ (possible a lot more) rules (for proper error handling) does not sound like fun (TMP code is volatile / slow to compile, and provides useless error messages).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

生生不灭 2024-08-26 16:10:15

从实际程序简化来看,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;
    ...
}

simplified from an actual program, Qi should work the same as 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;
    ...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文