首页 > TAG信息列表 > boost-spirit-qi
c-使用Spirit Qi解析为std :: vector,获取段错误或断言失败
我使用Spirit Qi作为解析器,将数学表达式解析为表达式树.我跟踪诸如在解析时遇到的符号类型之类的事情,这些符号必须在要解析的文本中声明.即,我正在解析Bertini input files,为简化起见,其简单示例为here,复杂示例为here,如下所示: %input: our first input file variable_groupc-使用boost Spririt解析带有二进制信封的文本文件
我目前正在尝试为一个ASCII文本文件编写一个解析器,该文件被带有校验和的小信封包围. 文件的基本结构是:< 0x02><“文件有效载荷”< 0x03>< 16bit CRC> 我想将有效负载提取到另一个字符串中以将其提供给 下一个解析器. 我用来解析此信封的解析器表达式是: qi::phrase_parse( firc – 提升精神报告语义错误
我正在使用boost.spirit库,我无法通过语义操作报告一个简单的错误消息. // supported parameter types (int or quoted strings) parameter = bsqi::int_ | bsqi::lexeme[L'"' > *(bsqi_coding::char_ - L'"') > L'"']; parameter.name("paramc – 无法使用Boost Spirit语法来使用std :: map <>的已知键
我似乎正在经历一些带有提升精神的精神障碍,我无法忍受.我有一个相当简单的语法,我需要处理,我想将值放入一个结构,包含一个std :: map<>作为其中一个成员.这些对的关键名称是预先知道的,因此只允许使用这些名称.地图中可以有一对多的按键,按任意顺序通过qi验证每个按键名称. 作为c – 提升精神QI慢
我尝试使用Boost Spirit QI解析TPCH文件. 我的实现灵感来自Spirit QI(http://www.boost.org/doc/libs/1_52_0/libs/spirit/example/qi/employee.cpp)的员工示例.数据采用csv格式,令牌以“|”分隔.字符. 它工作但很慢(1秒时为20秒). 这是我对lineitem文件的qi语法: struct lineitemc – 提升精神还原解析
我想解析包含以下结构的文件: some garbage *&% section1 { section_content } section2 { section_content } 规则解析section_name1 {…} section_name2 {…}已经定义: section_name_rule = lexeme[+char_("A-Za-z0-9_")]; section = section_name_rule > lit("{&c – Boost.Spirit.Qi:在分析时动态创建“差异”解析器
二元 – (减号)运算符可以创建“差异”解析器: rule = qi::char_ - qi::lit("}}") 甚至复合差异: rule = qi::char_ - qi::lit("}}") - qi::lit("]]") 但是如何在解析时生成差异解析器的整个结果呢? 我猜这可能是某种形式,如下所示: phoenix::function<difference_parser_impl> dic – 在Spirit中构建自定义表达式树:Qi(不使用Utree或Boost :: Variant)
首先,如果使用Boost Variant或Utree更容易,那么我将与他们达成和解,我将尝试在另一个主题中解决我们的问题.但是,我非常希望能够像下面一样构建一棵树. 背景,如果你想直接讨论这个问题,请忽略:我希望能够构建一个解析像 "({a} == 0) && ({b} > 5)" 或标准的数学表达式 "(2 * a) +c – 来自语义动作的boost :: spirit访问位置迭代器
可以说我有这样的代码(行号作为参考): 1: 2:function FuncName_1 { 3: var Var_1 = 3; 4: var Var_2 = 4; 5: ... 我想编写一个语法来解析这样的文本,将所有的标识符(函数和变量名)信息放入一个树(utree?). 每个节点应保留:line_num,column_num和符号值.例: root: FuncNamc – 使用单成员结构的Spirit Qi属性传播问题
我有一个关于Spirit Qi的编译问题,它抱怨value_type不是标识符的成员.出于某种原因,Qi的属性系统将标识符视为容器类型,并尝试枚举它的值类型. 这与this question中的问题类似,但是,我认为原因是单个成员结构,可能与此bug有关. #include <string> #include <boost/spirit/include/c – 将解析器分配给自动变量
灵魂解析器不打算与auto一起使用吗? 一个简单的解析器在传递给qi :: parse()内联时工作正常,但如果通过auto变量传递则崩溃为segfault: #include <cstdio> #include <string> #include <boost/spirit/include/qi.hpp> using namespace std; namespace qi = boost::spirit::qi; inc – 使用Boost.spirit解析一个简单的重复文本宏
我正在学习如何使用Boost.Spirit库来解析字符串.它似乎是一个非常好的工具,但也很难.所以,我想用一些用/分隔的单词解析一个字符串,并将它们放在一个字符串向量中.这是一个例子:word1 / word2 / word3.这是一个简单的任务,我可以通过以下结果执行此操作: bool r = phrase_parse(firsc – 当某些结构字段被省略或与结构声明中的顺序不一样时,如何实现正确的解析?
所以我有一个解析器,它将7.5 * [someAlphanumStr]或7.5 [someAlphanumStr]等字符串解析为此结构: struct summand { float factor; std::string name; summand(const float & f):factor(f), name(""){} summand(const std::string & n):factor(1.0f), name(n){}c – 提升精神气:在Kleene Star解析器中省略元素
我想解析特殊结构并将其余部分抛弃.但我不想使用船长. 我想获得这些结构的向量,所以我使用Kleene Star解析器作为主要规则.但是,每次丢弃某些东西时,都会在向量中插入一个默认的构造元素. 这是一个组成的例子.它只是寻找字符串Test并将其余部分抛弃,至少这是计划.但每次规则垃圾成c – 语法平衡问题
是否有可能强制Boost.Spirit Qi以这种方式运行,生成的语法可以根据一些运行时可计算的条件/规则/速率进行调整?例如,输入由语言构造组成,这些构造在解析期间导致不同的替代方案,一些更频繁,另一些 – 更少.但是替代方案的顺序影响效率,即语法的运行时最优性.在某些情况下,不可能事先c – Boost.Spirit使用基数将字符串解析为数字
我有一个模板函数,它将字符串转换为数字如下: template <typename RetType, typename Parser = typename boost::spirit::traits::create_parser<RetType>::type> inline std::enable_if_t<std::is_arithmetic<RetType>::value, RetType> cast(const stdc – 请求解析器语法,使用boost spirit qi更好
我试图使用boost :: spirit :: qi来解析表达式. 表达很简单,也可以 > id,像x >对象的成员,如obj.x.>数组的元素,如arr [2]>函数调用的结果. func(x,y) 对象的成员可以是数组或函数类型x.y [2],x.y()是合法的. 函数结果可能是数组或对象所以func(x,y).value,func(x)[4]也是合法的.c – Boost精神语法匹配嘈杂的输入
我试图解析一个嘈杂的输入,理想情况下,我将能够看到一个节是否匹配规则,如果它确实得到我需要的数据并丢弃其余的. 我想要的数据如下. Event: Newstate Channel: SIP/104-000001bb ChannelState: 6 ChannelStateDesc: Up 我想确保事件是否为新状态. 我需要频道状态.其余的我不关c – 在语义动作中添加到精神qi符号表
按照boost::spirit::qi::symbols documentation的开头段落,我假设从语义动作中添加符号到qi ::符号并不太难.不幸的是,它似乎并不像我想象的那么简单. 以下测试代码表明了问题: #define BOOST_SPIRIT_USE_PHOENIX_V3 #include <boost/spirit/include/qi.hpp> #include <boost/spiric – 提高规则的精神排列
我有两种类型的表达式,我想解析并计算结果. > Artimetic表达式:, – ,*,/和sqrt()函数; 例如:“2 3 * sqrt(100 * 25)” – >应计算为152>函数:GetSubString()和ConcatenateStrings()例如:“GetSubString(‘100str1’,0,3)” – >应计算为100 我有2个单独的语法来解析这些表达式类型.现c – Boost.Spirit.Qi用法中的错误雪崩
我无法弄清楚我的代码有什么问题. Boost的模板让我变得疯狂!我不能在这一切中做出正面或反面,所以我不得不问. 这有什么问题? #include <iostream> #include <boost/lambda/lambda.hpp> #include <boost/spirit/include/qi.hpp> void parsePathTest(const std::string &path) {c – 基于提升精神语法的字符串拆分
我正在使用Boost 1.44,Spirit解析器适用于数值解析,但对于字符串解析来说真的很棘手.我试图解析一个字符串,使用多个分隔符进行拆分:’,’,’;’要么 ‘ ‘.当我这样做时,它适用于数字(其中vect = vector< double>): qi::parse(first,last,double_ >> *(',' >> double_ | ' ' >> doc – 使用boost :: spirit :: qi用分隔符解析数字
我试图使用boost :: spirit :: qi进行一些解析.它实际上进展顺利,我成功地设法根据后缀在各种基础上解析数字.例子:123,c12h,777o,110101b. 然后我想添加允许完全忽略的分隔符的功能,以允许解析123_456或1101_0011b之类的值.我尝试使用跳过解析器,但我非常怀疑我完全误解了它是如何