草庐IT

c++ - 手写递归上升解析器中的递归左递归

我一直在编写一些递归上升解析器,而我一直在努力解决的问题之一是左递归。在我看来,右递归可以递归地表达,就像addExpr:primaryExpr'+'addExpr|primaryExpr;按照的思路parseAddExpr(){autox=parsePrimaryExpr();if(next_token=='+'){autoresult=make_unique();result->lhs=x;result->rhs=parseAddExpr();returnstd::move(result);}returnstd::move(x);}但是对于左递归,我能想出的只是一个while循环。

c++ - 解析 float 的 C 字符串

我有一个C字符串,其中包含一个由逗号和空格分隔的float列表。每对数字由一个(或多个)空格分隔,并表示一个点,其中x和y字段由逗号分隔(也可以由空格分隔)。"10,92.5,34,150.32"我需要解析这个字符串以填充Point(x,y)列表。以下是我当前的实现:constchar*strPoints=getString();std::istringstreamsstream(strPoints);floatx,y;charcomma;while(sstream>>x>>comma>>y){myList.push(Point(x,y));}因为我需要解析很多(最多500,000个)

c++ - 将 boost spirit 用于基于堆栈的语言

我需要解析一种相当简单的基于堆栈的语言,例如12add31sub我在这里面临两个选择:为标记编写我自己的词法分析器,然后继续解析它使用boostspirit我从未使用过boostspirit,但根据我所阅读的内容(文档和示例),我仍然不能确定使用boostspirit来lex和解析这种简单的语言是否会过大,或者如果使用它而不是推出我自己的词法分析器和解析器是有意义的(我认为这应该不会太难)。将boostspirit用于像上面那种基于堆栈的简单语言会有返回吗(因为我需要先学习它才能使用它)? 最佳答案 在“详尽探索”类别中,让我添加一

c++ - 具有两个参数的 vector 构造函数被解析为函数声明

考虑这个例子:#include#include#include#includeintmain(){std::stringsen="abcdefghijkl";std::istringstreamiss(sen);std::vector//declarationinquestionvec(std::istream_iterator(iss),std::istream_iterator());std::copy(vec.begin(),vec.end(),std::ostream_iterator(std::cout,"\n"));}编译器在调用std::copy时抛出错误请求'vec'中

c++ - 解析 GLSL 着色器字符串以在 Android NDK 中查找变量名称

这个是个傻瓜。为了正确解释,让我解释一下我正在尝试做的事情。我将跟进一个代码list,然后再解释代码。目标我试图在我拥有的每个GLSL着色器文件中获取变量的名称。现在,我只有一个顶点着色器,以及一个片段着色器来补充它。这样做的目的是让我可以动态地将值绑定(bind)到着色器,而不必输入每个变量名。代码std::vectorGetShaderVariableNames(constShader&shader){Config::Log::info("Gettingshadervariablenames.");staticconstchar*keyLookupTable[]={"vec2","

c++ - 通过 bash 脚本查找和修改函数定义 (C++)

目前我正在从事一个相当大的项目。为了提高我们代码的质量,我们决定对每个函数强制执行返回值(错误代码)处理。GCC支持关于函数返回值的警告,但是函数定义必须在以下标志之前。static__attribute__((warn_unused_result))ErrorCodetest(){/*codegoeshere*/}我想实现一个解析整个源代码并发出警告的bashscript,以防万一__attribute__((warn_unused_result))不见了。请注意,所有需要这种修改的函数都会返回一个名为ErrorCode的类型。您认为这可以通过bash脚本实现吗?

c++ - Boost::Spirit 简单语法示例

我正在学习BoostSpirit(和BoostFusion)教程(版本1.48.0)。我一直在玩玩具员工的例子。源链接在这里:http://www.boost.org/doc/libs/1_48_0/libs/spirit/example/qi/employee.cpp这是示例的语法:employee_parser():employee_parser::base_type(start){usingqi::int_;usingqi::lit;usingqi::double_;usingqi::lexeme;usingascii::char_;quoted_string%=lexeme['

c++ - 将带有千位(和小数)分隔符的字符串转换为 double

用户可以在文本框中输入double。数字可能包含千位分隔符。在将输入的数字插入数据库之前,我想验证用户输入。是否有C++函数可以将此类输入(1,555.99)转换为double?如果有,如果输入无效(我不想以类似于atof的功能结束),它是否会发出错误信号?类似于strtod,但必须接受带有千位分隔符的输入。 最佳答案 使用包含接受千位分隔符的语言环境的流将输入转换为double。#include#includeintmain(){doubled;std::cin.imbue(std::locale(""));std::cin>>d

c++ - 简单解析题

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Couldanyoneexplaintheseundefinedbehaviors(i=i+++++i,i=i++,etc…)UndefinedBehaviorandSequencePoints(C++FAQentry)在C和C++中,表达式x++++++y是如何解析的?作为x+++++y还是作为x+++++y?

c++ - 解析文本以创建树状数据结构

假设我正在从文件中读取一行:{Parent{{ChildA}{ChildB}}}更复杂的例子:{Parent{{ChildA{ChildC}{ChildD}}{ChildB{ChildE}{ChildF}}}}这是用来构造树的语法。{}括号内的任何名称都是一个节点,如果该括号内还有其他节点(括号),则这些节点是子节点。我能够使用计数器解析第一个具体示例,但只能找到节点的文本名称。我如何解析它以便确定哪些节点是彼此的子节点?我似乎无法全神贯注于我将使用的代码。我感觉我会使用递归。如有任何帮助或建议,我们将不胜感激。首选C++。非常感谢。 最佳答案