首页 > TAG信息列表 > boost-spirit
c-Boost.Spirit X3解析器“没有类型命名为in(…)”
当我遇到错误时,我一直在玩Boost.Spirit X3计算器示例,我无法理解. 我将程序最小化以降低复杂度,但仍会引发相同的错误.假设我想将输入解析为语句(字符串)列表,后跟定界符(“;”). 这是我的结构: namespace client { namespace ast { struct program { std::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 :: lex中,第一次解析花费的时间最长,而解析之后的时间要短得多
我将一系列文本输入到sip解析器中.第一个花费最长的时间,无论哪个是第一个.我想知道当spirit :: lex进行第一个解析时是否有任何初始化工作? template <typename Lexer> struct sip_token : lex::lexer<Lexer> { sip_token() { this->self.add_patternc-在运行时合并规则并返回规则
我正在尝试编写一些在Spirit-X3之上构建的复杂解析器,因此我需要了解一些事情: •如何在运行时合并规则. (用纳比亚力克的把戏) ♦返回这样的规则是否可以: x3::rule<char> SomeFunction(std::string &str) { x3::rule<char> foo; auto bar = baz; BOOST_SPIRIT_DEFINE(c-使用Boost Spirit将默认值分配给变量
假设我要解析以下字符串: “ 1.2、2.0、3.9” 当我为其应用以下解析器时: struct DataStruct { double n1, n2, n3; }; BOOST_FUSION_ADAPT_STRUCT(DataStruct, (double, n1)(double, n2)(double, n3)) qi::rule<std::string::iterator, DataStruct()> data_ =c-不应用Boost Spirit解析规则
我在这里看不到我的错误..此规则可以解析一些内容,但最后两个示例没有.有人可以给我一个提示.. 目标是一个解析器,可以识别成员属性访问和成员函数调用.也以某种方式链接 a() a(para) x.a() x.a(para) x.a(para).g(para).j() x.y x.y.z x.y.z() <---fail y.z.z(para)c – 用于组成类的Boost Karma生成器
我有以下类图: 有一些未使用的类,如BinaryOperator,但我的真实代码需要它们,所以我想在示例中保留它们. 我想使用boost::karma来获取此的JSON表示. JSON应该类似于以下内容: { "name": "Plus", "type": "Function", "arguments": [ { "name": "Integc – 使用继承属性增强Spirit解析器 – 简单示例将无法编译
我正在尝试使用boost :: spirit为类C语言编写解析器,它使用继承的属性来传输有关变量范围的信息.例如,“namespace a {var b}”会将“a”作为属性传递给“var b”的解析器. 我在使用继承属性编译此代码时遇到基本解析器时遇到问题: #ifndef CPARSER_DEF_HPP #define CPARSER_DEF_HPc – 无法使用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(2.5.2)的例子.我的代码如下 #include <boost\spirit\home\qi.hpp> #include <iostream> #include <string> #include <utility> int main() { // Parsing two numbers std::string input("1.0 2.0"); std::pairc – 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 X3无法使用变量因子编译repeat指令
我试图使用Boost Spirit X3指令重复一个可变的重复因子.基本思想是头有效载荷,其中头指定有效载荷的大小.一个简单的例子“3 1 2 3”被解释为header = 3,data = {1,2,3}(3个整数). 我只能从精神qi文档中找到例子.它使用boost phoenix引用来包装变量因子:http://www.boost.org/doc/lic – 为什么nvcc无法使用boost :: spirit编译CUDA文件?
我正在尝试将CUDA集成到使用boost :: spirit的现有应用程序中. 隔离问题,我发现以下代码不能与nvcc复制: main.cu: #include <boost/spirit/include/qi.hpp> int main(){ exit(0); } 用nvcc -o cudaTest main.cu编译我得到了很多错误,可以看到here. 但是,如果我将文件名更改为mc – 使用单成员结构的Spirit Qi属性传播问题
我有一个关于Spirit Qi的编译问题,它抱怨value_type不是标识符的成员.出于某种原因,Qi的属性系统将标识符视为容器类型,并尝试枚举它的值类型. 这与this question中的问题类似,但是,我认为原因是单个成员结构,可能与此bug有关. #include <string> #include <boost/spirit/include/c – 带有boost变量递归包装器的字符串解析器
下面的代码(改编自spirit qi mini_xml示例)无法编译.存在与规则brac相关的错误,该错误具有递归boost :: variant的属性. 但是,所有注释掉的brac版本都会编译. 我非常好奇在这种情况下知道是什么让简单的字符串解析器如此特殊: #include <boost/config/warning_disable.hpp> #includc – boost :: qi :: parse似乎导致编译错误
我正在尝试使用Boost :: Spirit编写解析器,并且我编写了解析器并进行了编译.问题是,当我尝试编译解析函数时,编译器会抛出一堆模板错误.这是Qi语法: template<typename Iterator> struct etf_parser : qi::grammar<Iterator, std::map<std::string, etfnode>(), ascii::space_type>c – 一个提升精神辅助函数(模板返回类型的模板)
我正在使用boost精神,为了简化多个解析器组件的测试,我想有一个像这样的辅助函数(它不起作用) namespace qi = boost::spirit::qi; namespace tests { template <typename P, typename Attr> Attr parse(P const& p, const string& input) { string::const_iterator f = inpuc – 如何从精神语法中将原始输入捕获到合成输出中?
我正在研究一个boost :: spirit :: qi :: grammar,并希望将原始文本的一部分复制到语法的合成输出结构中(更具体地说,是匹配规则的一个组成部分的部分) ).语法最终将被用作更复杂语法的子语法,因此我实际上无法访问原始输入. 我猜这可以通过语义动作或语法上下文来完成,但是我无法c – 当某些结构字段被省略或与结构声明中的顺序不一样时,如何实现正确的解析?
所以我有一个解析器,它将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以这种方式运行,生成的语法可以根据一些运行时可计算的条件/规则/速率进行调整?例如,输入由语言构造组成,这些构造在解析期间导致不同的替代方案,一些更频繁,另一些 – 更少.但是替代方案的顺序影响效率,即语法的运行时最优性.在某些情况下,不可能事先