草庐IT

c++ - C++ 编译器如何区分二元运算符和模板的标记 >>

我的疑问是C++编译器的解析器如Clang,编译器如何处理运算符>>知道它何时是二元运算符以及何时关闭模板,例如:std::vector>,我想这是在解析器时间完成的,所以解决这个问题的更好方法是在词法上或仅使用>作为标记,并在语法解析器中解决问题? 最佳答案 其实很简单:如果有一个开放的模板括号可见,一个>关闭它,即使>否则将构成>>的一部分运算符(operator)。(这不适用于属于其他标记的>字符,例如>=。)对C++语法的这种更改是C++11的一部分,并在§13.3[temp.]的第3段中进行了描述。名].如果>则打开的模板

c++ - 使用 boost::spirit,我如何要求记录的一部分在其自己的行上?

我有一个记录解析器,它抛出多个异常之一以指示哪个规则失败。前题:#include#include#include#include#include#include#includeusingnamespaceboost::spirit;usingnamespaceboost::spirit::ascii;usingnamespaceboost::spirit::qi;usingnamespaceboost::spirit::qi::labels;usingboost::phoenix::function;usingboost::phoenix::ref;usingboost::spirit

C++字符串解析思路

我有另一个程序的输出,它更适合人类阅读而不是机器可读,但我还是要解析它。一点也不复杂。但是,我想知道在C++中执行此操作的最佳方法是什么。这更像是一种“一般做法”类型的问题。我研究了Boost.Spirit,甚至让它工作了一点。那东西太疯狂了!如果我正在设计我正在阅读的语言,它可能是完成这项工作的正确工具。但事实上,考虑到它的极端编译时间,当我做错任何事时,g++会出现几页错误,这不是我需要的。(我也不太需要运行时性能。)考虑使用C++运算符string::find和string::substr我猜。剩下的就是sscanf。它会很好地处理上述情况if(sscanf(str,"%shas

c++ - 年份超出有效范围 : 1400. ..10000

我正在尝试使用boost::date_time将日期字符串(从TwitterAPI获得)解析为ptime对象。日期格式的一个例子是:ThuMar2416:12:42+00002011无论我做什么,在尝试解析字符串时都会收到“年份超出有效范围”异常。日期格式对我来说是正确的,这里是代码:boost::posix_time::ptimecreated_time;std::stringstreamss(created_string);ss.exceptions(std::ios_base::failbit);//Turnonexceptionsss.imbue(std::locale(ss.

c++ - 为什么编译器只向后查找类型和函数声明?

这纯粹是为了满足我自己的好奇心,但是为什么函数和类型只针对代码中前面定义的那些进行解析,而不是针对同一范围内的任何地方?有时它会在函数需要相互调用时出现:voidfoo(intdepth){bar(depth+2);}voidbar(intdepth){if(depth>0)foo(depth-3);}你需要将bar移动到foo之前,或者预先声明bar的地方:voidbar(int);voidfoo(intdepth){bar(depth+2);}voidbar(intdepth){if(depth>0)foo(depth-3);}在更复杂的示例中,您可能需要查看#include树和#

c++ - 如何从 YACC 获取 AST?

我知道如何让YACC生成AST,但你如何真正得到它?我的意思是,您实际上如何从YACC获取根节点的值? 最佳答案 Yacc一次只返回一个节点,而且它总是您刚刚在较早的时间给yacc的东西,即您想要从减少的生产中返回的任何东西或任何您想要的东西从终端符号返回。(抱歉,您说过您知道这一点,但有些阅读本文的人可能不知道。)因此,从根规则或顶级规则中获取您想要返回的任何内容,并以您喜欢的任何方式保存它(在您附加的C缩减代码中)。 关于c++-如何从YACC获取AST?,我们在StackOverf

c++ - 哪个维基解析器?

有谁知道可以将Wiki格式的文本作为输入并生成实体树的解析器,就像XML解析器生成实体树一样?澄清一下,我正在寻找可以采用以下文本的内容:-Intro-Textualstuffin''italics''--Subhead--Yetmoretext并生成一棵以Intro为根的树,该树具有三个子节点,其中一个(Subhead)本身有一个子节点。我正在寻找能够理解http://meta.wikimedia.org/wiki/Help:Wikitext中描述的“简单”wiki格式的内容。.我知道有几个用于Wiki文本的词法分析器,但没有树解析器。我正在寻找用C或C++编写的开源软件。

node.js中的json.parse()函数的回调选项?

我有一个MQTT消息总线/队列,可以控制家庭自动化模式中的许多内容。我在“警报”系统中拥有的一件事是在出现问题时提醒我。我的警报系统的一个功能是让我知道何时风速超过房屋的一定限制。我的问题是,警报代码向我发送了伪造的警报,这些警报显示了数百个风速,而实际上它们通常(通常)低于20mph。这是代码:client.on('message',function(topic,msg){if(topic.indexOf('wind')!=-1){varrr=JSON.parse(msg.toString());if(rr.speed>TOPSPEED){notify.notify({title:'--AL

c++ - 术语 "Most vexing parse"是何时何地创造的?

有无数文章和博客讨论C++的mostvexingparse,但我似乎找不到比“C++文献”更具引用意义的任何内容。这个词是从哪里来的? 最佳答案 ScottMeyers的书EffectiveSTL:50SpecificWaystoImproveYourUseoftheStandardTemplateLibrary可能是2001年首次发布使用。 关于c++-术语"Mostvexingparse"是何时何地创造的?,我们在StackOverflow上找到一个类似的问题:

c++ - 解析其他命名集的多个命名集

所以我想用boost::spirit::qi写一个……好吧……不那么简单的解析器。我知道boostspirit的基本知识,在过去的几个小时里第一次熟悉它。基本上我需要解析这个:#comment#othercommentset"MysetA"{figure"AF1"{i000i125i111f3.145.115.3i315f1.12.335.166}figure"AF2"{i2551i313}}#commentset"MysetB"{figure"BF1"{f23.14.35.11}}set"MysetC"{include"MysetA"#includesallfiguresfromMy