boost-spirit-qi相关内容
我试图用boost :: spirit解析时用语义规则创建AST. AST必须仅为输入的一部分构建,输入的另一部分应在不使用正弦树的情况下进行解析. 例如,对于这样的输入字符串:"self.usedFoo(Bar).filter( self.baz> baz )"或"self.Foo.filter( true >)"AST应该仅用于粗体部分. 还有一个问题:解析器运行多次解析语法并多次
..
我想输入一个很大的csv文件,以使用Spirit qi进行解析(使用Boost 1.59.0).有一些例子,看起来很简单,但是明显的设置导致编译错误,其中qi :: phrase_parse(...)的第一个参数不被接受.这里有什么用? (一个示例位于: 如何从本质上将迭代器传递给函数气 ) 代码: #define BOOST_SPIRIT_DEBUG //#define BOOST_SPI
..
使用Boost.Spirit解析语言时,如何确保跳过 // line comments /* block comments */ and /* /* nested block */ comments */ 何时阅读代码?此刻,我只是将phrase_parse转换为预定义的qi::grammar.我想我需要的是某种跳过词法分析器,对吧? 解决方案 无需词法分析器
..
我正在尝试使用 boost spirit 为以下BNF规则编写解析器 (增强版v1.64) 规则是: ::= integer ::= "in" | "out" | "in_out" ::= "[" [] "]"
..
我开始学习Boost.Spirit并完成阅读这是代码(包括来自Spirit lib内部示例之一)的所有代码: #include #include #include #include
..
我想要一个名称-值对的列表.每个列表以“."结尾.和停产.每个名称/值对之间用“:"分隔.每对之间用“;"分隔在列表中.例如 NAME1: VALUE1; NAME2: VALUE2; NAME3: VALUE3. 我的问题是值包含“."并且最后一个值始终使用“."在EOL.我可以使用某种形式的前瞻性来确保最后一个'.'.在对EOL进行不同对待之前? 解决方案 我已经创
..
假设我们有一条规则1 qi::rule rule1 = qi::int_[qi::_val=qi::_1]; 我们认为获取一个int作为属性是不够的,我们还想获取原始数据(boost :: iterator_range).我们可能有很多与Rule1类型相同的规则.因此,最好有一个通用的解决方案.因此,我们可以定义另一个规则2.
..
我有一个解析器,它基本上以给定表达式的运算符优先级来打印出堆栈计算机的动作.我的目标是尽可能优化速度.我已经阅读了有关气管优化的文章,该文章提供了此示例代码.我了解主要文章中描述的优化要点,但是我不清楚如何将其集成到我的代码中. 这是我的解析器的以下工作示例.我已经尝试通过使用raw[]提供基本迭代器对其进行某种程度的优化.必须给phoenix操作调用字符串或迭代器,以便它们可以创建字符串.
..
我正在为一种类型的输入文件编写解析器.输入文件如下所示: [CalculationBlock] CalculationTitle="Test Parser Input System" , MatchingRadius=25.0, StepSize=0.01,ProblemType=RelSchroedingerEqn MaxPartialWaveJ=800, SMatConv=10E-8 P
..
我正在解析一个文本文件,大小可能为几GB,由以下几行组成: 11 0.1 14 0.78 532 -3.5 基本上,每行一个int和一个float.整数应该有序且非负.我想验证数据是否如所述,并已将范围内的min和max int返回给我.这是我想出的: #include #include #include
..
我在boost::spirit中具有以下规则: typedef boost::tuple Entry; qi::rule entry; entry = qi::int_ >> qi::int_; 但是第二个int没有写入元组.有没有一种方法可以使它工作而不必使用boost::fusion::tuple? 如
..
我想提出一个主题,该主题将我送进了一个兔子洞,并提出了一个有关 qi ::符号. 当我查看新的野兽库并阅读 它以从HTTP路径猜测MIME类型的函数开始 扩展名.我开始更加仔细地观察,并看到了: auto const ext = [&path] { auto const pos = path.rfind("."); if(pos == b
..
我创建了一个测试应用程序来说明我的问题.它解析一个以"a ="或"b ="开头的整数列表,并以"\ r \ n"分隔.该列表以任意顺序包含这些字段的多次出现. #include #include #include #include #include
..
我想基于先前解析的值i定义一个规则. e.输入字符串具有以下结构:D 或I .无论第一个读取字符是D还是I,我都保留在本地布尔变量中.完整的代码是: #define BOOST_SPIRIT_USE_PHOENIX_V3 #include #include
..
在我的Boost Spirit语法中,我希望有一条规则可以做到这一点: 规则 noCaseLit = no_case [lit("KEYWORD")]; 但要使用自定义关键字,以便我可以这样做: ... >> noCaseLit("SomeSpecialKeyword")>> ... >> noCaseLit("OtherSpecialKeyword1") Bo
..
我想解析点语言( http://www.graphviz.org/content/dot-language ).这是一种图形定义语言,用于定义节点和节点之间的连接.一个典型的语句看起来像node1->node2->node3;.使用boost :: spirit列表运算符%制作节点列表会很好.天真的方法是: edge_stmt %= ( node_or_subgrap
..
我已经问过有关此问题的问题.但是由于没有答案,我现在要用完整的可编译源代码片段再次询问. 由于boost :: variant move语义存在一些问题,因此不应使用std = c ++ 11选项来编译此代码段.只是"g ++ -Wall -pedantic". 在此代码段中,您将找到"//在此处注释"行.您可以在以下块之前注释,直到"//And here -----". 如果未注释该
..
假设我有一个要与Spirit Qi一起解析的结构,其定义如下: struct data_ { bool export; std::wstring name; data_() : export(false) {} }; 此外,假设该结构已适应如下融合: BOOST_FUSION_ADAPT_STRUCT( data_, (bool, expo
..
在Boost.Spirit中,只需执行以下操作就可以从流中读取到std::vector: #include #include namespace sqi = boost::spirit::qi; int main(){ std::string const v_str = "AA BB CC";
..
是否可以强制 Boost.Spirit Qi 以这种方式运行,以使生成的语法可以根据运行时可计算的条件/规则/速率进行调整?例如,输入由语言结构组成,这些语言结构在解析过程中会导致不同的选择,某些情况下会更频繁地出现,而其他方面则更少.但是备选方案的顺序会影响效率,即语法的运行时最佳性.在某些情况下,无法预先确定在任意输入(可能是很强的聚集性)的情况下,会更频繁地选择哪种选择. 我知道可以在
..