boost-spirit-qi相关内容
警告;而我试图将代码缩短到最低限度.我仍然需要包括很多内容,以确保提供所需的信息. 此代码,编译文件并运行会导致语法错误; name = simple_name [ qi::_val = qi::_1 ] | qualified_name [ qi::_val = qi::_1 ] ; 与此同时; name = qualified_name
..
我正在编写DSL,并使用Boost Spirit词法分析器标记我的输入.在我的语法中,我想要一个与此类似的规则(其中tok是词法分析器): header_block = tok.name >> ':' >> tok.stringval > ';' >> tok.description >> ':' >> tok.stringval > ';' ; 我不想为语言指定保留
..
这不会编译(下面的代码). 这里还有另一个问题,同样的错误.但是我不明白答案.我已经尝试过将qi :: eps插入位置-但没有成功. 我还尝试为使用的类型添加元函数(boost :: spirit :: raits :: is_container),但这也无济于事. 我还尝试使用相同的变体,其中包含我需要在所有地方使用的所有类型.同样的问题. 有人为词法分析器返回了doub
..
让我们考虑以下代码: #include #include #include #include #include #include #include na
..
我似乎在使用Boost Spirit时遇到了一些精神障碍,这是我无法企及的.我有一个需要处理的相当简单的语法,我想将这些值放入一个结构中,该结构包含std :: map作为其成员之一.配对的密钥名称是预先知道的,因此仅允许使用这些名称.地图中可能有一对多的键,可以按任何顺序排列,每个键的名称都通过qi进行了验证. 例如,语法看起来像这样. test .|*| a
..
以下SQL语法有两个问题: #define BOOST_SPIRIT_QI_DEBUG #include #include #include #include
..
让我们考虑以下代码: #include #include #include #include #include #include #include
..
我想递归地解析一个字符串并将结果存储在一个结构中.我写了一个可以处理一次迭代的解析器.输入的格式如下: 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'处停止.完整的代码如下.如何修改此代码,以便也将其
..
我想解析带有键入值的CSV文件.每列的类型都在标题中定义,例如: int double double int unsigned 12 1.3 23445 1 42 45 46 47 48 49 结果数据结构可能类似于此二维向量: using ColumnType = boost::variant, std
..
以下代码没有编译错误: /usr/include/boost/spirit/home/qi/detail/assign_to.hpp:153:20: error: no matching conversion for static_cast from 'const char' to 'boost::fusion::vector
..
我尝试使用qi::uint_parser().但这和qi::uint_一样.它们都匹配从0到std::numeric_limits::max()的整数. qi::uint_parser()是设计成这样的吗?我应该使用什么解析器来匹配从0到std::numeric_limits::max()的整数范围?谢谢. 解决方案 最简单的
..
我为标识符定义了一条规则:以字母字符开头,后跟任意数量的字母数字字符.当我直接解析为std::string而不是包含单个std::string的经过调整的结构时,我会得到不同的结果. 如果我的语法属性是std::string,则Qi会正确地将字符序列调整到其中.但是使用该结构时,仅存储第一个字符.我不太清楚为什么会这样. (请注意,如果该结构是“真正"适应的,或者是由Fusion inlin
..
在使用可变参数模板定义语法时,我面临着一个问题. 我首先定义了一些包含在某些结构(例如纬度,经度)中的简单语法,如下所示: #include #include #include #include
..
我正在尝试使用Boost Spirit库编写一个基本的OBJ文件加载器.尽管我使用标准std :: ifstreams使其工作,但我想知道是否可以使用内存映射文件对整个文件执行phrase_parse,因为它似乎提供了最佳性能,如我有以下代码,看起来似乎不错,但是当文件中有注释时,它就会中断.因此,我的问题是,如何使用Spririt忽略OBJ文件中以“#"开头的注释? struct vert
..
我一直在尝试将我在本科生编译器中编写的一些lex和yacc代码转换为精神代码,以学习精神,我发现了一个似乎无法弄清的段错误.我这样写词法分析器: namespace lex = boost::spirit::lex; enum Tokens { k_andTok = 1, k_def = 2, k_elihw = 3, k_elseTok = 4,
..
我有一个Qi语法定义,可用来解析输入.后来我有了一个Karma生成器,以与输入类似的方式输出. 这有可能吗?解析器语法似乎可以自动转换为生成器语法(??). #include #include #include
..
如果有结构: struct record { std::string type; std::string delimiter; uint32_t length; std::string name; record() { type = ""; delimite
..
我想写一个解析器(作为qi扩展名),可以使用 通过my_parser(p1, p2, ...),其中p1, p2, ...是qi解析器表达式. 实际上,我想实现一个best_match解析器,其作用与qi Alternative类似,但它不选择第一个匹配规则,而是选择“解释"大部分输入的规则. 给出两个规则simple_id = +(qi::alpha)和complex_id = si
..
最近,我一直在寻找一种替换字符串中的标记的方法,该方法本质上是查找并替换(但至少有一种其他方法可以解决该问题),并且看起来很平凡.我提供了几种可能的实现,但是从性能的角度来看,它们都不令人满意.最佳成就是每次迭代约50us.这种情况是理想的,字符串的大小从不增长,起初我忽略了不区分大小写的要求 这是 Coliru 上的代码 我的机器上的结果: Boost.Spirit符号结果:3421?=
..
我在业余时间开发自己的代码。最好在调试模式下。最近,当我试图构建发行版时,我得到了错误(运行时,输出: 1 \\\ 2\\\ 然后失败)。我找到了一段代码(下面),其中包含错误,并且我发现错误只发生在优化级别 -Os,-Ofast,-O2,-O3 但不是 -O,-O0,-O1,-Og 。在发布模式下,我受限于调试功能。错误的原因是什么? $ b #!/ usr / bin / env
..