相关疑难解决方法(0)

提升精神:"语义行为是邪恶的"?

阅读和观看此演示文稿:http: //boost-spirit.com/home/2011/06/12/ast-construction-with-the-universal-tree/
我发现了这个陈述 - 基本上我们建议不要使用语义动作.

我必须承认,我已经感受到了类似的东西:具有语义行为的语法实际上看起来有点难看.而且,当我需要扩展/改变它们时,它完全采用语义动作进行了大量的"微观管理".在演示文稿中演示的具有属性语法的方法似乎更加优雅和有前途.

所以我想问:这是一个"官方"观点吗?我应该学习如何使用属性语法并更详细地避免语义动作吗?如果是这样 - 我想=要求一些基本的(甚至是微不足道的)例子,展示这样的方法 - LISP解释器太复杂了我不能咀嚼......

c++ boost-spirit boost-spirit-qi

21
推荐指数
1
解决办法
4726
查看次数

获取boost :: spirit :: qi以使用stl容器

我正在尝试用boost.spirit的qi库解析一些东西,而且我遇到了一个问题.根据精神文档,a >> b应该产生类型的东西tuple<A, B>.但这是一个boost::tuple(又名融合矢量),而不是std::tuple(我想要的).

有没有简单的方法在boost::tuple=> 之间进行这种转换std::tuple

相同的文档页面说明*a应该生成类型的东西vector<A>.这似乎产生了一种std::vector<A>(或某种boost::vector<A>可以隐含地转换为a std::vector<A>).我只是想知道元组是否有相同的行为.

boost boost-spirit boost-spirit-qi

6
推荐指数
1
解决办法
1357
查看次数

Boost Spirit Qi - 使用两个组件序列列出解析

我正在尝试为参数列表编写一个解析器,这将允许以下内容:

myFunc( arg0, arg1, namedArg0 = valueA, namedArg1 = valueB )
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我希望前两个参数解析为TypeA的实体,然后由std :: vector <TypeA>包含.后两个参数将解析为TypeB,它将由std :: vector <TypeB>包含.所有TypeA参数都应该在所有TypeB参数之前.但是我想从一个以逗号分隔的列表中解析所有内容.应该可以只有TypeA参数,只有TypeB参数或TypeA元素序列,后跟一系列TypeB元素.

我无法定义规则,以便将最终的TypeA参数与第一个TypeB参数分开的逗号不会被误认为是另一个TypeA参数的期望.

我目前的实施情况如下.任何人都可以就如何解决这个问题提出任何建议吗?

这里的关键区别是TypeA参数应该是单个符号,而TypeB参数应采用以下形式:symbol = symbol.

问题似乎与TypeA参数等同于TypeB参数的第一部分这一事实有关,因此使得TypeA序列的结尾不清楚?

谢谢!

struct Params
{
    std::vector<TypeA> a_elements;
    std::vector<TypeB> b_elements;

    Params(const std::vector<TypeA>& a_vec, const std::vector<TypeB>& b_vec)
    : a_elements( a_vec ), b_elements( b_vec ) {}

    static Params create(const std::vector<TypeA>& a_vec, const std::vector<TypeB>& b_vec)
    {
        return Params( a_vec, b_vec );
    }
};

struct ParamsParser : qi::grammar<Iterator, Params(), Skipper>
{
    qi::rule<Iterator, Params(), Skipper>                           start_rule;
    qi::rule<Iterator, std::vector<TypeA>(), Skipper>               type_a_vec_opt_rule;
    qi::rule<Iterator, std::vector<TypeB>(), Skipper> …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-spirit

3
推荐指数
1
解决办法
96
查看次数

标签 统计

boost-spirit ×3

boost ×2

boost-spirit-qi ×2

c++ ×2