boost-spirit相关内容

C++ 中的布尔表达式(语法)解析器

我想解析一个布尔表达式(在 C++ 中).输入形式: a and b xor (c and d or a and b); 我只想把这个表达式解析成一棵树,知道优先规则(not,and,xor,or).所以上面的表达式应该是这样的: (a and b) xor ((c and d) or (a and b)); 到解析器. 树的形式如下: 一个和乙或者C和d异或一个和乙 输入将通 ..
发布时间:2021-12-12 23:15:00 C/C++开发

提升精神船长问题

我在使用提升精神船长时遇到了麻烦. 我需要解析这样的文件: ROW intint [int,int]int [int,int]... 我能够毫无问题地解析它(感谢stackoverflow;)只有当我在第一个int之后添加一个'_'时. 事实上,我认为船长在第一个 int 之后吃掉了行尾,所以第一个和第二个(在第二行)看起来只有一个 int.我不明白如何保持 eol 但吃空间.我找 ..
发布时间:2021-12-01 15:02:40 C/C++开发

Boost Spirit:“语义行为是邪恶的"?

阅读和观看此演示文稿:http://boost-spirit.com/home/2011/06/12/ast-construction-with-the-universal-tree/ 我发现了这个说法——基本上建议我们不要使用语义动作. 我必须承认,我已经有这样的感觉:具有语义动作的语法实际上看起来有点丑陋.并且,当我需要扩展/更改它们时,需要大量的“微观管理"与语义操作完全一致.演示文 ..
发布时间:2021-12-01 14:56:43 C/C++开发

如何为给定的 boost::spirit 语法提供自动完成建议的用户?

我正在使用 Boost::Spirit 在我的 C++ GUI 应用程序中为非技术用户构建简单的“数据过滤器"语言.语言与普通英语非常相似,可以解析为 AST.我被要求尽可能使过程对用户友好,因此我希望提供类似 CLang 的错误消息(“无法识别的 'tokken',您的意思是 'tokken'?")和自动完成. 现在的问题是如何使用 Boost::Spirit 语法为两个目标生成可能的标记 ..
发布时间:2021-11-30 18:42:04 C/C++开发

boost Spirit 语法的不一致行为

我有一些语法要用于工作项目.一个最小的可执行示例是: #pragma GCC 诊断推送#pragma GCC 诊断忽略“-Wunused-local-typedefs"#pragma GCC 诊断忽略“-Wmaybe-uninitialized"#pragma GCC 诊断忽略“-Wunused-variable"#include #include #include #include #prag ..
发布时间:2021-11-30 18:20:49 C/C++开发

Boost::spirit::qi 为空值定义计算器

我正在尝试为数学表达式编写一个解析器,其中命名变量是 boost::spirit(版本 1_51_0)中的空值,我对此完全陌生.我定义了 typedef boost::functionValue 和我的规则将像这样声明:qi::rule表达,术语,其他,...; 我用这个宏在空值上定义了二元运算符 #define BINARY_FUNCTOR(name, op) \结构名称\{ \名称(x ..

我如何从本例中更改语法以解析"AND((OR(a b c))(NOT(d)))

C ++中的布尔表达式(语法)解析器 我正在尝试根据"sehe"提供的上述示例修改语法,以解析以下表达式."AND((OR(a b c))(NOt(d)))". 有三个运算符AND/OR/NOT,NOT是一元运算符,但是AND和OR可以作用于多个操作数. 谢谢 解决方案 更改后的语法实际上要简单得多,因为它避开了运算符优先级的问题.这是语法的'lisp'方法:) 尽 ..
发布时间:2021-04-16 18:31:51 C/C++开发

在boost :: spirit和std :: vectors中使用auto_表达式

我对提升::: spirit很陌生.我想将一串用逗号分隔的对象解析为std :: vector(类似于本教程中的内容).字符串可以具有不同的类型(在编译时已知):整数,例如"1,2,3" ,字符串"Apple,Orange,Banana" 等.等等.我想为所有类型提供一个统一的界面. 如果我解析单个元素,则可以使用 auto _ 表达式.向量可能有相似的界面吗?我可以定义一个规则,给定一个模 ..
发布时间:2021-04-16 18:31:47 C/C++开发

如何在错误消息“与众不同"的可能符号中增强精神?

我有一个语法,其中输入了规则集的关键字. 下面的一些伪代码..如果有人现在写"XPUBLIC",作为输入,解析器在catch处理程序中为'boost :: spirit :: qi :: expectation_failureparser :: Iterator :: what_'创建一个'distinct'异常.可以,但是解析器还可以返回此节点上可能的条目的列表.同样,on_error处理 ..
发布时间:2021-04-16 18:31:35 C/C++开发

在规则匹配后使用Spirit qi :: success回调设置字段

我正在尝试使用 qi :: on_success 回调(此处)设置一个匹配规则时的字段.下面的代码与代码略有不同,尽管我对规则/ast类的一些细微更改使它无法识别 _rule_name .我的意图在下面的代码中进行了注释.如果 _literal 规则匹配,我想将字段 term_type 设置为 TermType :: literal ,或将其设置为 Term :: rule_name _rule_ ..
发布时间:2021-04-16 18:31:32 C/C++开发

用激发精神中的其他弦代替点燃

我正在尝试使用boost spirit解析包含转义序列的带引号的字符串.我正在寻找一种将转义序列 \"替换为相应字符(在这种情况下为" )的方法.到目前为止,我已经提出了这个建议. c_string%= lit('“')>> *(lit(" \\\“")[push_back(_val,'“')]] |(char_-'"'))>>lit('“') 替换完成 lit("\\\"“)[ ..
发布时间:2021-04-16 18:31:29 C/C++开发

Boost Spirit x3条件(三元)运算符解析器

我需要从数学表达式构建一个抽象的语法树,以后我需要将特定于域的对象链接在一起作为计算树.我发现表达式解析器库 https://github.com/hmenke/boost_matheval 是一个很好的起点. 在我的用例中,我需要支持三元条件表达式 condition?true_exp:false_exp .到目前为止,解析器能够解析诸如 1 +(2 + abs(x))或 min(x,1 ..
发布时间:2021-04-16 18:31:26 C/C++开发

X3,什么是attr_gen?

我最终会遇到很多这些移动错误,并且除了与我解析字符串的方式有关之外,我不太确定为什么.删除所有与“虚拟"有关的内容,错误会再次出现. 有人提到使用attr_gen(无法在文档中找到它),这样做,我可以克服这些"traits :: move_to"编译错误,但是解析器仍然失败.我已经标记了为使它可以编译而添加的行,但是认为不需要用“ ..
发布时间:2021-04-16 18:31:18 C/C++开发