boost-spirit-qi相关内容

有没有一种方法可以将spirit :: lex字符串标记的内容匹配为Spirit :: qi语法中的文字

我正在编写DSL,并使用Boost Spirit词法分析器标记我的输入.在我的语法中,我想要一个与此类似的规则(其中tok是词法分析器): header_block = tok.name >> ':' >> tok.stringval > ';' >> tok.description >> ':' >> tok.stringval > ';' ; 我不想为语言指定保留 ..
发布时间:2020-07-18 20:45:56 C/C++开发

无法获得boost :: spirit解析器和词法分析器,用于除std :: string或int或double以外的令牌类型

这不会编译(下面的代码). 这里还有另一个问题,同样的错误.但是我不明白答案.我已经尝试过将qi :: eps插入位置-但没有成功. 我还尝试为使用的类型添加元函数(boost :: spirit :: raits :: is_container),但这也无济于事. 我还尝试使用相同的变体,其中包含我需要在所有地方使用的所有类型.同样的问题. 有人为词法分析器返回了doub ..
发布时间:2020-07-18 20:45:44 C/C++开发

无法获取Boost Spirit语法为std :: map<>使用已知键

我似乎在使用Boost Spirit时遇到了一些精神障碍,这是我无法企及的.我有一个需要处理的相当简单的语法,我想将这些值放入一个结构中,该结构包含std :: map作为其成员之一.配对的密钥名称是预先知道的,因此仅允许使用这些名称.地图中可能有一对多的键,可以按任何顺序排列,每个键的名称都通过qi进行了验证. 例如,语法看起来像这样. test .|*| a ..
发布时间:2020-07-18 20:45:34 C/C++开发

解析为多个向量成员

我想递归地解析一个字符串并将结果存储在一个结构中.我写了一个可以处理一次迭代的解析器.输入的格式如下: v 1.5 2.0 2.5 v 3.0 3.5 4.0 f 1 2 3 f 4 5 6 v 4.5 5.0 5.5 v 6.0 6.5 7.0 f 7 8 9 f 10 11 12 问题在于它仅解析前4行,在遇到的第三个'v'处停止.完整的代码如下.如何修改此代码,以便也将其 ..
发布时间:2020-07-14 02:07:13 C/C++开发

为什么Boost.Spirit可以正确地将标识符解析为std :: string而不是解析为仅由std :: string组成的适应结构?

我为标识符定义了一条规则:以字母字符开头,后跟任意数量的字母数字字符.当我直接解析为std::string而不是包含单个std::string的经过调整的结构时,我会得到不同的结果. 如果我的语法属性是std::string,则Qi会正确地将字符序列调整到其中.但是使用该结构时,仅存储第一个字符.我不太清楚为什么会这样. (请注意,如果该结构是“真正"适应的,或者是由Fusion inlin ..
发布时间:2020-05-25 01:27:05 C/C++开发

带有Boost Spirit的OBJ解析器-忽略评论

我正在尝试使用Boost Spirit库编写一个基本的OBJ文件加载器.尽管我使用标准std :: ifstreams使其工作,但我想知道是否可以使用内存映射文件对整个文件执行phrase_parse,因为它似乎提供了最佳性能,如我有以下代码,看起来似乎不错,但是当文件中有注释时,它就会中断.因此,我的问题是,如何使用Spririt忽略OBJ文件中以“#"开头的注释? struct vert ..
发布时间:2020-05-25 01:18:23 C/C++开发

在解析器中提升Spirit Segfault

我一直在尝试将我在本科生编译器中编写的一些lex和yacc代码转换为精神代码,以学习精神,我发现了一个似乎无法弄清的段错误.我这样写词法分析器: namespace lex = boost::spirit::lex; enum Tokens { k_andTok = 1, k_def = 2, k_elihw = 3, k_elseTok = 4, ..
发布时间:2020-05-25 01:17:40 C/C++开发

Spirit-Qi:如何编写非终端解析器?

我想写一个解析器(作为qi扩展名),可以使用 通过my_parser(p1, p2, ...),其中p1, p2, ...是qi解析器表达式. 实际上,我想实现一个best_match解析器,其作用与qi Alternative类似,但它不选择第一个匹配规则,而是选择“解释"大部分输入的规则. 给出两个规则simple_id = +(qi::alpha)和complex_id = si ..
发布时间:2020-05-25 00:10:57 C/C++开发

在C ++中寻找搜索和替换的圣杯

最近,我一直在寻找一种替换字符串中的标记的方法,该方法本质上是查找并替换(但至少有一种其他方法可以解决该问题),并且看起来很平凡.我提供了几种可能的实现,但是从性能的角度来看,它们都不令人满意.最佳成就是每次迭代约50us.这种情况是理想的,字符串的大小从不增长,起初我忽略了不区分大小写的要求 这是 Coliru 上的代码 我的机器上的结果: Boost.Spirit符号结果:3421?= ..
发布时间:2020-05-09 19:24:56 C/C++开发

提升精神V2 qi与优化级别相关的bug

我在业余时间开发自己的代码。最好在调试模式下。最近,当我试图构建发行版时,我得到了错误(运行时,输出: 1 \\\ 2\\\ 然后失败)。我找到了一段代码(下面),其中包含错误,并且我发现错误只发生在优化级别 -Os,-Ofast,-O2,-O3 但不是 -O,-O0,-O1,-Og 。在发布模式下,我受限于调试功能。错误的原因是什么? $ b #!/ usr / bin / env ..