boost-spirit-qi相关内容
我想写一个可以使用的解析器(作为qi扩展)通过 my_parser(p1, p2, ...) 其中 p1, p2, ... 是 qi 解析器表达式. 实际上,我想实现一个 best_match 解析器,它的工作方式类似于 qi 替代方案,但不选择第一个匹配规则,而是选择“解释"大部分输入的规则. 给定两个规则 simple_id = +(qi::alpha) 和 complex_id
..
在这篇文章中关于提升精神语义动作 提到了 实际上还有 2 个参数正在传递:解析器上下文和一个对布尔“命中"的引用范围.解析器上下文是只有语义动作才有意义附在右侧某处手边的一条规矩.我们会看到更多很快有关这方面的信息.这布尔值可以设置为 false在语义动作内部无效回顾比赛,使解析器失败. 一切都很好,但我一直试图找到一个示例,将函数对象作为使用其他参数(解析器上下文和命中布尔值)的语义
..
我有这个 csv 行 std::string s = R"(1997,Ford,E350,"ac, abs, moon","一些“生锈"的零件",3000.00)"; 我可以使用 boost::tokenizer 解析它: typedef boost::tokenizer, std::string::const_iterator, std::string>分词器;boost::escaped
..
我在使用提升精神船长时遇到了麻烦. 我需要解析这样的文件: ROW intint [int,int]int [int,int]... 我能够毫无问题地解析它(感谢stackoverflow;)只有当我在第一个int之后添加一个'_'时. 事实上,我认为船长在第一个 int 之后吃掉了行尾,所以第一个和第二个(在第二行)看起来只有一个 int.我不明白如何保持 eol 但吃空间.我找
..
阅读和观看此演示文稿:http://boost-spirit.com/home/2011/06/12/ast-construction-with-the-universal-tree/ 我发现了这个说法——基本上建议我们不要使用语义动作. 我必须承认,我已经有这样的感觉:具有语义动作的语法实际上看起来有点丑陋.并且,当我需要扩展/更改它们时,需要大量的“微观管理"与语义操作完全一致.演示文
..
我正在尝试为数学表达式编写一个解析器,其中命名变量是 boost::spirit(版本 1_51_0)中的空值,我对此完全陌生.我定义了 typedef boost::functionValue 和我的规则将像这样声明:qi::rule表达,术语,其他,...; 我用这个宏在空值上定义了二元运算符 #define BINARY_FUNCTOR(name, op) \结构名称\{ \名称(x
..
假设我有这样的代码(行号供参考): 1:2:function FuncName_1 {3:var Var_1 = 3;4:var var_2 = 4;5:... 我想编写一个语法来解析此类文本,将所有标识符(函数和变量名称)信息放入一棵树(utree?)中.每个节点应保留:line_num、column_num 和符号值.例子: root: FuncName_1 (line:2,col:10
..
我正在尝试解析由空格分隔的,可选标记的字符串.例如 descr:expense类型:应收客户27.3 其中冒号前的表达式是标记,并且是可选的(即假定使用默认标记). 我不能完全让解析器做我想做的事情.我对规范进行了一些小的改编示例,其目的是解析键/值对(非常类似于HTTP查询字符串). typedef std :: pair
..
C ++中的布尔表达式(语法)解析器 我正在尝试根据"sehe"提供的上述示例修改语法,以解析以下表达式."AND((OR(a b c))(NOt(d)))". 有三个运算符AND/OR/NOT,NOT是一元运算符,但是AND和OR可以作用于多个操作数. 谢谢 解决方案 更改后的语法实际上要简单得多,因为它避开了运算符优先级的问题.这是语法的'lisp'方法:) 尽
..
我对提升::: spirit很陌生.我想将一串用逗号分隔的对象解析为std :: vector(类似于本教程中的内容).字符串可以具有不同的类型(在编译时已知):整数,例如"1,2,3" ,字符串"Apple,Orange,Banana" 等.等等.我想为所有类型提供一个统一的界面. 如果我解析单个元素,则可以使用 auto _ 表达式.向量可能有相似的界面吗?我可以定义一个规则,给定一个模
..
这是我的语法 unesc_char.add(L"\\ a",L'\ a')(L"\\ b",L'\ b')(L"\\ f",L'\ f')(L"\\ n",L'\ n')(L"\\ r",L'\ r')(L"\\ t",L'\ t')(L"\\ v",L'\ v')(L"\\\\",L'\\')(L"\\\'",L'\'')(L"\\\"“,L'\"');unesc_str ='\“'>> *
..
我有一个语法,其中输入了规则集的关键字. 下面的一些伪代码..如果有人现在写"XPUBLIC",作为输入,解析器在catch处理程序中为'boost :: spirit :: qi :: expectation_failureparser :: Iterator :: what_'创建一个'distinct'异常.可以,但是解析器还可以返回此节点上可能的条目的列表.同样,on_error处理
..
我正在尝试使用 qi :: on_success 回调(此处)设置一个匹配规则时的字段.下面的代码与代码略有不同,尽管我对规则/ast类的一些细微更改使它无法识别 _rule_name .我的意图在下面的代码中进行了注释.如果 _literal 规则匹配,我想将字段 term_type 设置为 TermType :: literal ,或将其设置为 Term :: rule_name _rule_
..
所以我想做的是解析一个字符串列表: namespace qi = boost :: spirit :: qi;名称空间ascii = boost :: spirit :: ascii;std :: string TEST ="aa \ nbbbb \ nccc \ n";std :: istringstream INPUT(TEST);std :: noskipws(INPUT);typede
..
假设我有这样的BNF语法 :: =|:: = a |b |c |d |Ë|f |克|h |一世:: = 0 |1 |2 |3 |4 如果您查看 规则,则其延续从 | 开始,但以&digit; 规则的延续开始从生产开始,在前一行的末尾出现 | .我也不想使用特定的符号来表示
..
我的解析器快要工作了:)(仍然让Spirit功能集(和编译时)以及非常欢迎的社区在堆栈溢出时感到惊讶) 在线尝试的小样本: http://coliru.stacked-crooked.com/a/1c1bf88909dce7e3 所以我学会了使用更多的lexeme-rules并尝试防止no_skip-我的规则较小,因此更易于阅读,但现在我坚持使用将lexeme-rules和skippi
..
#include#include#include#include#include#include使用命名空间boost :: spirit;int main(){std :: string s;std :: getline(std :
..
我试图解析形式为"A + C"或"A"的加法表达式.经过几次测试,我意识到问题显然出在我对可选解析器的使用上,因此可以举例说明: qi :: rule测试;测试=(qi :: string("A")[qi :: _ val = qi :: _ 1]>>-(qi :: string("B")[qi :: _ val + = qi ::
..
im目前正在开发基于Spirit的表达式解析器,该解析器应最终(在很远的将来)允许类似 的表达式 "a * b * c""10 + 20 * x.y.z""a.b.c [a.b] [e.c(d.e()* 4)].e.f((a.b + 23)* d,-23 * b.e(a.b.c)).x.y" 成员访问,数组订阅,函数调用和表达式的混合使用 []->订阅()->函数调用或表达式括号.成员
..
我正在尝试使用Boost Spirit框架定义自己的语法,并且正在定义这样的匹配规则: value =(char_('“')>>(* qi :: lexeme [char _('\\')>>char _('\\')|char _('\\')>>char_('“')|图-char_('“')|char_('')])[some_func]>>char_('“')); 我想将一个动作-some_
..