51得票1回答
提高Spirit语义动作参数

在这篇关于Boost Spirit语义动作的文章中提到:实际上还有两个参数被传递:解析器上下文和一个布尔类型的“hit”参数的引用。只有当语义动作附加到规则的右侧时,解析器上下文才有意义。我们很快就会看到更多相关信息。布尔值可以在语义动作内设置为false,这样会回溯地使匹配无效,从而使解析器...

24得票1回答
Boost Spirit: “语义动作是邪恶的”?

阅读并观看此演示文稿:http://boost-spirit.com/home/2011/06/12/ast-construction-with-the-universal-tree/我发现了这个声明--基本上我们建议不使用语义操作。 我必须承认,我已经有过这样的感受:带有语义动作的语法实际...

22得票1回答
是否可以在另一个语法定义中重复使用boost::spirit::qi语法?

能否在另一个语法中重用 boost::spirit:qi 语法(例如作为规则)? 例如,如果我定义了一个语法,将一行文本解析成一个包含街道地址的结构体,是否可以重复使用它? template< typename iter > struct address_gr...

15得票1回答
如何对Boost Spirit Parser进行基准测试?

我正在开发一个编译器,希望提高其性能。我发现约50%的时间用于解析源文件。由于源文件非常小,而且在此之后我进行了许多转换,所以我认为它是可以改进的。 我的解析器是使用Boost Spirit解析器和词法分析器(使用lexer :: pos_iterator)构建的,并且我有一个中等规模的语法...

15得票1回答
运行时动态组合Boost.Spirit.Qi规则(任意数量的备选项)

我想知道在 Boost.Spirit.Qi 中是否有一种方法可以在运行时动态组合任意数量的规则。Boost.Spirit 的内部工作方式对我来说仍然有些神秘,但由于规则是以对象的形式实现的,因此似乎是可行的。我的动机是使语法中的某些部分易于扩展。 考虑以下人为的例子:namespace qi...

12得票1回答
Boost.Spirit.Qi:如何使用Nabialek技巧返回属性

在参考了多个教程后(例如 http://boost-spirit.com/home/articles/qi-example/nabialek-trick/),我想使用Nabialek技巧实现动态解析器。解析已经很好的实现了,但是我无法传递属性。像https://dev59.com/4m025I...

11得票1回答
boost::spirit如何从语义动作中访问位置迭代器

假设我有如下代码(行号仅供参考):1: 2:function FuncName_1 { 3: var Var_1 = 3; 4: var Var_2 = 4; 5: ... 我想编写一个语法分析器,可以解析这样的文本,将所有标识符(函数和变量名)信息放入一棵树(utree?...

10得票1回答
BOOST_FUSION_ADAPT_STRUCT没有使用正确数量的参数。

我正在使用Boost::Spirit将一些文本解析为结构体。这需要使用BOOST_FUSION_ADAPT_STRUCT来解析文本并直接存储到结构中。我知道这个宏需要2个参数:第一个参数是结构体名称,第二个参数是所有结构体成员。我已经传递了这两个参数,但是编译时出现了错误:error: mac...

9得票1回答
如何在不跳过行尾的情况下使用跳过器ascii :: space?

我需要使用boost::spirit进行解析,我想使用phrase_parse函数: qi::phrase_parse(str.begin(), str.end(), grammar, ascii::space - qi::eol); 但是第四个术语(ascii::space - qi...

9得票1回答
使用Boost Spirit(longest_d)解析int或double

我正在寻找一种将字符串解析为整数或双精度浮点数的方法,解析器应该尝试两个方案,并选择匹配输入流最长部分的方案。 有一个已弃用的指令(longest_d)正是我需要的: number = longest_d[ integer | real ]; 由于它已被弃用,是否有其他替代方案?如果需...