草庐IT

c++ - 将 (0&(1|0)|1) & (0|1) 等字符串转换为对应的真值

我在面试论坛上发现了这个问题,认为这是一个有趣的问题。有什么简单的方法可以用C++完成这个任务吗?例如,假设我们有函数声明:bool_transform(stringx);/*xisacombinationof(,),0,1,&,and|suchthatallexpressionsstartwithaopenandendingbrace,andthefunctionevaluatesthestringsactualtruthvalue*/是否有任何有效且相对简单的方法来做到这一点?我想到了递归地关闭括号,但问题似乎很难。 最佳答案

c++ - 评估 C++ 字符串中的表达式 : "Hi ${user} from ${host}"

我正在寻找一种干净的C++方法来解析包含用${}包裹的表达式的字符串,并从以编程方式评估的表达式构建结果字符串。示例:如果我实现让“user”评估为“foo”的程序,“Hi${user}from${host}”将评估为“Hifoofrombar”等我正在考虑的当前方法包括一个状态机,该状态机一次从字符串中吃掉一个字符,并在到达“}”后计算表达式。有什么提示或其他建议吗?注意:boost::是最受欢迎的!:-)更新感谢前三个建议!不幸的是我让这个例子太简单了!我需要能够检查${}中的内容,所以这不是简单的搜索和替换。也许它会说${uppercase:foo}然后我必须使用“foo”作为H

c++ - 在 C++ 编译过程中,上下文敏感性在哪里得到解决?

昨天我问了关于C++上下文敏感性的问题,参见here.在众多优秀答案中,here是被接受的,通过dmckee.但是,我仍然认为对此有话要说(也许是一些术语混淆?)。问题是:编译的哪一部分处理歧义?为了澄清我的术语:CFG是一种语法,它在规则的左侧只有一个非终结符(例如A->zC),CSG是在左侧(aAv->QT)有一个终结符(加上一个非终结符),其中大写字母是非终结符,小写字母是终结符。在语法解析C++源码中有没有类似后者的表现形式?谢谢,很抱歉推送这个问题。 最佳答案 没有我所知道的C++前端(解析器、名称/类型解析器)(incl

c++ - Boost::Spirit 中的复合语法

我有以下语法,它按预期工作。structquery_term{std::stringterm;boolis_tag;query_term(conststd::string&a,booltag=false):term(a),is_tag(tag){}};templatestructquery_grammar:grammar(),space_type>{query_grammar():query_grammar::base_type(query){word%=+alnum;tag=(omit[word>>':']>>word[_val=phoenix::construct(_1,true)

c++ - boost::spirit::qi Expectation Parser 和分组意外行为的解析器

我希望有人可以通过我对使用>的无知来点亮。和>>spirit解析中的运算符。我有一个工作语法,顶级规则看起来像test=identifier>>operationRule>>repeat(1,3)[any_string]>>arrow>>any_string>>conditionRule;它依靠属性自动将解析后的值分配给适合fusion的结构(即boost元组)。但是,我知道一旦我们匹配了operationRule,我们必须继续或失败(即我们不想让回溯尝试其他以identifier开头的规则)。test=identifier>>operationRule>repeat(1,3)[any

c++ - 如何使用 boost::spirit 将文本解析为结构?

我在学习boost::spirit,我正在尝试读取一些文本并将其解析为一个结构。例如,"2:4.6"被解析为int2和双4.6在我的TestStruct下面:#include#include#include#includenamespaceqi=boost::spirit::qi;structTestStruct{intmyint;doublemydouble;TestStruct(){}TestStruct(std::pairp):myint(p.first),mydouble(p.second){}};templatestructMyGrammar:qi::grammar{MyGr

c++ - 为什么 Boost.Spirit 正确地将标识符解析为 std::string,而不是解析为仅由 std::string 组成的适配结构?

我为标识符定义了一条规则:以字母字符开头,后跟任意数量的字母数字字符。当我直接解析为std::string与包含单个std::string的改编结构时,我得到不同的结果。如果我的语法属性是std::string,Qi会正确地将字符序列调整到其中。但是对于结构,只存储第一个字符。我不太确定这是为什么。(请注意,如果结构是“真正”改编的,或者它是由Fusion内联定义的,这没有区别。)这是一个SSCCE,可配置调试://Options://#defineDEFINE_STRUCT_INLINE//#defineDEBUG_RULE#defineBOOST_SPIRIT_USE_PHOENI

c++ - 没有匹配的成员函数来调用 child.value

当我尝试编译下面的代码时出现错误:src/main.cpp:51:48:error:nomatchingmemberfunctionforcallto'child_value'std::cout我不明白的是我能够在上面的循环中使用它。我只能假设它希望我使用kv.second.child_value(kv.second);代替。但是我希望它在for(auto&eb:mapb){.返回的xml上运行这段代码。#include"pugi/pugixml.hpp"#include#include#includeintmain(){conststd::maptagMap{{"descriptio

c++ - 我将如何执行此文本模式匹配

迁移自[Spirit-general]列表早上好我正在尝试跨4个std::strings解析一个相对简单的模式,将与模式匹配的任何部分提取到一个单独的std::string.在抽象意义上,这就是我想要的:s1=,s2=,s3=,s4=不太抽象:s1="apple1",s2="2cheese",s3="apple3",s4="4cheese"实际内容:s1="lxckvjlxcjvlkjlkjexvcjxzlvcjwqrejlxvcjzljvl;xczvouzxvcuj;ljfdsapple1xcvljxclvjxoueroixcvzlkjv;zjx",s2="xzljlkxvcjlkj

c++ - "C++ most vexing parse"的运行时行为

在尝试回答this时我发现没有()(调用“C++最烦人的解析”)的问题g++的输出是1(可以在这里看到:http://ideone.com/GPBHy),其中VisualStudio给出链接器错误。我无法理解输出如何可以1,有什么线索吗? 最佳答案 正如问题的答案已经解释的那样,由于“最令人烦恼的解析”语句而不是定义一个名为str的对象与两个istream_iterators指定其初始值设定项,被解析为名为str的函数的声明返回string.所以程序的简单版本解析为,thisonlinesample:#includevoiddoSo